我在网站上有一个注册表单,注册调用了一个函数,该函数接受 $_POST 值作为参数。在进行常规检查时,如果发现错误,它会使用错误消息类中的一个函数来设置错误,并增加 errorcounter 变量。此函数接受两个参数:字段和错误消息(存储在数组中)。
$errmsg->setError("firstname", "You must enter your name");
setError() 设置错误:
function setError($field, $errMsg){
$this->errors[$field] = $errMsg;
}
注册功能检查错误计数器是否已增加,如果没有,则注册帐户,如果是,则重定向回注册页面。
注册页面使用 errmsg 类中的一个函数来显示任何错误:
$errmsg->showError("firstname");
// Argument being the field name.
此函数应显示已设置的任何错误消息:
function showError($field) {
if (isset($this->errors[$field])) {
return $this->errors[$field];
} else {
return "";
}
}
因此,您可以查看数组是否定义了索引,它应该显示值,如果没有,则不显示任何内容。
我遇到的问题是即使出现错误也没有显示任何内容。
我试过回显 $errmsg->errors['firstname']; 如果错误计数器> 0,则在寄存器功能中,并显示正确的消息。所以我知道正在设置数组键,如果我更改 else 语句以在数组键不存在时返回一个字符串,它也可以正常工作。因此,由于某种原因,正在设置该值,然后在页面重新加载后再次丢失。
我还尝试在错误消息类中创建一个函数来返回发现错误时可以由 register 函数调用的数组:
function getErrorArray(){
return $this->errors;
}
这也无济于事。为了 100% 确定在运行 register 函数时数组键存在,我尝试了这个:
if ($errors > 0) {
if(isset($errmsg->errors['firstname'])) {
header("Location: ".$session->referrer);
} else {
header("Location: http://www.google.com");
}
正如预期的那样,如果出现错误(我正在处理的错误是一个空字符串),它会重定向回来并应该显示消息,并且当字段包含重定向到 Google 的值时。
我也尝试过使用:
if(array_key_exists($field,$this->errors))
代替:
if(isset($errmsg->errors['firstname']))
我真的不明白为什么这不起作用,这是范围问题吗?我是否应该将其存储在 $_SESSION 中?任何指针将不胜感激。谢谢。