2013-03-26 9 views
0

Я пытаюсь отправить данные из простой формы в базу данных PostgreSQL, но мой журнал сервер показывает ошибку Query failed: ERROR: invalid input syntax for integer частей кода в вопросе являются:неверный входной синтаксис для целого числа при представлении формы

Форма:

<form action="insert.php" method="post"> 
[removed] 
Total Pages: <input type="number" name="totalPages" id="totalpages"><br><br> 
<input type="submit"> </form> 

Line в insert.php указывается в сообщении об ошибке:

pg_query("INSERT INTO books(coverurl, title, author, genre, totalpg) 
VALUES('".$_POST['coverURL']."','".$_POST['title']."','".$_POST['author']."','".$_POST['genre']."','".$_POST['totalpages']."')"); 

Оглядевшись онлайн Я нашел решение, упоминающее неправильное использование ' в nd ", но это вызвало другие синтаксические ошибки.

EDIT: Не говоря уже о том, что totalpg в моей базе данных является SMALLINT

РЕШЕНИЕ: Спасибо JoDev за это, изменил '".$_POST['totalpages']."' к ".intval($_POST['totalPages'])." и теперь он работает отлично.

+2

Если бы рассмотреть вопрос об использовании [PDO] (http://php.net/pdo) вместо того, чтобы, не только бы вы избавились от этой и многих других подобных проблем, но у вас не будет огромной проблемы безопасности, которая у вас есть с вашим приложением прямо сейчас. – rid

+0

Или с помощью [pg_escape_string] (http://php.net/manual/en/function.pg-escape-string.php) –

+0

Получаете ли вы ошибку для любого введенного значения? –

ответ

1

Может привести значение POST, чтобы быть уверенным, и удалить цитату:

pg_query("INSERT INTO books(coverurl, title, author, genre, totalpg) 
VALUES('".$_POST['coverURL']."','".$_POST['title']."','".$_POST['author']."','".$_POST['genre']."',".intval($_POST['totalPages']).")"); 

[EDIT]
Вы делаете ошибку между HTML формы и PHP. Правильный случай для значения youre: $_POST['totalPages']P находится в майке для name атрибут.

Ваша форма:

Total Pages: <input type="number" name="totalPages" id="totalpages"> 

Название хорошо TOTALPAGES ...

+0

Ваше предложение остановило эту ошибку. Но это всего лишь передача 0 в базу данных для totalpages (все остальное в порядке). любая идея, что может вызвать это? – TheMarron

+0

Итак, это означает, что '$ _POST ['totalpages']' пуст или строка .... У вас есть ошибка где-то в другом месте. Вы правильно заполняете «ввод»? – JoDev

+0

Выполнено изменение 'totalpages' to totalPages'. Спасибо!! : D – TheMarron

0

Похоже, вы пытаетесь добавить текст в числовое поле.

Вы пробовали это:

pg_query("INSERT INTO books(coverurl, title, author, genre, totalpg) 
VALUES('".$_POST['coverURL']."','".$_POST['title']."','".$_POST['author']."','".$_POST['genre']."',".$_POST['totalpages'].")"); 
+0

'' ... ''действительный SQL для целых чисел. – rid

+0

Нет, я имею в виду ''. $ _ POST ['totalpages']. "Вместо' '". $ _ POST ['totalpages']. "'' – ophintor

+0

Вот что я имею в виду. 'INSERT INTO table (intfield) VALUES ('1');' is valid SQL. – rid

0

Если поле представляет собой целое число, рассмотреть возможность использования Int бросания (int) перед добавлением значения в запрос. Однако имейте в виду, что все остальные переменные must be escaped перед добавлением их в запрос, поскольку один из них может содержать строку, которая делает запрос недействительным.

Например, если $_POST['title'] будет содержать значение: Why Hackers Don't Want You To Escape Strings, то запрос станет:

INSERT INTO books(coverurl, title, author, genre, totalpg) 
VALUES('http://example.com/','Why Hackers Don't Want You To Escape Strings','J. Doe','Educational','400'); 

..., который является недопустимым SQL.

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