使用php检查json文件中是否存在值
我使用php和json文件数据创建了一个登录系统。我尝试使用JavaScript文件登录,效果很好。但它并不安全。然后我用php登录更改了一些代码。 这是我的php代码使用php检查json文件中是否存在值,php,json,Php,Json,我使用php和json文件数据创建了一个登录系统。我尝试使用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 $k
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>
您的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";
}
如果找到了用户,并且该用户到达循环的末尾,则该代码将重定向该用户。我认为您的email和pass变量未定义。看一看
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";
}
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."
}
}
还有一件事
在发布任何表单时,必须在$\u POST中命名所需的元素
<input type="password" class="form-control" id="pass" required="require" placeholder="Password">
这应该可以解决您的问题。如果您需要帮助,也可以提供更多信息。我编辑了我的问题并添加了更多信息。很抱歉,$parsed_json获取数据。您可以按原样显示数据吗。在你的问题中?我认为我的foreach循环是错误的,因为检查数据是存在的。我尝试了这个循环,但它不起作用。始终显示检查电子邮件和密码抱歉-错过了一个结束日期},在上次回显之前添加了此项。我假设您设置了字段值($\u POST['email']
中的$\u POST['email']
和类似的密码)和密码(正如rahulsm指出的,您的HTML中没有密码字段的名称)?我认为我的foreach循环存在一些问题,如何使用phpi在json文件中查找存在的值修复了我的问题。密码字段名没有给我。我只是想指出,如果你在JSON中有2条记录,并试图作为第一条记录登录,这是行不通的。