繁体   English   中英

尝试使用jQuery向PHP提交表单

[英]Attempting to submit a form to PHP using jQuery

我已经创建了一个非常基本的HTML表单,它使用PHP将值传递给SQL数据库。 我试图通过jquery ajax方法执行此操作,因为我不希望页面重新加载(这似乎也是最简单的方法之一)。

但它似乎不起作用,PHP页面返回500错误代码。

马上需要警告你这是我第一次尝试这个,所以非常可能它只是我的语法上一个非常愚蠢的错误

HTML:

<form id ="form1">
    <input type="text" name="Test">
    <br><br>
    <input type="number" name="TestNumber">
    <br><br>
    <input type="radio" name="sex" value="male" checked>  Male
    <br>
    <input type="radio" name="sex" value="female"> Female
    <br><br>
    <input type="submit" value="Submit">
</form> 

Javascript:

$(document).ready(function() {
    console.log("jquery ready");
    var frm = $('#form1');

    frm.submit(function(ev) {
        $.ajax({
            type: "POST",
            url: "form_validation.php",
            data: frm.serialize(),
            success: function(data) {
                alert('ok');
            }
        });

        ev.preventDefault();
    });
});

PHP:

<html>
    <head>
        <title>Untitled</title>
    </head>
    <body>
        <?php
        $servername = "server";
        $username = "user";
        $password = "pass";
        $dbname = "name";
        $test = $_POST[Test];
        $testNumber = $_POST[TestNumber];
        $sex = $_POST[sex];


        // Create connection
        $conn = new mysqli($servername, $username, $password, $dbname);
        // Check connection
        if ($conn->connect_error) {
            die("Connection failed: " . $conn->connect_error);
        }

        $sql = "INSERT INTO test (Test, TestNumber, sex, date)
        VALUES ('$test', '$testNumber', '$sex', now())";

        $sqlback = "SELECT ID FROM `test` WHERE sex = \'Male\'";

        if ($conn->query($sql) === TRUE) {
            echo "New record created successfully" + . $sqlback;
        } else {
            echo "Error: " . $sql . "<br>" . $conn->error;
        }

        $conn->close();
        ?> 

    </body>
</html>

此行导致错误。 请删除+

echo "New record created successfully" + . $sqlback;

还要测试你的后期变量:

$test = isset($_POST[Test]) ? $_POST[Test] : "";

现在$test总是包含一个值。 如果$_POST[Test] undefined会引发错误。

您的页面当前返回500 internal server error PHP会在引发错误并关闭错误报告时执行此操作。

请在php.ini中打开错误报告。 它回应了服务器端脚本中引发的错误,您可以在ajax请求的网络选项卡中捕获该错误。


奖金提示:

您正在加载一个完整的页面(HTML正文中的PHP代码)。 您只想在使用这样的ajax调用时返回成功或失败,而不是完整的HTML页面。 这些天的常见方式是使用JSON。

基于您的代码的示例,使用PHP的json_encode返回JSON:

if ($conn->query($sql) === TRUE) {
  echo json_encode(array("message" => "New record created successfully", "sql" => $sqlback));
} else {
   echo json_encode(array("error" => $sql . "<br>" . $conn->error));
}

现在data-type将是JSON jQuery可能会猜测,但您可以在ajax()选项中设置data-type : JSON jQuery使用JSON.parse data自动解析为有效的Javascript。

现在您可以在success子句中进行测试:

        success: function(data) {
            if (data.error)
            {
               alert(data.error);
            }
            else
            {
               alert(data.message + " " + data.sql);
            }
        }

安全建议

$sql = "INSERT INTO test (Test, TestNumber, sex, date)
VALUES ('$test', '$testNumber', '$sex', now())";

此行易受SQL注入的影响。 mysqli使用prepared statements

$sql = $conn->prepare("INSERT INTO test(Test, TestNumber, sex, date) VALUES (?, ?, ?, ?)");
$sql->bind_param("siss", $test, $testnumber, $sex, now()); //s = string, i = number
$sql->execute(); //execute the query;
$sql->close(); //close the statement.

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM