【问题标题】:php/mysql returning empty setphp/mysql 返回空集
【发布时间】:2014-03-04 05:55:51
【问题描述】:
<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 defined,我也收到错误说“语法错误,意外'$_POST'(T_VARIABLE)”......我正在使用的代码来自同一个页面 ass insertform。 php。这是我正在观看的视频http://www.youtube.com/watch?v=j4FUCoCxE8w。如果有人可以在 Skype / msn / teamview 上帮助我,我将不胜感激。

【问题讨论】:

  • 您正试图从同一页面执行所有内容。使用&lt;form action = "" method = "post"&gt; 而不是&lt;form action = "insertform.php" method = "post"&gt;
  • @Fred-ii- 假设这是insertform.php 它会正常工作。
  • 是的,你是对的。 @helion3
  • 这缺少引号 '$_POST[fielda],'$_POST[fieldb],'$_POST[qdata]' 更改为 '$_POST[fielda]','$_POST[fieldb]','$_POST[qdata]' 但使用此方法可以打开 SQL injection
  • 除此之外 - 我不确定提交按钮是否也会作为帖子元素发送。您为什么不尝试检查fieldafieldb 的存在?

标签: php mysql sql forms


【解决方案1】:

你写错了,正确的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]."')";

谢谢

【讨论】:

    【解决方案2】:
    1. 你的 $_POST 键周围缺少引号:$_POST[fielda] 应该是 $_POST['fielda'] 等等。(实际上是 not true

    2. 你的表名后面需要一个空格,左括号qtable(fielda应该是qtable (fielda

    3. 您在'$_POST[fielda](应该是'$_POST[fielda]')和'$_POST[fieldb](应该是'$_POST[fieldb]')之后缺少一个报价

    4. 您没有错误处理。如果您在查询后致电mysql_error(),您将确切地知道您的错误是什么。

    5. 你对SQL injections很开放

    6. 您正在使用obsolete API

    【讨论】:

    • #1 错误。它们在双引号字符串中,禁止引用数组键,除非整个数组引用是{}-delimited
    • '$_POST[fieldb] 也缺少报价。
    • 查看其他值时,我认为第三个值的开头引号看起来像那个值的结尾引号。让我将它添加到列表中...
    • 我也有同样的印象@JohnConde - 你并不孤单 ;-) 起初,以为是表单的动作,然后摇了摇头,并注意到周围缺少引号两个值。天哪,我差点得到“鞭打”!大声笑
    【解决方案3】:

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

    INSERT INTO qtable (fielda, fieldb, qdata)

    【讨论】:

      【解决方案4】:

      将您的 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);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-24
        • 2018-02-14
        • 1970-01-01
        • 1970-01-01
        • 2021-04-21
        相关资源
        最近更新 更多