我正在尝试使用 ajax 和 jquery 将我的登录表单变成下拉列表。到目前为止,除了 ajax 和错误验证之外,我已经完成了所有工作。
目前我遇到的主要问题是未输入字段时,例如密码。登录框显示“此字段是必需的”,这很好,如果我再次单击提交,输入字段就会消失并且消息仍然存在。除非我刷新页面,否则我无法继续登录。
另一个主要问题是从 php.ini 获取错误消息。如果我输入了错误的密码,则不会显示该消息。表单提交,消失,就是这样。当我再次选择登录时,我可以看到之前应该显示的错误消息。
好的一面:正确的登录组合可以完美运行。
任何帮助表示赞赏。
PHP 和 Function 都粘贴在下面。
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();
}
}
}
编辑:刚刚再次检查,现在如果我将任何字段留空或者如果它们不正确,则不会显示错误。除非提供正确的详细信息,否则上述第二种情况是不变的。