在php中显示基于表单数据的错误消息

时间:2011-12-13 05:30:53

标签: php

我正在尝试为我正在处理的网站创建一个非常标准的用户创建表单,但我的PHP业余状态阻止我实现我的目标。

基本上我想要做的是让用户填写注册表单,然后让服务器端脚本尝试注册该信息。如果注册成功,则用户将被重定向到一个页面,告诉他们查找验证电子邮件。如果该注册失败(电子邮件地址已经在系统中,不匹配密码,无论如何),我想重新加载页面,但是向表单上方的用户显示错误消息。目前,我所拥有的表单是从一个php文件中回显出来的,该文件与存储页面的HTML是分开的。我的三个问题是这个。

  1. 根据我的阅读,成功重定向用户的方法是使用标题(“位置:http://foo.com”)。这是正确的,还是有更合适的方法呢?

  2. 如何访问导致第一个用户失败的错误?我已经读过,出于多种不同的原因设置会话变量是一个糟糕的想法,但如果没有这个,我怎样才能跟踪表单验证引发的错误?我是否应该创建一个全局$ errors变量,每当我回复注册表单时都会清除该变量?

  3. 对于这种情况,注册表单所在的页面是否应具有.html扩展名或.php扩展名,或者它无关紧要?更一般地说,当页面是.html与.php / .asp /其他什么时,是否有任何规则?

  4. 编辑:下面添加了代码。注意,表单是从../views/register_form.php中调用的文件呈现的(我假设这是我在PHP中使用MVC的方式)

    呈现表单的页面(称为index.html)

    <body> 
    <script type="text/javascript"> <!-- put the jquery load stuff into here -->
    $(function(){
      $("#registration_form").load("views/register_form.php");});
    </script>
    
    
    <div class="topbar"><!-- Create the top bar layout-->
      <div class="fill">
        <div class="container">
         <a class="brand" href="#">Website!</a>
         <ul class="nav">
           <li class="active"><a href="#">Home</a></li>
           <li> <a href="#about">About</a></li>
         </ul>
         <form action="scripts/login_user.php" method="post" class="pull-right">
           <input class="input-medium" id="login-email" type="text" name="email_addr"     placeholder="email" />
       <input class="input-medium" id="login-password" type="password" name="password" placeholder="password" />
       <button class="btn" type="submit">Login now!</button>
         </form>
        </div>
      </div>
    </div>
    <div class="container">
      <div class="content">
        <div class="page header">
         Page header!
        </div>
        <div id="registration_form">
    </div>
    

    脚本

        if(//some of the data in the form isn't set)
             {
               //Set error conditions based on missing data
             }
    
        $confirm_password=$_REQUEST['confirm_password'];
        $password=$_REQUEST['password'];
        if($confirm_password != $password){
           //report passwords don't match}
    
    
        $email_addr=$_REQUEST['email_addr'];
        $first_name=$_REQUEST['first_name'];
        $last_name=$_REQUEST['last_name'];
    
    
    try
    {
        $successful_creation=create_user_and_send_verification_email($email_addr, $password, $first_name, $last_name);
    }
    catch(Exception $e)
    {
        /*SQL errors are caught here*/
    }
    
    if($successful_creation==FALSE)
    {
        //If it couldn't be inserted for a non exception generating reason.  If I get here, should I echo a page that has those errors printed, but is otherwise identical to the previous one?
    }
    else
    {
        //redirect to a "wait for a verification email" page
    }
    

2 个答案:

答案 0 :(得分:1)

  1. 是的,这是正确的方法,但在尝试向页面呈现任何内容之前必须发送所有标头。此外,您不一定需要重定向,您可以使用PHP生成正确的输出,具体取决于表单数据。
  2. 接收提交的表单的脚本应该检查提交的数据是否有错误,然后可以将这些错误输出到该脚本生成的页面。
  3. 如果页面中有php代码,那么通常它需要一个php扩展,除非你的服务器被设置为以php为单位处理html页面。否则,.html就好了。
  4. 我希望这有助于指明您正确的方向,尽管您现在拥有的代码更集中的问题会产生更好的答案。

    网上有很多这方面的教程,您应该按照其中一个进行实验。

答案 1 :(得分:0)

为什么不在同一页面上编写服务器端代码,并且每个表单输入都使用一个标志 例如:如果电子邮件无效,则为$ email = 1。

提交后如果有任何标志被初始化,请检查标志,如果$ email = 1,则回显错误,否则重定向。