【发布时间】:2018-01-06 08:39:09
【问题描述】:
我在重定向后存储和检索错误消息时遇到问题。结果,我只得到 'Array' 或 'Array ( [0] => No files were added. )'。
下面我描述了我到底在做什么:
我正在编写一个 php 脚本,该脚本借助提交表单上传文件。但是,由于在上传过程中可能会出现许多错误,因此我将这些错误存储在一个名为 $errors 的数组中。我如何将错误消息添加到数组的示例:
$errors[] = "The error message is placed here";
上传过程成功(或失败,如果出现错误)后,页面会重新加载以清除表单等。当用户提交空白表单时,这(我认为)也需要显示 php 错误(但也许还有另一种方法可以做到这一点,但我不知道)。为了通知用户上传过程中可能出现的错误,我想将此 $errors 数组存储在会话变量 #_SESSION['errors'] 中。我希望这有助于将错误带到刷新的页面。
无论如何,这是我得到的(粗略的)脚本,它显示了重定向的位置。
if(isset($_POST['submit'])){
[upload script]
}else{
$errors[] = "No files were added.";
$_SESSION[ 'errors' ] = $errors;
header( 'Location:' . $_SERVER[ 'PHP_SELF' ] );
exit();
}
当然我把 session_start();在我的 php 开始标签下面(只有 error_reporting(E_ALL) 和 ini_set('display_errors', '1') 在 session_start() 上面,没有别的)。
我通过在 session_start() 下直接包含以下代码来测试是否发送了数组:
if(isset($_SESSION[ 'errors' ])){
$errors[] = $_SESSION[ 'errors' ];
unset( $_SESSION[ 'errors' ] );
print_r($errors);
}
我发现需要取消设置,否则刷新后会一遍又一遍地将相同的错误保存在 $_sessions['errors'] 中。 print_r($errors) 给出了以下输出:
Array ( [0] => Array ( [0] => No files were added. ) )
所以我猜 $errors 数组在重定向中幸存下来,对吧?
所以,开始显示实际错误。我将 $errors = $_SESSION['errors'] 代码放在我想显示错误的地方(在我的正文标签中,在菜单下方)。代码如下:
if(isset($_SESSION[ 'errors' ])){
$errors[] = $_SESSION[ 'errors' ];
unset( $_SESSION[ 'errors' ] );
}
if(isset($errors)){
echo "<div id=\"errorLog\" class=\"errorLogCl\" onClick=\"this.parentNode.style.display = 'none';\">";
foreach ( $errors as $e ) {
echo $e;
}
echo "</div>";
}
但是,这仅将“数组”作为值。我尝试了其他选项,例如 print_r 或:
foreach ($errors as $key => $errorvalue){
echo($errorvalue);
}
但我仍然只得到“数组”或“数组([0] => 未添加文件。)”。
我做错了什么以及如何正确存储和检索我保存在 $errors 和 $_SESSIONS['errors'] 数组中的错误消息?或者有没有更好的方法通过重定向发送(多个)错误消息?
【问题讨论】:
-
"页面被重新加载以清除表单等" 我的建议是避免在会话中存储错误状态并改善丢失错误数据的原因,页面刷新。如果您在错误情况下不重新打印默认值,则无需此行为即可清除表单。
标签: php html arrays http-redirect