PHP表单提交-语法错误

时间:2019-02-04 21:51:51

标签: php mysql ajax for-loop sql-insert

我有一个非常简单的HTML表单:

HTML:

<form method="POST" id="form-1" name="form-1">
   <p>     
      <input type="text" name="fm1q1">
      <input type="number" name="fm1q1-score">
   </p>
   <p>     
      <input type="text" name="fm1q2">
      <input type="number" name="fm1q2-score">
   </p>
   <p>     
      <input type="text" name="fm1q3">
      <input type="number" name="fm1q3-score">
   </p>
   <p>     
      <input type="text" name="fm1q4">
      <input type="number" name="fm1q4-score">
   </p>
   <p>     
      <input type="text" name="fm1q5">
      <input type="number" name="fm1q5-score">
   </p>
   <button type="submit" name="submit">SUBMIT</button>
</form>

我正在使用一个简单的Ajax调用:

$('#form-1').on('submit', function(e){
    e.preventDefault();
    $.ajax({
        type:   'POST',
        url:    'submitForm.php',
        data:   $(this).serialize(),
        success: function(data){
            console.log(data);
        },
        error: function(xhr, ajaxOptions, thownError){
            console.log(xhr.status);
            console.log(thrownError);
        }
    });
});

将表单数据插入MySQL数据库表的PHP如下:

require "config.php"; // Contains all my connection information 
$answers = array($_POST['fm1q1'], $_POST['fm1q2'], $_POST['fm1q3'], $_POST['fm1q4'], $_POST['fm1q5']);
$scores = array($_POST['fm1q1-score'], $_POST['fm1q2-score'], $_POST['fm1q3-score'], $_POST['fm1q4-score'], $_POST['fm1q5-score']);

for ($i = 0; $i < 5; $i++) { 
   $sql = "INSERT INTO table_1 (answer, score) VALUES ('$answers[$i]', '$scores[$i]')";
   $result = mysqli_query($conn, $sql);
   if (!$conn->query($result) === TRUE) {
      echo "Error: " . $sql . "--" . $conn->error. "\n";
   }
 }

$conn->close();

我遇到的问题是我的开发人员工具说我在$sql=行中有语法错误,但是我看不到有什么问题。

Error: INSERT INTO table_1 (answer, score) VALUES ('test', '123')--You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '1' at line 1

2 个答案:

答案 0 :(得分:4)

您尝试两次执行查询。曾经在这里:

mysqli_query($conn, $sql)

然后在这里:

$conn->query($result)

此外,在第二次尝试中,您不是执行查询,而是尝试执行查询的结果。我不确定为什么它会失败并显示该确切的错误消息,但我当然希望它会以某种方式失败。

您感到困惑的是,在检查了 second 查询是否失败之后,您正在输出 first 查询。因此,您在调试中误导了自己。

只需删除第二次查询尝试。您已经有了第一个结果:

$result = mysqli_query($conn, $sql);
if ($result !== TRUE) {
    echo "Error: " . $sql . "--" . mysqli_error($conn) . "\n";
}

您绝对应该选择在mysqli中使用函数符号还是对象符号,并与您的选择保持一致。在某些情况下,尝试将两者混合使用可能会奏效,但最终会引起这种混乱。


而且,这很重要 ......您的代码对 SQL注入完全开放的。 PHP提供了大量有关here含义的信息。 this是更正它的一个很好的起点。不管您如何处理,最重要的是您应该从不将用户可修改的数据直接放入查询中,就像它是代码的一部分一样。这样,用户就可以在查询中输入实际代码

答案 1 :(得分:-1)

这不是代码中的全部问题-但最初的错误消息是由于表名带有下划线。

将您的SQL查询更新为:

"INSERT INTO `table_1` (answer, score) VALUES ('$answers[$i]', '$scores[$i]')";

那应该可以解决您看到的mysql错误。

但是-您还需要研究改进查询。 着眼于转义值(绝对不要信任可以发布到数据库中的发布数据),或者最好使用准备好的语句。