我试图写一个页面,使POST请求到一个php脚本,我觉得我已经做对了,它在其他地方工作,所以它似乎,但我不断得到一个"身份不明的错误",它不会工作,我怎么能得到这个工作?
Javascript:$(document).ready(function() {
$("#x").click(function() {
var email = $("email").val();
var pass = $("password").val();
var confirmPass = $("confirmPassword").val();
var name = $("name").val();
var question = $("question").val();
var answer = $("answerswer").val();
if(pass != confirmPass) {
alert("Passwords do not match!");
return;
}
var stuff = {email: email, pass: pass, name: name, question: question, answer: answer};
$.ajax({method: "POST", url: "addAccount.php", data: stuff, success: function(result) {
alert(result);
window.location.href = "../Dashboard";
}});
});
});
PHP: <?php
$servername = "localhost";
$username = "root";
$password = "*********";
$dbname = "myDB";
$conn = new mysqli($servername, $username, $password, $dbname);
$email = $_POST["email"];
$pass = $_POST["pass"];
$name = $_POST["name"];
$question = $_POST["question"];
$answer = $_POST["answerswer"];
$sql = "INSERT INTO accounts (accountEmail, accountPassword, accountName, accountQuestion, accountRecover) VALUES ('$email', '$pass', '$name', '$question', '$answer')";
$conn->close();
if(mysql_affected_rows() > 0) {
$response = "Account added successfully!";
}
else {
$response = "Couldn't add account!";
}
$pre = array("Response" => $response);
echo json_encode($pre);
?>
你需要正确使用jquery。
例如
var email = $("email").val(); //IS WRONG
应该是(如果你有输入id="email")
var email = $("#email").val();
如果你只有名字,你可以使用
var email = $("[name='email']").val();
有点跑题了:如果你正在使用表单ajax提交考虑jquery方法序列化https://api.jquery.com/serialize/获取所有表单值(或一些jquery ajax插件)。
,请!不要使用不安全的mysql语句。看在上帝的份上,使用准备好的语句。如果您需要非常基本的东西,只需使用预处理语句或考虑https://phpdelusions.net/pdo/pdo_wrapper
还有一个小提示:在echo json之前制作json header
<?php
header('Content-type:application/json;charset=utf-8');
我认为你是错误的与你的jquery数据,他们应该有标识符像id表示的'#'和类表示的'。',这样做,你有id="字段的名称"的输入参数:
$(document).ready(function() {
$("#x").click(function() {
var email = $("#email").val();
var pass = $("#password").val();
var confirmPass = $("#confirmPassword").val();
var name = $("#name").val();
var question = $("#question").val();
var answer = $("#answer").val();
if(pass != confirmPass) {
alert("Passwords do not match!");
return;
}
var stuff = {email: email, pass: pass, name: name, question: question, answer: answer};
$.ajax({method: "POST", url: "addAccount.php", data: stuff, success: function(result) {
alert(result);
window.location.href = "../Dashboard";
}});
});
});
或者像这样,在输入参数中有class="name of the field"
$(document).ready(function() {
$("#x").click(function() {
var email = $(".email").val();
var pass = $(".password").val();
var confirmPass = $(".confirmPassword").val();
var name = $(".name").val();
var question = $(".question").val();
var answer = $(".answer").val();
if(pass != confirmPass) {
alert("Passwords do not match!");
return;
}
var stuff = {email: email, pass: pass, name: name, question: question, answer: answer};
$.ajax({method: "POST", url: "addAccount.php", data: stuff, success: function(result) {
alert(result);
window.location.href = "../Dashboard";
}});
});
});
或者如果您想直接使用名称,请遵循以下命令:
$(document).ready(function() {
$("#x").click(function() {
var email = $("input[name='email']").val();
var pass = $("input[name='pasword']").val();
var confirmPass = $("input[name='confirmPassword']").val();
var name = $("input[name='name']").val();
var question = $("input[name='question']").val();
var answer = $("input[name='answer']").val();
if(pass != confirmPass) {
alert("Passwords do not match!");
return;
}
var stuff = {email: email, pass: pass, name: name, question: question, answer: answer};
$.ajax({method: "POST", url: "addAccount.php", data: stuff, success: function(result) {
alert(result);
window.location.href = "../Dashboard";
}});
});
});
希望这对你有帮助
您的代码不能正常工作的原因有很多。@AucT和@gentle已经解决了Javascript方面的问题,所以我将专注于PHP。您的查询代码是:
$conn = new mysqli($servername, $username, $password, $dbname);
$sql = "...";
$conn->close();
注意:
- 永远不会执行您的查询。
$sql
只是一个保存在内存中的字符串。 - 你混合
mysqli
功能与mysql_
功能(mysql_affected_rows
);这行不通 - 你直接插入POST数据到你的查询,所以你很容易受到SQL注入
- 最后,您回显JSON,但您没有告诉浏览器期望这种格式
这样做:
$conn = new mysqli(...);
//SQL with ? in place of values is safe against SQL injection attacks
$sql = "INSERT INTO accounts (accountEmail, accountPassword,
accountName, accountQuestion, accountRecover) VALUES (?, ?, ?, ?, ?)";
$error = null;
//prepare query and bind params. save any error
$stmt = $conn->prepare($sql);
$stmt->bind_param('sssss',$email,$pass,$name,$question,$answer)
or $error = $stmt->error;
//run query. save any error
if(!$error) $stmt->execute() or $error = $stmt->error;
//error details are in $error
if($error) $response = "Error creating new account";
else $response = "Successfully created new account";
//set content-type header to tell the browser to expect JSON
header('Content-type: application/json');
$pre = ['Response' => $response];
echo json_encode($pre);