为啥我的 foreach 循环与 users.json 文件中的键不匹配
Posted
技术标签:
【中文标题】为啥我的 foreach 循环与 users.json 文件中的键不匹配【英文标题】:Why is my foreach loop not matching the keys in users.json file为什么我的 foreach 循环与 users.json 文件中的键不匹配 【发布时间】:2020-01-25 09:01:35 【问题描述】:我正在尝试使用 php 和 JSON(无数据库)设置登录脚本,但我一直有这个错误
警告:使用未定义的常量电子邮件 - 假定为“电子邮件”(这将 在 PHP 的未来版本中抛出错误) C:\xampp\htdocs\networth-app\index.php 在第 37 行
注意:数组到字符串的转换 C:\xampp\htdocs\networth-app\index.php 在第 37 行
警告:使用未定义的常量电子邮件 - 假定为“电子邮件”(这将 在 PHP 的未来版本中抛出错误) C:\xampp\htdocs\networth-app\index.php 在第 37 行
<?php
session_start();
$msg = '';
/* Trigger when the login btn is clicked */
if (isset($_POST['log']))
/* Fetch users.json file */
$data = json_decode(file_get_contents("users.json"), true);
/* Get form data */
$email = $_POST['email'];
$pwd = $_POST['password'];
/* Form validation */
if (empty($email || $pwd))
$msg = 'Please fill in all fields';
elseif (strlen($pwd) < 5)
$msg = 'Password must be more than 5 charcter.';
else
/* loop through the users.json data */
foreach ($data as $user)
/* Login the user */
if ($email === $user['Email'] && $pwd === $user['Password'])
$_SESSION['Name'] = $user['Name'];
header('location: home.php');
exit;
?>
users.json
"users": [
"Name": "Frank Spencer",
"Email": "fraspecx@mail.com",
"Password": "test"
,
"Name": "Guy Daniel",
"Email": "guyb@gmail.com",
"Password": "test1"
],
"user": null
我希望能够登录到我的 home.php 并回显会话名称
【问题讨论】:
你应该提供你的 json 对象 好的@MorganFreeFarm 【参考方案1】:它的
"users": [
"Name": "Frank Spencer",
所以你可以像这样访问它:
foreach ($data['users'] as $user)
【讨论】:
【参考方案2】:首先,你错误的使用了json数据。
只需查看 foreach 循环中的 $user 变量即可。
您错误地使用它,因为您在其上附加了某种电子邮件常量(带有点 (.)),从逻辑上讲,该常量在您的文件中不存在。
你应该有类似的东西(当然要检查“电子邮件”或“密码”数组键是否正确写入):
if ($email === $user["Email"] && $pwd === $user["Password"])
【讨论】:
我这样做了,但我仍然有当你解码 user.json 时,它会转换为数组,所以如果你想直接访问任何数组键只需要像 $user['Email'] 而不是 $user.Email 那样编写,并且还要更改$user.Password 到 $user['Password'] 所以你需要像这样更新你的foreach
foreach ($data as $users)
foreach ($users as $user)
if(isset($user['Email'],$user['Password']))
if ($email === $user['Email'] && $pwd === $user['Password'])
$_SESSION['Name'] = $user['Name'];
header('location: home.php');
exit;
因为您正在尝试直接获取电子邮件索引
【讨论】:
我这样做了,但我仍然有以上是关于为啥我的 foreach 循环与 users.json 文件中的键不匹配的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 foreach 比我的 for 循环快? [复制]
为啥将 %dopar% 与 foreach 一起使用导致 R 无法识别包?