Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用php检查json文件中是否存在值_Php_Json - Fatal编程技术网

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

使用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

我使用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 $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条记录,并试图作为第一条记录登录,这是行不通的。