首页 > 解决方案 > 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 和网络上搜索了这里以找到解释,但没能找到。因此,我作为最后的机会翻到了这里。谢谢。

标签: phpvariablesscoperequest

解决方案


推荐阅读