2011-12-28 3 views
2

Я не могу понять, почему это не работает. В нем говорится «примечание добавлено», но оно фактически не добавляет его в базу данных.Неисправность вставки mysql

<?php 

    $notetitle = $_POST['title']; 
    $notebody = $_POST['body']; 

if ($notetitle && $notebody){ 
mysql_query("insert into notes values 
('$user_id', '', '$subject', '$notetitle', '$note_type' '$notebody')"); 

echo "Note \"" . $notetitle . "\" added."; 
} 

>

+1

Обратите внимание, что как только он попадает в if ($ notetitle ...), он всегда будет выполнять эхо-сигнал, даже если он не был вставлен. – Nobita

+0

Не забудьте защитить себя от инъекций mysql (используйте mysql_real_escape_string() http://php.net/manual/en/function.mysql-real-escape-string.php). – s3v3n

ответ

7

Вы пропустили запятую:

('$user_id', '', '$subject', '$notetitle', '$note_type', '$notebody')"); 
+0

Это сделало бы это. Благодаря! –

0

Ваш SQL-запрос не является вполне действительным - вы должны также добавить к нему в имена столбцов, которые вы хотите установить? до INSERT:

mysql_query("insert into notes (id, smth, subject, ... etc) values 
('$user_id', '', '$subject', '$notetitle', '$note_type', '$notebody')"); 
+0

Это не обязательно, если вы даете значения для всех столбцов. – s3v3n

+0

@ s3v3n - вы правы, но на мой взгляд ** явный лучше, чем неявный ** – user1118250

+0

да, я согласен с вами, что явное лучше. Просто хотел упомянуть, что вы сказали «вам тоже нужно добавить», что означает «обязательный», а не «лучший» (даже если это так). Во всяком случае, я думаю, что мы достаточно прояснили все. – s3v3n

1

У вас есть mista kes в вашем коде. используйте приведенный ниже код и проверьте его. Я добавил что-то еще, чтобы быть уверенным в вашей точности данных:

<?php 

$notetitle = $_POST['title']; 
$notebody = $_POST['body']; 

if ($notetitle != '' && $notebody !='') { 
    $myQuery = mysql_query("INSERT INTO notes VALUES 
          ('$user_id', '', '$subject', '$notetitle', 
          '$note_type', '$notebody')"); 

    // verify your database query and then show the message below 
    if (mysql_affected_rows()) { 
     echo "Note \"" . $notetitle . "\" added."; 
    } 
} 

?> 

Обратите внимание, что вы забыли запятой перед «$ notebody» в запросе MySQL.

0

Если вы проверили, если вставка работал и сообщил об ошибках на провал, то вы знаете, почему он не работает ....

if ($notetitle && $notebody){ 
     $qry="insert into notes values 
      ('$user_id', '', '$subject', '$notetitle', '$note_type' '$notebody')"; 
     if (mysql_query($qry)) { 
      echo "Note \"" . $notetitle . "\" added."; 
     } else { 
      print "Failed: $qry\n" . mysql_error(); 
     } 
} 

Не обработки ошибок и исключений очень плохо программирования. Не объявляя ваши столбцы в инструкции вставки очень плохая практика. Не использовать явный дескриптор базы данных бесполезен. Не комментируя ваш код, это плохая практика.

0

Вы пропустили запятую между «„$ note_type“„$ notebody“»,

В лучшем случае вы должны писать так: =

$notetitle = $_POST['title']; 
    $notebody = $_POST['body']; 

if ($notetitle && $notebody){ 
mysql_query("insert into notes 
set userid='$user_id', 
subject = '$subject', 
notetitle = '$notetitle', 
note_type = '$note_type', 
notebody = '$notebody' "); 

} 

На самом деле это не будет противоречить вашей колонке имя и значения. :)

Смежные вопросы