【发布时间】:2017-12-22 11:11:18
【问题描述】:
我正在尝试通过 ajax 将数据从表单传递到后端 php 脚本以与数据库交互。运行 verifyUN 函数,它会检查是否存在类似的用户,然后继续执行下一个函数 create。不幸的是,该 create 函数没有从它调用的 php 脚本中得到任何传回给它的东西。运行两个不同的 $.post 函数不起作用吗?我缺少一些简单的东西吗?
function verifyUN(username,password) {
$.post('verify.php', { login: username}, function(result) {
console.log("passed from ajax to verify, returned: "+ result);
if (result==0) {
create(username,password);
}
else if(result == 1) {
alert("Username already exists!"); //until a better error
}
else {
alert("Error:" +result);
}
});
}
这个函数 create 不打印任何返回的数据。即使我粘贴了 vertifyUN 的内部结构,使其与 verifyUN 做同样的事情。但是,考虑到它正在传递的数据,它仍然成功地接触数据库,甚至将数据插入数据库。只是没有任何返回表明它是成功的......
function create(username,password){
console.log("This is inside create function");
$.post('create.php', { login: username, password: password}, function(returned) {
console.log("passed from create.php to verify, returned: "+ returned);
});
}
verify.php 代码,通过 verifyUN 成功运行。
//needs cleaned
require '../database/info.php';
$dbname = "test";
$conn = new mysqli($servername, $username, $password, $dbname);
if($conn->connect_error) {
die("connection not created: ". $conn->connect_error);
}
$username = htmlspecialchars($_POST['login']);
if($query = $conn->prepare("SELECT username FROM User WHERE username = ?") ) {
$query->bind_param("s", $username);
$query->execute();
$query->bind_result($un);
$query->fetch();
$query->close();
if ( $username != $un ) { //double checking
$result = 0; //doesn't exist, sends to ajax
}
else {
$result =1; //username exists, sends to ajax
}
echo json_encode($result);
}
else {
echo "query failed\n";
}
$conn->close();
?>
如果需要,请创建.php
require '../database/info.php';
$dbname = "test";
$conn = new mysqli($servername, $username, $password, $dbname);
if($conn->connect_error) {
die("connection not created: ". $conn->connect_error);
}
// if (!isset($_POST['login'])) {
// $_POST['login'] = "testing";
// }
// if (!isset($_POST['password'])) {
// $_POST['password'] = "password";
// }
$username = htmlspecialchars($_POST['login']);
$password = htmlspecialchars($_POST['password']);
$result = 0;
//echo "first result: $result\n";
$q1 = "INSERT INTO User (username) VALUES (?)";
$q2 = "INSERT INTO Security (username, shpassword) VALUES (?, ?)";
if( $stmt = $conn->prepare($q1) ) {
$stmt->bind_param("s", $username);
$stmt->execute();
$stmt->close();
$result++;
}
else {
$result = 0;
echo json_encode("Username failed\n");
}
if ( $stmt = $conn->prepare($q2) ) {
$stmt->bind_param("ss", $username, $password);
$stmt->execute();
$stmt->close();
$result++;
}
else {
echo json_encode("Failed to add user and password to database");
}
echo json_encode($result);
$conn->close();
?>
提前致谢。
【问题讨论】:
-
create.php 正在使用
$un和$hash,但我没有看到它们在任何地方设置。 -
@ChrisG 修复了这个问题,试图使其尽可能匹配 verify.php,但由于我测试了与 verifyUN 相同的确切代码,这两种方式都不起作用
-
我的建议是通过创建一个简单的
<form method="post">在不使用 AJAX 的情况下测试您的 PHP 代码。一旦您的 PHP 代码工作正常,请继续使用 AJAX。初学者总是同时做这两件事,犯错别字或其他简单的错误,然后卡住并浪费每个人的时间。 (无意冒犯) -
这就是为什么 if (!isset) 在那里,设置 post 变量并从那里测试的原因。仅在运行 create.php 文件时成功运行。当我引入另一个文件/ajax时它被注释掉了
-
好的,然后将错误处理添加到create()的
$.post
标签: javascript php jquery ajax .post