内联打印PHP错误而不是擦除整个页面

时间:2011-08-27 13:30:50

标签: php error-handling inline

如何让PHP打印内联错误而不是更改整个页面?

我希望它定位#errors并填写,而不是更改所有内容。

我目前使用的代码是die ("Incorrect username or password.");

我是PHP的新手,很抱歉,如果这是一件非常容易的事情。

2 个答案:

答案 0 :(得分:6)

将错误放在您执行逻辑的变量中,并在#errors中打印其内容。例如:

if (username_is_incorrect()) $error = 'Incorrect username or password.';

并在HTML中

<?php if (isset($error)):?><div id="errors"><?=$error?></div><?php endif;?>

答案 1 :(得分:1)

有两种方法可以做到。

真正的内联方法并不完全基于PHP,因为没有JavaScript和AJAX调用就无法使用它 请注意此方法的恼人缺点:最后在收到表单数据时需要再次检查每个字段。

另一个将重新加载您的页面,但它将是包含所有表单字段,输入数据和新生成的错误消息的同一页面。这称为POST/Redirect/GET模式

这是一个简短的例子

<?  
if ($_SERVER['REQUEST_METHOD']=='POST') {  

  $err = array();
  //performing all validations and raising corresponding errors
  if (empty($_POST['name']) $err[] = "Username field is required";  
  if (empty($_POST['text']) $err[] = "Comments field is required";  

  if (!$err) {  
    // if no errors - saving data 
    // and then redirect:
    header("Location: ".$_SERVER['PHP_SELF']);
    exit;
  }  else {
    // all field values should be escaped according to HTML standard
    foreach ($_POST as $key => $val) {
      $form[$key] = htmlspecialchars($val);
    }
} else {
  $form['name'] = $form['comments'] = '';  
}
include 'form.tpl.php';
?>  

在form.tpl.php文件中,您有表单字段,输入值和错误消息的条件输出

<? if ($err): ?>
  <? foreach($err as $e): ?>
<div class="err"><?=$e?></div>
  <? endforeach ?>
<? endif ?>
<form>
  <input type="text" name="name" value="<?=$form['name']?>">
  <textarea name="comments"><?=$form['comments']?></textarea>
  <input type="submit">
</form>