Почему этот PHP-скрипт не отправляет данные формы в mysql?

#php #html #xhtml

#php #HTML #xhtml

Вопрос:

Предполагается, что этот скрипт получает содержимое текстовой области и отправляет его в mysql, но никто не может понять, почему?

     if ($_SERVER["REQUEST_METHOD"] == "POST") 
{
$error = '';
$like = mysql_real_escape_string($_POST['like_box']);

mysql_query("INSERT INTO likes (like) VALUES ($like)");

$id = mysql_query("SELECT id FROM likes WHERE like=$like");
header('Location:like.php?id='.$id.'');
}?>



<form method="post" action="post.php">
                <textarea name="like_box" id="like_box" style="border-style: none; border-color: inherit; border-width: 0; width: 458px; height: 65px" class="style11120"></textarea>

            <tr>
                <td style="height: 53px">
                <div class="style11116" style="width: 417px">
                    <input name="Submit" type="submit" value="submit" />
                    </form>
  

Комментарии:

1. Вы пробовали отладку в post.php файл, запись echo $_POST['like_box']; die(); работает ли это там?

2. В скрипте вы подключаетесь к базе данных и выбираете ее?

Ответ №1:

Наличие некоторого сообщения об ошибках сообщило бы вам, что вам нужно ‘вокруг $like и вам нужно` вокруг like в разделе columns, поскольку like — это зарезервированное слово внутри вставки.

 mysql_query("INSERT INTO likes (`like`) VALUES ('$like')") or trigger_error('Query Error: ' . mysql_error());
  

Должно сработать.


Также вам нужно будет вложить like в ` для выбора:

 $id = mysql_query("SELECT id FROM likes WHERE `like`=$like") or trigger_error('Query Failed: ' . mysql_error());
  

Ответ №2:

Ваш первый SQL-запрос неверен. В SQL вы должны заключать строковые значения в кавычки:

 mysql_query("INSERT INTO likes (`like`) VALUES ('$like')");
  

Остальная часть вашей PHP-части также не будет работать так, как вы хотите. $id будет результирующим набором, а не значением. Вам нужно будет извлечь строку следующим образом:

 $result = mysql_query("SELECT id FROM likes WHERE `like`='$like'");
$row = mysql_fetch_assoc($result);
$id = $row['id'];
  

Или, что еще лучше, просто замените второй SQL-запрос вызовом mysql_insert_id:

 $id = mysql_insert_id();
  

Еще больше возможностей для улучшения:

  • Не забудьте вызвать exit после того, как вы выполнили header('Location: ...'); вызов, иначе вы можете получить неожиданные результаты, поскольку скрипт продолжит выполнение.
  • Добавьте некоторую обработку ошибок вашей вставки. По крайней мере, проверьте с помощью оператора if, что это удалось.