Могу ли я добавлять значения в таблицу MySQL через форму, основанную на совпадении значений в текстовом поле и значений в столбце таблицы?

#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] решил проблему в моем последнем комментарии. Возможно, вы хотите обновить свой ответ, чтобы отразить эти два изменения? Спасибо за вашу помощь, Ник