2015-12-15 64 views
-1

我正在尝试为棒球数据库创建一个Web界面,但是当我将信息输入表单并按提交时,它总是会出现'发生错误'。 以下是带有表单的网页。PHP PSQL插入错误

<html> 
<?php 
$dbconn = pg_connect("dbname=mine user=mine password=mine"); 
if ($dbconn) { 
    echo "Connection established <br/>"; 
} 
echo "Here are the current NL West Teams <br/>"; 
$result = pg_query($dbconn, "SELECT Name, Record FROM Teams"); 
if (!$result) { 
    echo "An error occurred.\n"; 
    exit; 
} 
while ($row = pg_fetch_row($result)) { 
    echo "Team: $row[0] Record: $row[1]"; 
    echo "<br />\n"; 
} 
?> 

<form action="InsertPP.php" method="post"> 
    Name: <input type="text" name="name"><br> 
    Team: <input type="text" name="team"><br> 
    Number: <input type="text" name="number"><br> 
    Handed: <input type="text" name="Handed"><br> 
    Position: <input type="text" name="Position"><br> 
    <input type="submit"> 
</form> 



</html> 

这里是插入PHP脚本。

<html> 
<body> 
<?php 

$dbconn = pg_connect("dbname=mine user=mine password=mine"); 
if ($dbconn) { 
    echo "Connection established <br/>"; 
} 

$_first = $_POST["Handed"]; 
$_second = $_POST["Position"]; 
$_third = $_POST["name"]; 
$_fourth = $_POST["number"]; 
$_fifth = $_POST["team"]; 

$Query = pg_query(dbconn, "INSERT INTO PosPlayer VALUES('$_first', '$_second', '$_third', $_fourth, '$_fifth)'"); 
if (!$Query) { 
    echo "An error occurred.\n"; 
    exit; 
} 
echo "Your Player has been added!"; 


?> 

</body> 
</html> 

我输入相同的价值观向Postgres和形式,玩家在Postgres的直接创建,但是当输入发生到表单中的一些错误。有任何想法吗?

编辑:我修复了在dbconn前缺少的$。仍然收到'发生错误'。

+0

您应该使用错误报告来诊断错误。我会从'dbconn'开始'$'开始。在这里'pg_query(dbconn,'< - 看它..这个代码也会打开你到SQL注入。我不熟悉'postgresql',但我想有一个驱动程序支持参数化查询;我推荐 – chris85

+0

这是一个语法错误 –

+0

请检查您的网络服务器的error.log文件是否存在* actual *错误讯息 –

回答

0

更换

$Query = pg_query(dbconn, "INSERT INTO PosPlayer VALUES('$_first', '$_second', '$_third', $_fourth, '$_fifth)'");

通过

$Query = pg_query($dbconn, "INSERT INTO PosPlayer VALUES('$_first', '$_second', '$_third', $_fourth, '$_fifth)'");

$标志从dbconn失踪。除此之外,代码似乎没有任何问题。

+0

Yikes ...这应该在我的IDE中报告给我吧?我正在使用PHPStorm,它是di不要给我任何错误... – jkaw4

+0

好吧,我修正了这个问题,但它仍然给我带来了错误。任何其他想法? – jkaw4

+0

启用错误或使用die(),以便您可以知道错误。 postgre使用die()吗? –

1

检查INSERT声明的结尾。你有

'$_fifth)'" 

,你应该有

'$_fifth')" 

即该值的结束引号应该是右括号,而不是外面。

你真的应该使用准备好的语句来代替动态查询。语法将是这样的(使用PostgreSQL驱动):

$sql = "INSERT INTO PosPlayer VALUES($1, $2, $3, $4, $5)"; 
$result = pg_prepare($dbconn, "", $sql); 
$result = pg_execute($dbconn, "", array($_first, $_second, $_third, $_fourth, $_fifth)); 

它自动处理正确的引用,转义和变量值的类型匹配,以防止(除其他事项外)可能的SQL注入攻击。请注意,$1, $2, & c。是绑定变量的pg驱动程序的语法。