#php #mysql #forms #match
#php #mysql #формы #совпадение
Вопрос:
У меня есть таблица MySQL с несколькими столбцами, в том числе с именем ‘Name’.
Я хотел бы создать форму для веб-страницы, которая состоит из двух текстовых полей, A и B. В текстовом поле A пользователю потребуется ввести свое имя, а в текстовом поле B — некоторую другую информацию.
Я хотел бы, чтобы PHP-скрипт проверил, совпадает ли имя в текстовом поле A со значением, уже находящимся в столбце Name в таблице MySQL, и если это так, добавьте значение в текстовом поле B в другой столбец в этой таблице. Если имя не найдено, я бы хотел, чтобы скрипт вернул сообщение об ошибке типа «Ваше бронирование не было найдено в нашей базе данных».
Возможно ли это сделать с помощью PHP / MySQL, и если да, то как мне это сделать?
ТЕКУЩИЙ КОД
$row_count = count($_POST['name']);
mysql_select_db($database, $connection);
if ($row_count > 0) {
$values = array();
for($i = 0; $i < $row_count; $i ) {
// variable sanitation...
$name = mysql_real_escape_string(ucwords($_POST['name'][$i]));
$workshop = mysql_real_escape_string($_POST['workshop'][$i]);
$query = "SELECT * FROM conference WHERE Name = '$name' ";
$result = mysql_query($query);
if ($result) {
$rowcount = mysql_num_rows($result);
if ($rowcount == 0) {echo "no bookings found"; }
else {
$row = mysql_fetch_row($result);
$sql = "UPDATE conference SET Workshop = '$workshop' WHERE Name = '$name'";
mysql_query($sql);
}
}
}
}
Комментарии:
1. это вопрос «пожалуйста, напишите мой код для меня»??
2. а) Да, это возможно б) Вы пишете некоторый код.
3. @Laurence Burke Спасибо, и нет, это не вопрос «можете ли вы написать какой-нибудь код для меня». Я искал термины, относящиеся к этому, и ничего не придумал, отсюда и вопрос. Я рад слышать, что это возможно сделать. Я удвою свои усилия, чтобы разработать необходимый код. Если у кого-нибудь есть какой-нибудь код, который поможет мне на моем пути, или полезные ссылки, это, конечно, было бы полезно!
4. извините, но этот вопрос представляет собой довольно простую форму с вопросом проверки базы данных. Другими словами, это просто кажется довольно простым вопросом, который нужно задавать без каких-либо видимых попыток заставить его работать…
5. @Laurence Burke Лоуренс, я добавил код, который у меня теперь есть в конце моего первоначального вопроса. Кажется, это работает, но, возможно, не так хорошо, как могло бы быть? Возможно, вы могли бы взглянуть на какие-либо предлагаемые улучшения? Кроме того, каков самый простой способ генерирования ошибки, если имя не найдено, на самой странице формы, вместо эха на пустой странице? Спасибо, Ник
Ответ №1:
Это должно помочь вам начать.
//Get the value from the textbox
$name = mysql_real_escape_string($_POST['name']);
//Select all rows with the name
$query = "SELECT other_info FROM table1 WHERE name = '$name' ";
$result = mysql_query($query);
if ($result) {
$rowcount = mysql_num_rows($result);
//No rows found
if ($rowcount == 0) {echo "no bookings found"; }
else {
//process the data.
$row = mysql_fetch_row($result);
$other_info = $row['other_info'];
echo "other_info = ".hmtlentities($other_info);
Смотрите здесь: http://php.net/manual/en/book.mysql.php
Комментарии к коду
$row_count = count($_POST['name']);
if ($row_count > 0) {
mysql_select_db($database, $connection);
//$values = array();
$name = array();
$workshop = array()
$replace = array()
for($i = 0; $i < $row_count; $i ) {
// variable sanitation...
$name[i] = mysql_real_escape_string(ucwords($_POST['name'][$i]));
$workshop[i] = mysql_real_escape_string($_POST['workshop'][$i]);
//if you use option 2
$replace[i] = "('".$name[i]."','".$workshop[i]."')";
}
$names = "'".implode("','",$name)."'";
$query = "SELECT 1 FROM conference WHERE Name IN $names ";
$result = mysql_query($query);
if ($result) {
$rowcount = mysql_num_rows($result);
if ($rowcount == 0) {
echo "<HTMLCODE HERE>"."no bookings found"."<MORE HTML>";
//OPTION 1
} else {
for($i = 0; $i < $row_count; $i ) {
//$row = mysql_fetch_row($result);
$sql = "UPDATE conference SET Workshop = '$workshop[i]'
WHERE Name LIKE '$name[i]'";
mysql_query($sql);
}
}
//OPTION2
} else {
$replacement = implode(",",$replace);
$sql = "REPLACE INTO conference (names, workshop) VALUES $replacement "
mysql_query($sql);
}
}
}
Комментарии:
1. Спасибо, это, безусловно, помогло мне на моем пути. Я добавил код, который у меня есть в настоящее время, который, похоже, обрабатывает форму нормально, и добавляет информацию из элемента «мастерская» в правильные строки в моей базе данных. Не могли бы вы взглянуть на это и сообщить мне, если увидите какие-либо явные ошибки! Кроме того, мне интересно, как превратить эхо «бронирование не найдено» в сообщение об ошибке, которое отображается в самой форме, вместо эха на пустой странице, поэтому, если у вас есть какие-либо предложения по этому поводу, я был бы рад их услышать. Ник
2. Еще раз спасибо, Йохан. Мне не нужно заменять имена в моей таблице, просто добавьте значения workshop, где выполняется совпадение со значениями в столбце name. Поэтому я выбрал вариант 2 и попытался заставить его работать с вариантом 1, чего я не смог сделать. Меня интересует
$names = "'".implode("','",$name)."'";
строка,$names
на которую больше не ссылаются. Мне также интересно узнать о$query = "SELECT 1 FROM conference WHERE Name IN $name ";
строке. К чему относится 1?3. @nick значение 1 возвращает 1, если что-то найдено, и ничего, если нет. таким образом, БД фактически не извлекает какие-либо данные из БД, экономя время
4. В строке implode отсутствовали скобки, что мешало работе вашего скрипта. Теперь это выглядит так:
$names = "('".implode("','",$name)."')";
по какой-то причине$name[i]
добавляется только фамилия в форме$names
. Когда я использую$name[]
, добавляется правильная строка$names
, но затем данные не добавляются в столбец workshop. Не могли бы вы помочь с этим? Спасибо, Ник5.
$name[$i]
и$workshop[$i]
решил проблему в моем последнем комментарии. Возможно, вы хотите обновить свой ответ, чтобы отразить эти два изменения? Спасибо за вашу помощь, Ник