php / mysql返回空集

时间:2014-02-07 00:52:32

标签: php mysql sql forms

<html>
<head>
</head>
<body>
<form action = "insertform.php" method = "post">
field: <input type = "text" name = "fielda">
field2: <input type = "text" name = "fieldb">
thedata: <input type = "text" name = "qdata">
<input type = "submit" name = "submit">
</form>

<?php
if (isset($_POST['submit'])){

$con = mysql_connect("localhost","user","password");
if (!$con){
die("cannot connect" . mysql_error());
}
mysql_select_db("stQutieria",$con);
$sql = "INSERT INTO qtable(fielda, fieldb, qdata) VALUES ("$_POST[fielda]","$_POST[fieldb]","$_POST[qdata]")";

mysql_query($sql,$con);
mysql_close($con);
}
?>
</body>
</html>

编辑:好的!所以我改变了我的代码,我玩了双引号或'围绕$ _POST区域。当我使用双引号时,我得到错误说fielda / fieldb wernt定义,我也有错误说“语法错误,意外'$ _POST'(T_VARIABLE)”...我正在使用的代码派生自相同的页面ass插入形式。 PHP。这是我正在观看的视频http://www.youtube.com/watch?v=j4FUCoCxE8w。如果有人能通过Skype / msn / teamview帮助我,我将非常感激。

4 个答案:

答案 0 :(得分:4)

你在编写正确的sql语句时会犯这样的错误

$sql ="INSERT INTO qtable(fielda, fieldb, qdata) VALUES (".$_POST[fielda].",".$_POST[fieldb].",".$_POST[qdata].")";

请注意,上面的sql语句适用于数据库中为整数的字段,如果字段为varchar,则后面的代码为

$sql ="INSERT INTO qtable(fielda, fieldb, qdata) VALUES ('".$_POST[fielda]."','".$_POST[fieldb]."','".$_POST[qdata]."')";

谢谢

答案 1 :(得分:3)

  1. 您的$_POST密钥周围缺少引号:$_POST[fielda]应为$_POST['fielda']等。(实际为not true)< / p>

  2. 您的表格后需要一个空格,而左括号qtable(fielda应为qtable (fielda

  3. 您在'$_POST[fielda](应该是'$_POST[fielda]')之后和'$_POST[fieldb]之后(应该是'$_POST[fieldb]'

  4. 您没有错误处理。如果您在查询后致电mysql_error(),您就会知道完全您的错误是什么。

  5. 您对SQL injections

  6. 持开放态度
  7. 您使用的是obsolete API

答案 2 :(得分:0)

这意味着您的查询失败。可能是因为表名和列名之间没有空格:

INSERT INTO qtable (fielda, fieldb, qdata)

答案 3 :(得分:0)

将您的SQL替换为:

$sql = "INSERT INTO qtable (fielda, fieldb, qdata) VALUES ('".$_POST['fielda']."','".$_POST['fieldb']."','".$_POST['qdata']."')";

但这确实不安全......

更安全的是使用这样的东西:

$values = array($_POST['fielda'], $_POST['fieldb'], $_POST['qdata']);    
$st = $db->prepare('INSERT INTO qtable (fielda, fieldb, qdata) VALUES (?,?,?)');
$st->execute($values);