代码之家  ›  专栏  ›  技术社区  ›  Murphy1976

PHP表单提交-语法错误

  •  -1
  • Murphy1976  · 技术社区  · 7 年前

    我有一个非常简单的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 db表的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 回复  |  直到 7 年前
        1
  •  4
  •   David    7 年前

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

    mysqli_query($conn, $sql)
    

    曾经在这里:

    $conn->query($result)
    

    而且,在第二次尝试中,您不是在执行查询,而是在尝试执行 结果 查询的。我不知道它为什么会因为那个错误消息而失败,但我肯定希望它会以某种方式失败。

    你困惑的是你在输出你的 第一 检查完后查询 第二 查询失败。所以你在调试中误导了自己。

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

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

    在mysqli中,您应该明确地选择是使用函数表示法还是使用对象表示法,并与您的选择保持一致。在某些情况下,尝试将两者混合可能会奏效,但最终会导致这样的混乱。


    还有 这很重要 …您的代码是 大开 SQL注入 . PHP提供了大量关于这意味着什么的信息 here . 和 this 是纠正它的一个很好的起点。不管你如何接近它,底线是你应该 从未 将用户可修改数据直接放入查询中 好像它是代码的一部分 . 这允许用户 实际代码 在你的询问中。

        2
  •  -1
  •   steve    7 年前

    在代码中并不是整个问题,但最初的错误消息是由于表名带有下划线。

    将SQL查询更新为:

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

    这样可以解决您看到的MySQL错误。

    但是-您还需要考虑改进您的查询。 查看转义值(不要信任可以被操作以只写入数据库的已发布数据),或者理想地使用准备好的语句。