我正在尝试使用ajax和jquery将我的登录表单转换为下拉列表。到目前为止,除了ajax和错误验证之外,我已经完成了所有工作。
目前我遇到的主要问题是没有输入字段,例如密码。登录框显示“此字段是必需的”,这很好,如果我再次单击提交,输入字段将消失并且消息仍然存在。除非我刷新页面,否则我无法继续登录。
另一个主要问题是从php获取错误消息。如果我输入了错误的密码,则不会显示该消息。表格提交,消失,就是这样。当我再次选择登录时,我可以看到之前应该显示的错误消息。
另一方面:正确的登录组合非常有效。
感谢任何帮助。
PHP和函数都粘贴在下面。
function validLogin(){
$('.error').hide();
var username = $('#username').val();
if(username == ""){
$('label#usernameError').show();
$('input#username').focus();
return false;
}
$('.error').hide();
var password = $('#password').val();
if(password == ""){
$('label#passwordError').show();
$('input#password').focus();
return false;
}
var params = "username="+username+"&password="+password;
var url = "loginProcessAjax.php";
$("#status").show();
$("#status").fadeIn(400).html('<img src="image/loading.gif" />');
$.ajax({
type: 'POST',
url: url,
dataType: 'html',
data: params,
beforeSend: function() {
document.getElementById("status").innerHTML= 'checking...' ;
},
complete: function() {
},
success: function(html) {
$("#status").hide();
document.getElementById("status").innerHTML= html;
if(html=="success"){
window.location = "index.php"
}
}
});
}
<?php
//check fields are filled in
if(empty($_POST) === false){
$username = trim($_POST['username']);
$password = trim($_POST['password']);
//validate fields
if(empty($username) === true || empty($password) === true){
$errors[] = 'Your username and password are needed.';
}else if($users->userExists($username) === false){
$errors[] = 'That username does not exist';
}else if($users->emailActivated($username) === false){
$errors[] = 'You need to activate the account, please check your email.';
}else{
//start login
$login = $users->login($username, $password);
if($login === false){
$errors[] = 'That username or password is invalid';
if(empty($errors) === false){
echo '<p>' .implode('</p<p>', $errors).'</p>';
}
}else{
//destroy old session and create new - prevents session fixation attacks
session_regenerate_id(true);
//all details are correct - the method returns the id to be sotred as a session
$_SESSION['id'] = $login;
//send user to their home page
echo "success";
header('Location: userHome.php');
exit();
}
}
}
编辑:再次检查,现在如果我将任何字段留空或者如果它们不正确则不会显示错误。除非提供正确的详细信息,否则上述第二种情况是不变的。