2014-02-02 5 views
-1

Я пытаюсь поместить данные в MySQL с PHP, но я получаю эту ошибку:Как вставить данные в MySQL

Error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'Show, Picture, Name, Date, Poster, Text) VALUES('1','http://www.thepsychicnetwor' at line 1 

Это мой текущий код на моей странице insert.php.

http://pastebin.com/nWvrDPN7

Вот моя форма страница:

http://pastebin.com/gyUdSgsz

Как исправить ошибку

EDIT: Это Устранена, но она до сих пор не буду Imput "Текст"

$sql="INSERT INTO Posts (`Show`, Picture, Name, Date, Poster, Text) VALUES('$_POST[Show]','$_POST[Picture]','$_POST[Name]','$_POST[Date]','$_POST[Poster]','$_POST[Text]')"; 
+0

После получить эту работу, я задаюсь вопросом, как долго, прежде чем кто-то крадет все ваши данные и удаляет его. Используйте mysqli или PDO и подготовленные операторы. – m59

+0

@ m59 Я спрятал проход – TheWebDev

+0

Это не имеет никакого отношения к тому, что я говорю. Я могу украсть все ваши данные, просто посетив сайт. Это называется sql injection, и ваш код просит его. – m59

ответ

3

Show является reserved MySQL word, вам нужно, чтобы избежать его, используя кавычку как:

$sql="INSERT INTO Posts (`Show`, Picture, Name, Date, Poster, Text) VALUES('$_POST[Show]','$_POST[Picture]','$_POST[Name]','$_POST[Date]','$_POST[Poster]','$_POST[Text]')"; 

Update:

text В вашей колонке не работает, единственная причина, я могу думать, как уже комментировали @ Fred-ii в вашем вопросе, у вас могут быть апострофы в ценности.

Одним из вариантов является использование mysql_real_escape_string на ваши ценности, как:

mysql_real_escape_string($_POST[Text]) 

Используйте эту функцию на всех значений, которые могут включать в себя следующие символы:

\x00, \n, \r, \, ', " and \x1a.

Пожалуйста, убедитесь, чтобы прочитать «Предупреждение "на связанной странице mysql_real_escape_string, когда вы на ней.

+0

Спасибо, но по какой-либо причине «текст» не вменяется – TheWebDev

+0

Вы принимаете только колонку «Текст»? Можете ли вы предоставить дополнительную информацию по этой проблеме? – vee

+0

Да, $ _POST [Текст] помещаться в таблицу по какой-то нечетной причине. – TheWebDev

1

Вы должны поместить одинарные кавычки в переменные $ _POST.

$_POST['Show'] 

не

$_POST[Show] 

же касается и всех других переменных.

1

Это SQL заявление:

INSERT INTO Posts (Show, Picture, Name, Date, Poster, Text) 
    VALUES('$_POST[Show]', '$_POST[Picture]', '$_POST[Name]', '$_POST[Date]', 
      '$_POST[Poster]','$_POST[Text]'); 

Слово show зарезервированное слово в MySQL. На самом деле, date и text также являются ключевыми словами, но не зарезервированы. Вам нужна кавычка для show и использовать их для date и text:

INSERT INTO Posts (`Show`, Picture, Name, `Date`, Poster, `Text`) 
    VALUES('$_POST[Show]', '$_POST[Picture]', '$_POST[Name]', '$_POST[Date]', 
      '$_POST[Poster]','$_POST[Text]'); 
+1

DATE и TEXT не являются зарезервированными словами http: //dev.mysql.com/doc/refman/5.5/en/reserved-words.html –

+0

@ Fred-ii-. , , Есть что-то непонятное о «но не зарезервированном». Они, однако, являются элементами языка, представляя типы, которые MySQL выбрал в качестве исключений, которые зарезервированы для всех типов. –

+0

Если MySQL говорит, что они не зарезервированные слова, то я не должен понимать, почему это вызовет проблему. Тем не менее, мы с вами оба или можем быть 50% прав и 50% неправильными ;-) –

0

Пожалуйста, попробуйте ниже запроса. Переменная post изменена с фигурными скобками.

$sql="INSERT INTO Posts (`Show`, Picture, Name, Date, Poster, Text) VALUES('{$_POST[Show]}','{$_POST[Picture]}','{$_POST[Name]}','{$_POST[Date]}','{$_POST[Poster]}','{$_POST[Text]}')"; 
0

индекс.HTML:

<form action="post.php" method="post"> 

<input type="radio" name="Show" value="1"> <----- Click This<br><br> 

Picture: <input type="text" name="Picture" class="span12" /><br><br> 

Name: <input type="text" name="Name" class="span12" /><br><br> 

Date:<br> <input type="text" name="Date" id="datepicker"><br><br> 

Poster: <input type="text" name="Poster" class="span12" /><br><br> 

Text: <textarea class="span12" name="comment" cols="45" rows="6" id="comment" class="bodytext"></textarea> 

<input class="btn btn-large pull-right margin-top-15" type="submit" /> 
<input class="btn btn-small pull-left margin-top-15" type="reset" /> 

</form> 

post.php:

<?php 

$con = mysql_connect("localhost","username","password"); 
if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 
    mysql_select_db("DatabaseName", $con); 
    function clean_string($value) { 
    if(get_magic_quotes_gpc()) { 
     $value = stripslashes($value); 
    } 
    return mysql_real_escape_string($value); 

}

$Show = clean_string($_POST['Show']); 
    $Picture = clean_string($_POST['Picture']); 
    $Name = clean_string($_POST['Name']); 
    $Date = clean_string($_POST['Date']); 
    $Poster = clean_string($_POST['Poster']); 
    $Comment = clean_string($_POST['comment']); 

    $sql="INSERT INTO `posts` (`Show`, `Picture`, `Name`, `Date`, `Poster`, `Text`) VALUES ('$Show','$Picture','$Name','$Date','$Poster','$Comment')"; 
     if (!mysql_query($sql,$con)) 
     { 
     echo mysql_error() . "<br />$sql";  
     } 
     echo "1 record added"; 
     mysql_close($con) 
?> 

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

0

Попробуйте использовать другое слово, а не шоу,
или положить его в одиночные quates [ «Показать»]

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