Ajax Php登录表单txt文件
如果txt文件中存在user/passw,我将尝试使用php验证来设置ajax登录表单 表格:Ajax Php登录表单txt文件,php,ajax,forms,login,passwords,Php,Ajax,Forms,Login,Passwords,如果txt文件中存在user/passw,我将尝试使用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__passwo
<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>
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";
}
}
}
?>
每次我尝试都有一个成功者失败了,不明白为什么?
线索?问题在于您的foreach循环。我假设您存储了多个用户名和密码?如果你输入了一个正确的un和pw,它会回显成功,但是你没有告诉它在那一点停止,所以下一个条目运行时与un和pw不匹配,所以它会回显失败
这里的解决方案是在foreach之外使用一个变量,如果找到用户名和密码,该变量将切换为truthy值(在本例中为TRUE)。在foreach之后,我们检查该变量的值,并响应相应的响应:
$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';
旁注:为什么要使用文本文件而不是数据库,有什么特别的原因吗?前者比文本文件更容易管理,也更安全。首先,在我看来,您可能在头文件之前输出。ini_设置了什么“显示错误”,1;ini设置“显示启动错误”,1;错误报告全部;扔回去?你到底不明白什么?您正在执行foreach,因此该块中的所有内容(包括输出命令)都将针对文件中的每一行运行你知道你在这里做什么吗?这很不安全。Thanx很多Richard,我理解这个bug,但不幸的是,它不能与列表中的第一个usern/passwd一起工作?我在这里做了一个裸体:
myname:mypassw
myname2:mypassw2
$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';