假设我在登录页面上有这样的代码块:
<form action="login_action.php" method="post">
<div id="account">
<div class="form-label">Username:</div>
<div class="form-input"><input name="username" type="text" /></div>
<div class="form-label">Password:</div>
<div class="form-input"><input name="password" type="password" /></div>
<div class="form-submit"><input type="submit" value="Submit" /></div>
</div>
</form>
login_action文件使用给定的凭据查询数据库,如果它们正确,则执行$_SESSION['username'] = $username;
这很好用。但是,如果用户提供的凭据不正确,理想情况下页面不会重定向,而是会在用户名之前的行上显示错误消息。这是我对如何解决问题感到困惑的部分。
我是否必须使用JQuery捕获提交按钮按下并使用AJAX将用户凭据发布到php文件?然后,这将删除登录页面上的表单。我想我可以返回一个字符串,指明凭据是否有效,如果没有,它会向帐户div附加一条消息,证明凭据不正确。
这会是解决此类问题的标准方法吗?自从最近发现AJAX以来,我几乎把它用于所有东西,我不确定在这种情况下它是否是理想的解决方案。覆盖提交按钮的默认行为并删除表单对我来说似乎有点不好,但我不确定。这是SO如何解决这个问题?
答案 0 :(得分:2)
我通常做的是,使用条件声明&amp;如果密码不正确,则重定向回到表单。假设您的表单页面是form.php,重定向可以是form.php?status = password。 然后,您可以在表单中显示错误消息
if ($_GET['status'] == 'password')
echo "Incorrect Password";
答案 1 :(得分:0)
你几乎可以随心所欲地做到这一点,AJAX方法的唯一优势(我可以看到)可能不那么带宽了。
$("form").submit(function(e){
e.preventDefault();
//AJAX & other code here
});
答案 2 :(得分:0)
大多数基本登录表单使用的方法是将登录表单发回给自己。如果用户名或密码有问题,只需使用PHP回显错误消息到该页面。
如果由于某种原因您确实需要单独的处理程序页面,则可以使用“闪烁”来临时在会话中存储错误消息。然后,登录页面可以显示该错误消息并将其从会话中删除。
答案 3 :(得分:0)
通过ajax将表单中的值发送到php脚本几乎是完美的解决方案。页面不会重新加载,用户将从服务器快速获得响应。这是你的jQuery:
$('#form').submit(function(e){
// there are many ways to assemble this input data array, this is an easy clunky way,
// you could also use $.each to iterate over all input elements, get their
// vals, and pop them into the inputVals array.
var inputVals = [$('#input_id1').val(), $('#input_id2').val()];
$.ajax({
url:"your_php_script.php",
type: 'POST',
data:inputVals,
success:function(data){
// data returned from php script as a 'json_encode' string
}
});
return false;
})
答案 4 :(得分:0)
//`
if(isset($_GET['msg']))
{
$message=$_GET['msg'];
}
?>` add following to ur login form
// ---------------------- //如果密码不匹配,请添加此代码以显示错误消息
<p id="m2">
<?php
if(isset($_GET['msg']))
{
echo $message;
}else{
echo "enter password";
}
?>
</p>
//------------------
add this code to your login.php script
$message="password do not match";
header("Location:index.php?msg=$message");