如果用户/密码存在于txt文件中,我正在尝试使用php验证设置ajax登录表单。
表格:
<form class="form login" id="log_user">
<input id="login__username" type="text" name="username" class="form__input" placeholder="Username" required>
<input id="login__password" type="password" name="password" class="form__input" placeholder="Password" required>
<input type="submit" value="Log In">
</form>
javascript:
$(document).ready(function(){
$("#log_user").submit(function(){
$.ajax({
type:"POST",
data:{
username : $("#login__username").val(),
password : $("#login__password").val()
},
url:"log_user.php",
success: function(data){
if(data == 'Success'){
alert('Login Passw correct');
}
else{
alert(data);
}
},
error: function(){
alert('something went wrong');
}
});
return false;
});});
PHP:
<?php
foreach(file('passwd.txt') as $line) {
if(empty($line)) continue;
$lineArray = explode(':', $line);
$username = rtrim($lineArray[0]);
$password = rtrim($lineArray[1]);
if( isset($_POST['username']) && isset($_POST['password']) ){
if($_POST['username'] == $username && $_POST['password'] == $password){
session_start();
$_SESSION['user'] = $username;
echo "Success";
}
else{
echo "Failed";
}
}
}
?>
passwd.txt
myname:mypassw
myname2:mypassw2
每次尝试我都有SuccessFailed或FailedFailed,不明白为什么? 一个线索?
答案 0 :(得分:0)
问题在于您的foreach
循环。我假设您存储了多个用户名和密码?如果你输入一个正确的联合国和pw它回声成功,但你没有告诉它在那一点停止,所以下一个条目运行与un和pw不匹配,所以它回应失败。
这里的解决方案是使用foreach
之外的变量,如果找到用户名和密码,则将其切换为真值(在本例中为TRUE
)。在foreach
之后,我们会检查此变量的值,并echo
检查相应的响应:
$success = FALSE;
foreach(file('passwd.txt') as $line) {
if(empty($line)) continue;
$lineArray = explode(':', $line);
$username = rtrim($lineArray[0]);
$password = rtrim($lineArray[1]);
if( isset($_POST['username']) && isset($_POST['password']) ){
if($_POST['username'] == $username && $_POST['password'] == $password){
session_start();
$_SESSION['user'] = $username;
$success = TRUE;
break; // stop looping through text file.
}
}
}
echo $success ? 'Success' : 'Failed';