覆盖函数中的 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']];
}
我有两个文件,一个名为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']];
}