[英]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.