使用PHP Form将行插入MySQL表

时间:2011-07-21 14:12:38

标签: php mysql forms

我希望用户能够使用php表单将“bid”插入到MySQL表中 - 这仅用于演示,而不是实时目的。我收到以下错误消息,

错误:您的SQL语法出错;查看与您的MySQL服务器版本相对应的手册,以便在第3行('30','2011-07-13''附近使用正确的语法(第3行是指我的标签?)我认为它不喜欢表单输入只是作为“文本”类型,但不知道如何解决它 - 所有建议非常欢迎,这是我的形式和& php代码如下;

<form action="insert.php" method="post">
<div><label for="commodity">Commodity</label><input type="text" name="commodity"/></div>
<div><label for="region">Region</label><input type="text" name="region"/></div>
<div><label for="member">Member</label><input type="text" name="member" /></div>
<div><label for="size">Size</label><input type="int" name="size" /></div>
<div><label for="price">Post Bid</label><input type="decimal" name="price" /></div>
<div><label for="posted">Date Posted</label><input type="text" name="posted"/></div>
<P><label for="submit">Submit Bid</label><input type="submit" /></P>
</form>

&安培; PHP

<?php
$con = mysql_connect("localhost","","");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }
mysql_select_db("palegall_newTrader", $con);
$sql="INSERT INTO `buy` (commodity, region, member, size, price, posted)
VALUES
('$_POST[commodity]','$_POST[region]','$_POST[member]','$_POST[size]','$_POST[price]','$_POST[posted]'";
if (!mysql_query($sql,$con))
  {
  die('Error: ' . mysql_error());
  }
echo "1 record added";
mysql_close($con)
?> 

非常感谢scotia

4 个答案:

答案 0 :(得分:1)

您很容易受到SQL注入攻击,并且您的POST可能包含',这会导致语法错误。请尝试以下方法:

$commodity = mysql_real_escape_string($_POST['commodity']);
$region = mysql_real_escape_string($_POST['region']);
etc...

$sql = "INSERT INTO ... VALUES ('$commodity', '$region', etc...)";

转义函数将确保数据中的任何SQL元字符都被转义,因此它们不能“破坏”您的查询。永远不会直接将用户提供的数据插入到SQL查询中,即使它是一个只有您将使用的简单脚本。养成逃避一切的习惯(或者更好,使用PDO准备好的陈述),因为在某些时候,如果你不这样做,你就会被烧掉。

答案 1 :(得分:1)

您的右括号需要在要插入的最后一个值之后,现在它在第4个元素之后。把它放在声明和声明中。

$sql="INSERT INTO `buy` (commodity, region, member, size, price, posted)
VALUES
('$_POST[commodity]','$_POST[region]','$_POST[member]','$_POST[size]','$_POST[price]','$_POST[posted]')"

另外,请遵循@ Marc的建议并对您的意见进行审查。

答案 2 :(得分:1)

不应该是

$sql="INSERT INTO `buy` (commodity, region, member, size, price, posted) VALUES ('$_POST[commodity]','$_POST[region]','$_POST[member]','$_POST[size]','$_POST[price]','$_POST[posted]')"; 

答案 3 :(得分:1)

在$ _POST ['size']之后有一个错位的括号应该在$ _POST [posted]之后

SQL应如下所示:

$sql="INSERT INTO `buy` (commodity, region, member, size, price, posted)
VALUES
('$_POST[commodity]','$_POST[region]','$_POST[member]','$_POST[size]','$_POST[price]','$_POST[posted]')";