在一个网页内,我试图实现一个按钮来提示用户密码,以便注销。我想做的是使用javascript提示来请求它,然后通过AJAX将其发送到php文件,该文件将验证密码是否正确,如果是,它将返回到索引。到目前为止,我所做的尝试如下:
HTML:<button style="" type="submit" class="" onclick='checkPass()'>
Logout
</button>
<script>
function checkPass()
{
var usr = "<?php echo $usr = $_POST['usr']; ?>";
var pass=prompt("Please write your password","");
if (pass!=null && pass!="")
{
$.post("check.php", {pass: pass, usr:usr});
}
}
</script>
Check.php:
<?php
$host="localhost"; // Host name
$username=""; // Mysql username
$password=""; // Mysql password
$db_name=""; // Database name
// Connect to server and select databse.
mysql_connect("$host", "$username", "$password")or die("cannot connect");
mysql_select_db("$db_name")or die("cannot select DB");
$pass = mysql_escape_string($_POST['pass']);
$usr = mysql_escape_string($_POST['usr']);
$sql = mysql_query("SELECT * FROM USERS WHERE Usr='$usr' and Password='$pass'");
$count=mysql_num_rows($sql);
// If result matched $myusername and $mypassword, table row must be 1 row
if($count==1){
header("location:index.php");
}
else {
}
?>
这就是我所拥有的,但没有发生任何事情(我没有得到任何响应)…(
谢谢你的帮助!
This:
if($count==1){
header("location:index.php");
}
没有做你认为它在做的事。请记住,此请求是通过AJAX发出的,而不是作为主浏览器窗口发出的。这种性质的重定向实际上并没有告诉浏览器做任何事情,它只是发送一个带有特定标头的特定响应类型。通常,这个向浏览器建议应该向另一个页面(在本例中为index.php
)发起一个新的请求。浏览器通常会执行此请求。
但是,AJAX有点不同。服务器端代码仍然发送带有相同头的相同响应类型,但是浏览器不是发出请求的那个。JavaScript代码如下。JavaScript代码不会自动按照这个建议重定向用户。你得自己去做。
AJAX请求和响应通常应该只包含数据。这样就可以将一些数据发送回客户端。您可以对一些值进行JSON编码,但在这种情况下,像下面这样简单的操作就可以达到目的:if($count==1){
echo "true";
}
else {
echo "false";
}
然后在客户端回调中,检查该值并做出相应的响应:
$.post("check.php", {pass: pass, use:use}, function (response) {
if (response == 'true') {
// redirect the user
} else {
// authentication failed
}
});
在JavaScript中执行重定向很容易。
编辑:在控制台上我得到的错误:ReferenceError:找不到变量:$ $.post("check.php", {pass: pass, usr:usr});
嗯,在这种情况下,听起来你也还没有加载jQuery库。为了使用jQuery代码,您需要这样做。