php - PHP:为什么我的变量在我将它们包含在请求语句中后不可用?
问题描述
我在 Coursera 学习 PHP,现在我们应该做一个简单的 CRUD(创建、读取、更新、删除)Web 应用程序。
对于我的登录程序,我将所有错误消息“外包”到一个名为“errors.php”的单独文件中:
<?php
$errors = array(
"email" => "Email must have an at-sign (@)",
"login" => "Email and password are required",
"pass" => "Incorrect password");
?>
现在我想在我的登录例程中包含(请求)它。如您所见,我两次包含/请求了它。据我了解,第一个请求应该足以让错误变量在整个登录脚本中可用。它应该具有全局范围。正确的?
但是经过相当多的调试后,我发现我必须在函数“returnOnerror”中请求它才能在此函数调用中使用。
函数内不能访问全局变量吗?反过来,我会明白...
<?php
session_start();
require("errors.php");
function returnOnerror($whaterror){
require("errors.php");
$_SESSION["error"] = $errors[$whaterror];
header('location: login.php');
exit();
}
if ((isset($_POST['email'])) && (isset($_POST['pass']))){
$salt = 'XyZzy12*_';
$stored_hash = '1a52e17fa899cf40fb04cfc42e6352f1'; //(salted hash + php123)
$passhash = hash('md5', $salt.$_POST['pass']);
if ((strlen($_POST['email']<1)) && (strlen($_POST['pass'])<1)) {
returnOnerror("login");
}
if ((substr_count($_POST['email'], '@'))<1){
returnOnerror('email');
}
if ($passhash==$stored_hash){
$_SESSION['name'] = $_POST['email'];
$_SESSION['login'] = "logged in";
header('location: index.php');
exit();
}
else {
returnOnerror("pass");
}
}
?>
顺便说一句,我在 Stackexchange 和网络上搜索了这里以找到解释,但没能找到。因此,我作为最后的机会翻到了这里。谢谢。
解决方案
推荐阅读
- neo4j - 无法通过 pythonanywhere.com 上托管的代码连接到 GrapheneDb.com 上托管的 Neo4j 数据库
- pre-trained-model - 了解拥抱脸变形金刚
- node.js - 使用 Postgres 的 Node/Express 的结果永远不会发送,即使它们出现在控制台中
- android - 如何从 EditText 中获取数据?
- ubuntu - E: 子进程 /usr/bin/dpkg 在 Ubuntu 18.04 上使用 g++ 返回错误代码 (1)
- android - 在使用 AndroidX 库的某个 Activity 中打开 DialogFragment,还有可能吗?
- java - 如何关闭单个excel文件,而不是当前使用java打开的所有excel文件
- java - 弹跳球。球很迟钝。repaint() 太慢了
- php - Prestashop 1.7 - 客户 Web 服务中的重复电子邮件
- python - return int(value) ValueError: int() 以 10 为基数的无效文字:'' Django Rest Framework