我有一个接受并处理表单提交的php页面,页面在请求时正常显示,但是如果页面被提交并且表单验证失败,则页面假设重新显示表单错误,但是在页面重新显示时,php会在到达错误处理块时显示空白页面。以下是处理验证错误的代码:
<?php if(isset($errorLog) and is_array($errorLog)): ?>
<div class="alert alert-danger">
<?php $output = '';
if($errorLog['message'] == '') {
$output = "<ul class='error-list'>";
foreach($errorLog as $key => $value) {
if ($key != 'has_error_occured') {
$output .= "<li><strong>{html($key)}</strong>
<span>{html($value)} </span></li>";
}
}
$output .= "</ul>";
} else {
$msg = $errorLog['message'];
$output .= "<p>{html($msg)}</p>";
}
echo $output;
?>
</div>
<?php endif; ?>
以下是处理表单提交的代码
if(isset($_GET['transfer']) or
(isset($_POST['action']) and $_POST['action'] == TRANSFER)){
$transfer_type = $_GET['ttype'];
if(isset($_POST['action']) and
$_POST['action'] == TRANSFER){
//process money transfer.
$log = process_transfer();
if(isset($log) and is_array($log)){
if($log['has_error_occured']){
$_SESSION['error_log'] = $log;
//unset log
unset($log);
include_once $docRoot . '/users/temp/tranfer.html.php';
exit();
}else{
$_SESSION['transfer_msg'] = "Your international
transfer was processed successfully";
header('Location: ?summary');
}
}
//reload primary page.
header('Location: .');
}else{
include_once $docRoot . '/users/temp/tranfer.html.php';
exit();
}
}
注意:
我尝试将错误数组作为全局变量传递 你可以在上面的代码片段中看到。
我也试过在会话中传递它。
我也尝试过使用输出缓冲,方法是在开头添加ob_start()
,在表单脚本末尾添加ob_end_flush()
。
我还在表单脚本的开头添加了error_reporting(-1); ini_set('display_errors', true);
,以便知道页面在处理过程中是否遇到任何错误,但都无济于事。
我在 Windows 7 上使用 PhpStorm与XAMPP v3.2.1 进行开发。
请帮助,对这场噩梦的原因有任何帮助。感谢。
答案 0 :(得分:1)
如果您想使用$ _GET和$ _POST,那么最好使用$ _REQUEST,它允许同时访问$ _GET和$ _POST
不是TRANSFER,但应该是“TRANSFER”
如果错误日志是会话数据,那么它应该是
if(isset($ _ SESSION ['errorLog'])和is_array($ _ SESSION ['errorLog'])):
我没有找到任何由姓名消息创建的内容
if($ errorLog ['message'] =='')
为什么你用它,我认为它必须是'has_error_occured'
答案 1 :(得分:0)
我通过输出 php_error_log 并通过上述评论中的各种建议发现了问题,问题是我没有检查$erroLog['message']
是否已设置在访问它之前。但是,php不应该输出警告而不是诉诸于不完全执行文档其余部分的不确定选项吗?