覆盖函数中的 PHP 变量并在另一个文件中使用它

Overwriting a PHP variable in a function and use it in another file

我有两个文件,一个名为functions.php,另一个名为error.php,我想要的做的是运行functions.php中的一些程序,覆盖错误变量,调用error.php文件和在那里显示错误,但我似乎无法正确获取变量的范围。我需要一些帮助和解释我的代码有什么问题。

在我的 functions.php 文件中,我有这样的内容:

<?php
$error = false;
$errorMsg = 'Some text';

function register ($email, $password) {
  //Calling global error variables
  global $error, $errorMsg;

  //MySQL query to check if email exists in DB
  if (/*email exists condition*/) {
    //Overwrite error variables
    $error = true;
    $errorMsg = 'Email already exists';

    //Redirect to error page
    header ("Location: error.php");
  }
  else {
  //Continue adding values to DB
  }
} ?>

然后在我的 error.php 文件中有一些 shorthand PHP 代码如下:

<?php require_once (functions.php); ?>

<?php if($error): ?>
  <h2>An error occurred: <?php echo $errorMsg; ?></h2>
<?php elseif(!$error): ?>
  <h2>No error: All operations completed successfully</h2>
<?php else: ?>
  <h2>An unknown error occurred</h2>
<?php endif; ?>

现在当我提供一个已经存在于数据库中的条目时,页面重定向但是似乎错误变量没有更新并且新打开error.php 页面显示输出为:

No error: All operations completed successfully

你有一个重定向 header ("Location: error.php") ,所以实际上你在做两个 http 请求 => 两个不同的 php processes(executed pages),变量将不可见。 最简单的方法是在第一页的$_SESSION中存储变量的值,在第二页读取它。 参见 PHP Pass variable to next page

你还应该看看https://www.php.net/manual/en/reserved.variables.session.php

您可以添加错误代码 and/or 消息作为重定向的查询字符串。

<?php
$qs = http_build_query(
    [
        'error'    => true,
        'errorMsg' => 'Email already exists'
    ]
);
var_dump($qs);

输出:

string(37) "error=1&errorMsg=Email+already+exists"

将查询字符串附加到您的重定向位置。

为路径使用代码参数的示例:error.php?code=23。在 error.php:

<?php
$error_codes = [
    '23' => 'Email already exists.'
];

if(isset($_GET['code']) && isset($error_codes[$_GET['code']])){
    echo $error_codes[$_GET['code']];
}