我使用带有json文件数据的php创建一个登录系统。我尝试使用JavaScript文件登录,它工作正常。但它不安全。然后我用PHP登录更改一些代码。 这是我的PHP代码
if(isset($_POST['submit'])){
$json_string = file_get_contents('login.json');
$parsed_json = json_decode($json_string, true);
foreach($parsed_json as $key => $value){
$jsonemail = $value['email'];
$jsonpass = $value['pass'];
}
if($email == $jsonemail && $pass == $jsonpass){
header('location: view.php');
}
else{
echo "please check your email or password";
}
}
但这不起作用。我想修复此代码。我想查看json文件数据的电子邮件和密码是否正确。
这是我的login.json文件数据,如
"1": {
"email": "test123@gmail.com",
"pass": "123"
},
这是我的html登录表单
<div class="container">
<div class="row">
<div class="col-md-4"></div>
<div class="col-md-4">
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
<div class="form-group">
<label for="email">Email address</label>
<input type="email" class="form-control" name="email" id="email" aria-describedby="emailHelp" required="require" placeholder="Enter email">
</div>
<div class="form-group">
<label for="pass">Password</label>
<input type="password" class="form-control" id="pass" required="require" placeholder="Password">
</div>
<button type="submit" class="btn btn-primary" name="submit" >Submit</button>
</form>
</div>
<div class="col-md-4"></div>
</div>
</div>
答案 0 :(得分:0)
您的foreach
每次都会覆盖$ jsonemail和$ jsonpass的值,所以当您到达if()
部分检查用户详细信息时,这些将始终是文件中的最后一个值
if(isset($_POST['submit'])){
$json_string = file_get_contents('login.json');
$parsed_json = json_decode($json_string, true);
foreach($parsed_json as $key => $value){
if($email == $value['email'] && $pass == $value['pass']){
header('location: view.php');
exit();
}
}
echo "please check your email or password";
}
如果找到用户,此代码会重定向,如果它到达循环结束,则该文件中不存在该用户。
答案 1 :(得分:0)
我认为您的电子邮件和传递变量未定义。看看吧。
if (isset($_POST['submit'])) {
$json_string = file_get_contents('login.json');
$parsed_json = json_decode($json_string, true);
$email = $_POST['email']; // I think you miss this
$pass = $_POST['pass']; // and this lines as in your code its missing
$flag = false;
foreach ($parsed_json as $key => $value) {
if ($value['email'] == $email && $value['pass'] == $pass) {
$flag = true;
break;
}
}
if ($flag) {
header('location: view.php');
} else {
echo "Please check your email and password."
}
}
还有一件事
在发布任何表单时,您必须在$ _POST中命名您想要的元素。
<input type="password" class="form-control" id="pass" required="require" placeholder="Password">
在上面一行中,您缺少名称pass
。用
<input type="password" class="form-control" id="pass" required="require" placeholder="Password" name="pass">
这可以解决您的问题。