错误验证和页面操作问题?

时间:2013-11-06 04:19:10

标签: php forms validation

嗨,伙计们,我是新手编码并喜欢它的每一分钟:) 所以下面的代码在我的registration.php文件中。我想这样做,以便当用户填写所有内容之前,它会在按下注册按钮后将它们指向我的invoice.php文件。如果他们缺少某些要求,请返回注册表单(希望在我弄清楚之后,添加一些粘性表单,这样他们就不必键入任何已验证的文本)另外,得到错误“ 注意:未定义的索引:在我的PHP代码顶部的验证中,在第9行的C:\ xampp \ htdocs \ assignment_2 \ registration.php 中提交,不太确定我想放在那里。 :(一如既往,非常感谢任何帮助!

    <html>
    <h4>
        <center>
            New User Registration
        </center>
    </h4>
    <body>
<?php
if($_POST["submit"]=="login")
    {
        if(preg_match("/^[0-9a-zA-Z_]{5,}$/", $_POST["user"]) === 0)
          $errUser = '<p class="errText">User must be bigger that 5 chars and contain only digits, letters and underscore</p>';
        // Password must be strong
        //if(preg_match("/^.*(?=.{8,})(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]).*$/", $_POST["pass"]) === 0)
        if(preg_match("/^.*(?=.{8,})(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]).*$/", $_POST["pass"]) === 0)
          $errPass = '<p class="errText">Password must be at least 8 characters and must contain at least one lower case letter, one upper case letter and one digit</p>';
    // Email mask
        if(preg_match("/^[a-zA-Z]\w+(\.\w+)*\@\w+(\.[0-9a-zA-Z]+)*\.[a-zA-Z]{2,4}$/", $_POST["email"]) === 0)
          $errEmail = '<p class="errText">Email must comply with this mask: chars(.chars)@chars(.chars).chars(2-4)</p>';


    }    




  ?>
        <form action="invoice.php" method="post">
            <center>
                <table width="300" border="0" align="center" cellpadding="0" cellspacing="1">
                    <tr>
                        <td>Username</td>
                        <td>:</td>
                        <td <input name="user" type="text" size="16" value="<?php echo $_POST["user"]; ?>">
          <?php  if(isset($errUser)) echo $errUser; ?>
                    </tr>
                     <tr>
                        <td>Password</td>
                        <td>:</td>
                        <td><input name="pass" type="password" size="16" value="<?php echo $_POST["pass"]; ?>">
          <?php  if(isset($errPass)) echo $errPass; ?>
                    </tr>
                                         <tr>
                        <td>Email</td>
                        <td>:</td>
                        <td><input name="email" type="text" size="50" value="<?php echo $_POST["email"]; ?>">
          <?php  if(isset($errEmail)) echo $errEmail; ?>
                    </tr> 
                    <tr>
                        <td>&nbsp;</td>
                        <td>&nbsp;</td> 
                    </tr>          
                </table>
                <input type='submit' name='register' value='Register'>
            </center>    
        </form>
    </body>
</html>

2 个答案:

答案 0 :(得分:1)

这里的问题是许多PHP新手程序员遇到的问题。请参阅$_POST是一个数组,其中包含使用请求脚本的POST请求提交的所有参数。但如果没有,或者使用GET请求脚本怎么办?你明白了:它是空的。

在您的情况下,POST数据中似乎不存在submit。在这种情况下,您很可能只想显示表单,因此用户可以输入数据并提交表单(将设置该值)。所以如果“提交”在那里,你必须先检查。

第二:你的提交按钮被称为“注册”,它的值(这不是真的必要,但好吧)是“注册”。因此,如果提交表单,则发送的数据为register=Register&<other fields>。因此,您必须检查是否存在“注册”,而不是“提交”

if (isset($_POST['register']) && $_POST['register']) {
    // evaluate
}

答案 1 :(得分:0)

你没有检查任何var设置,所以你可以看到更多的PHP错误

我更改了更多支票,你可以尝试

<html>
    <h4>
        <center>
            New User Registration
        </center>
    </h4>
    <body>
        <?php

      $errEmail    = "";
      $errUser     = "";
      $errPass     = "";

      //not too sure what this if statement suppose to be.
      if(isset($_POST["register"])){//1. no '{' 2. the post is not ckeck 'type', is 'name'

        // Email mask
        if(preg_match("/^[a-zA-Z]\w+(\.\w+)*\@\w+(\.[0-9a-zA-Z]+)*\.[a-zA-Z]{2,4}$/", $_POST["email"]) === 0)
          $errEmail = '<p class="errText">Email must comply with this mask: chars(.chars)@chars(.chars).chars(2-4)</p>';
        // User must be digits and letters
        if(preg_match("/^[0-9a-zA-Z_]{5,}$/", $_POST["user"]) === 0)
          $errUser = '<p class="errText">User must be bigger that 5 chars and contain only digits, letters and underscore</p>';
        // Password must be strong
        //if(preg_match("/^.*(?=.{8,})(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]).*$/", $_POST["pass"]) === 0)
        if(preg_match("/^.*(?=.{8,})(?=.*[0-9])(?=.*[a-z])(?=.*[A-Z]).*$/", $_POST["pass"]) === 0)
          $errPass = '<p class="errText">Password must be at least 8 characters and must contain at least one lower case letter, one upper case letter and one digit</p>';
      }    
  ?>
        <form method="post">
            <center>
                <table width="300" border="0" align="center" cellpadding="0" cellspacing="1">
                    <tr>
                        <td>Username</td>
                        <td>:</td>
                        <td ><input name="user" type="text" size="16" value="<?php echo (isset($_POST["user"]))?$_POST["user"]:'';/*3.no check the var is set?*/ ?>">
          <?php  if(isset($errUser) and $errUser !='') echo $errUser; ?>
                        </td ><!--4. no '</td>'-->
                    </tr>
                     <tr>
                        <td>Password</td>
                        <td>:</td>
                        <td><input name="pass" type="password" size="16" value="<?php echo (isset($_POST["pass"]))?$_POST["pass"]:''; ?>">
          <?php  if(isset($errPass) and $errPass !='') echo $errPass; ?>
                        </td >
                    </tr>
                                         <tr>
                        <td>Email</td>
                        <td>:</td>
                        <td><input name="email" type="text" size="50" value="<?php echo (isset($_POST["email"]))?$_POST["email"]:''; ?>">
          <?php  if(isset($errEmail) and $errEmail !='') echo $errEmail; ?>
                        </td >
                    </tr> 
                    <tr>
                        <td>&nbsp;</td>
                        <td>&nbsp;</td> 
                    </tr>          
                </table>
                <input type='submit' name='register' value='Register'>
            </center>    
        </form>
    </body>
</html>