2013-03-26 35 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> 

线在insert.php错误消息指出:

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

环顾四周网上,我发现解决方案提不正确使用的'一nd "符号,但这只会导致其他语法错误。

编辑:没有提到totalpg在我的数据库是一个SMALLINT

SOLUTION: 谢谢JoDev为此,改变'".$_POST['totalpages']."'".intval($_POST['totalPages'])."现在它完美的作品。

+2

如果您对该[PDO](http://php.net/pdo)考虑使用替代,不只有你可以摆脱这个和其他许多类似的问题,但是你现在不会有与你的应用程序有关的巨大安全问题。 – rid 2013-03-26 13:15:21

+0

或使用[pg_escape_string](http://php.net/manual/en/function.pg-escape-string.php) – 2013-03-26 13:16:12

+0

您输入的任何值是否出错? – 2013-03-26 13:18:32

回答

1

也许投了岗位价值予以肯定,并删除该帖:

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

[编辑]
你让HTML表单和PHP之间的错误。对于您的价值的正确情况是:$_POST['totalPages']P在maj为name属性。

您的形式是:

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

名称是很好总页数 ...

+0

你的建议已经停止了这个错误,但它只向数据库传递0来表示总页数(其他一切正常)。任何想法可能会导致什么? – TheMarron 2013-03-26 14:04:52

+0

好吧,这意味着'$ _POST ['totalpages']'是空的,或者是一个字符串....你在其他地方有错误。你正确填写'input'吗? – JoDev 2013-03-26 14:11:51

+0

将totalpages改为totalPages。谢谢!! :d – TheMarron 2013-03-26 14:24:42

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 2013-03-26 13:18:08

+0

不,我是''。$ _ POST ['totalpages']。“'而不是''”。$ _ POST ['totalpages']。“''' – ophintor 2013-03-26 13:20:21

+0

这就是我的意思。 INSERT INTO table(intfield)VALUES('1');'是有效的SQL。 – rid 2013-03-26 13:20:58

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。