使用php检查json文件中是否存在值

时间:2018-05-24 06:30:51

标签: php json

我使用带有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>

2 个答案:

答案 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">

这可以解决您的问题。