2011-08-27 57 views
0

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

我希望它的目标是#errors,并填充它而不是改变一切。

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

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

回答

5

把错误放在一个变量中,你做你的逻辑并在#errors中打印它的内容。例如:

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

而在HTML

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

有做这件事的2种方式。

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

另一个将重新加载您的页面,但它将与所有表单域,输入数据和新鲜生成的错误消息是相同的页面。这就是所谓的POST/Redirect/GET模式

这里,而在你有你的表单字段form.tpl.php文件,输入的数值和错误消息的条件输出一个简单的例子

<? 
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'; 
?> 

<? 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>