Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/88.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何使表单标记中的action属性正常工作?_Php_Html_Forms_Validation - Fatal编程技术网

Php 如何使表单标记中的action属性正常工作?

Php 如何使表单标记中的action属性正常工作?,php,html,forms,validation,Php,Html,Forms,Validation,我知道标签表单有一个名为action的属性,我知道action是如何工作的,我就是这样使用它的 <form method="post" action = "registerd.php"> </form> 这是我正在写的全部代码 事先非常感谢 <div id = "content"> <?php $fnameErr = ""; $lnameErr = "";

我知道标签表单有一个名为action的属性,我知道action是如何工作的,我就是这样使用它的

<form method="post" action = "registerd.php">
</form>
这是我正在写的全部代码 事先非常感谢

<div id = "content">
            <?php
                $fnameErr = "";
                $lnameErr = "";
                $idErr = "";
                $placeErr = "";
                $dateErr = "";
                $emailErr = "";
                $pswErr = "";
                $file;
                $content = "";
                function test_input($data) {
                    $data = trim($data);
                    $data = stripslashes($data);
                    $data = htmlspecialchars($data);
                    return $data;
                }
                if(isset($_POST['register'])){
                    if(isset($_POST['firstname'])){
                        if(!empty($_POST['firstname'])){
                            if(strlen($_POST['firstname'])>1){
                                if(preg_match("/[a-zA-Z]+/", $_POST['firstname'])==1){
                                    $firstname = test_input($_POST['firstname']);
                                    $content .= "firstname:";
                                    $content .= $firstname; 
                                    $content .= " ";
                                }
                                else{   
                                    $fnameErr = "your first name should only include letters";
                                }
                            }
                            else{
                                $fnameErr = "your first name must be at least 2 characters";
                            }
                        }
                        else{
                            $fnameErr = "enter your first name";
                        }
                    }
                    else{
                        $fnameErr = "enter your first name";
                    }
                    if(isset($_POST['lastname'])){
                        if(!empty($_POST['lastname'])){
                            if(strlen($_POST['lastname'])>3){
                                if(preg_match("/[a-zA-Z]+/", $_POST['lastname'])==1){
                                    $lastname = test_input($_POST['lastname']);
                                    $content .= "lastname:";
                                    $content .= $lastname;
                                    $content .= " ";
                                }
                                else{
                                    $lnameErr = "your last name should only include letters";
                                }
                            }
                            else{
                                $lnameErr = "your last name must be at least 2 characters";
                            }
                        }
                        else{
                            $lnameErr = "enter your last name";
                        }
                    }
                    else{
                        $lnameErr = "enter your last name";
                    }

                    if(isset($_POST['idnum'])){
                        if(!empty($_POST['idnum'])){
                            if(strlen($_POST['idnum'])==10){
                                if(preg_match("/[0-9]{10}/", $_POST['idnum'])==1){
                                    $idnum = test_input($_POST['idnum']);
                                    $content .= "ID_No.:";
                                    $content .= $idnum;
                                    $content .= " ";
                                }
                                else{
                                    $idErr = "your ID number should only include digits";
                                }
                            }
                            else{
                                $idErr = "your ID number must be 10 digits";
                            }
                        }
                        else{
                            $idErr = "enter your ID number";
                        }
                    }
                    else{
                        $idErr = "enter your ID number";
                    }
                    if(isset($_POST['placeOfBirth'])){
                        if(!empty($_POST['placeOfBirth'])){
                            if(strlen($_POST['placeOfBirth'])>2){
                                if(preg_match("/[a-zA-Z]+/", $_POST['placeOfBirth'])==1){
                                    $placeOfBirth = test_input($_POST['placeOfBirth']);
                                    $content .= "placeOfBirth:";
                                    $content .= $placeOfBirth;
                                    $content .= " ";
                                }
                                else{
                                    $placeErr = "your place of birth should only include digits";
                                }
                            }
                            else{
                                $placeErr = "your place of birth must be at least 3 letters";
                            }
                        }
                    }   
                    if(isset($_POST['date'])){
                        if(!empty($_POST['date'])){
                            $date = test_input($_POST['date']);
                            $content .= "date:";
                            $content .= $date;
                            $content .= " ";
                        }
                        else{
                            $dateErr = "enter your date of birth";
                        }
                    }
                    else{
                        $dateErr = "enter your date of birth";
                    }


                    if(isset($_POST['email'])){
                        if(!empty($_POST['email'])){
                                $email = test_input($_POST['email']);
                                $content .= "email:";
                                $content .= $email;
                                $content .= " ";
                        }
                        else{
                            $emailErr = "enter your email";
                        }
                    }
                    else{
                        $emailErr = "enter your email";
                    }

                    if(isset($_POST['password'])){
                        if(!empty($_POST['password'])){
                                if(preg_match("/(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?!.*\s).*$/", $_POST['password'])==1){
                                    $password = test_input($_POST['password']);
                                    $content .= "password:";
                                    $content .= $password;
                                    $content .= " ";
                                }
                                else{
                                    $pswErr = "your password should have numbers, uppercase<br/> & lowercase letters";
                                }
                        }
                        else{
                            $pswErr = "enter your password";
                        }
                    }
                    else{
                        $pswErr = "enter your password";
                    }
                    if(file_exists($email.".txt")){
                        echo(
                            "<script>
                                alert('this email already exists!');
                            </script>"
                            );
                        $firstname = $lastname = $idnum = $date = $placeOfBirth = $password = "";
                    }
                    else{
                        $file = fopen($email.".txt","a+") or die("Unable to open file!");
                        fwrite($file, $content);
                        fclose($file);
                        header("location: registered.php");
                    }
                }
            ?>
            <fieldset id = "fieldset">
                <legend><h1 class = "reg" >Register Form</h1></legend>
                <form method="post" action="#" enctype = "multipart/form-data">
                <table class = "table">
                    <tr>
                        <td  class = "labels">
                            <p class = "star">*</p> First Name
                        </td>
                        <td><input class = "inclass" type="text" required="required" placeholder="Please enter your first name" id = "firstname" name="firstname" onclick = "colorBorder(this.id)"/></td>
                    </tr>
                    <td  class = "err">
                        <span>
                                <?php
                                    echo $fnameErr;
                                ?>
                        </span>
                    </td>
                    <tr>
                        <td class = "labels"><p class = "star">*</p> Last Name</td>
                        <td><input class = "inclass" type="text" required="required" placeholder="Please enter your last name" name="lastname" id = "lastname" onclick = "colorBorder(this.id)"/></td>
                    </tr>
                    <td  class = "err">
                        <span>
                                <?php
                                    echo $lnameErr;
                                ?>
                        </span>
                    </td>
                    <tr>
                        <td class = "labels">Gender</td>
                        <td>
                            <input class = "inclass" type="radio" name="gender" value="0" /><p class = "radio" >Male</p>
                            <input class = "inclass" type="radio" name="gender" value="1" /><p class = "radio" >Female</p>
                        </td>
                    </tr>
                    <tr>
                        <td class = "labels"><p class = "star">*</p> ID Number</td>
                        <td><input class = "inclass" type="text" id="idnum" required="required" placeholder="Please enter your ID number" name="idnum" onclick = "colorBorder(this.id)"/></td>
                    </tr>
                    <td  class = "err">
                        <span>
                                <?php
                                    echo $idErr;
                                ?>
                        </span>
                    </td>
                    <tr>
                        <td class = "labels">Place of Birth</td>
                        <td><input class = "inclass" type="text" placeholder="Please enter your place of birth" name="placeOfBirth" id = "place" onclick = "colorBorder(this.id)"/></td>
                    </tr>
                    <td  class = "err">
                        <span>
                                <?php
                                    echo $placeErr;
                                ?>
                        </span>
                    </td>
                    <tr>
                        <td class = "labels"><p class = "star">*</p> Date Of Birth</td>
                        <td><input class = "inclass" type="date" id = "date" name="date"/></td>
                    </tr>
                    <td  class = "err">
                        <span>
                                <?php
                                    echo $dateErr;
                                ?>
                        </span>
                    </td>
                    <tr>
                        <td class = "labels"><p class = "star">*</p> Email</td>
                        <td><input class = "inclass" type="email" required="required" placeholder="Please enter your email" name="email" id = "email" onclick = "colorBorder(this.id)"/></td>
                    </tr>
                    <td  class = "err">
                        <span>
                                <?php
                                    echo $emailErr;
                                ?>
                        </span>
                    </td>
                    <tr>
                        <td class = "labels"><p class = "star">*</p> Passwords</td>
                        <td><input class = "inclass" type="password" required="required" placeholder="Please enter your password" name="password" id = "password" onclick = "colorBorder(this.id)"/></td>
                    </tr>
                    <td  class = "err">
                        <span>
                                <?php
                                    echo $pswErr;
                                ?>
                        </span>
                    </td>
                    <tr>
                        <td><input type="submit" name="register" value="register" class="save"/></td>
                        <td><input type="reset" name = "reset" id = "reset"/></td>
                    </tr>
                </table>
                </form>
            </fieldset>
        </div>


在register.php上写下您的php验证代码,如果值未验证,则使用header函数重定向到您的表单页面

header("location : form.php")

下面采用的方法绕过了对isset的多余使用。这也意味着在检查是否设置了提交按钮值之后,检查所有的
$\u POST['data']
变量(合并到代码的一部分)。函数
函数测试输入($data){…}
被完全删除,因为上面提到的部分也做了完全相同的事情。。。为了简洁起见,多行字符串连接被压缩为一行。。。似乎到处都有一些无关的
if(){…}else{…}
子句。这些被忽略了,因为它们可能会对原始海报起到某种作用(尽管不太可能)。最后,确保表单被发回当前正在执行的脚本(考虑到表单数据的处理在同一个脚本中);我们将表单的
action
属性保留为空:这意味着表单将自动回发到自身-当前脚本

    <?php
        // AT THE VERY TOP OF THE SCRIPT - PREFERABLY NOT WITHIN A DIV OR ANY CONTAINER, START YOUR PHP CODES...
        $fnameErr   = "";
        $lnameErr   = "";
        $idErr      = "";
        $placeErr   = "";
        $dateErr    = "";
        $emailErr   = "";
        $pswErr     = "";
        $content    = "";
        $file;


        if(isset($_POST['register'])){
            // GATHER A FILTERED VERSION OF THE POST VARIABLES:
            $firstName      = isset($_POST['firstname'])    ? htmlspecialchars(stripslashes(trim($_POST['firstname'])))     : null;
            $lastName       = isset($_POST['lastname'])     ? htmlspecialchars(stripslashes(trim($_POST['lastname'])))      : null;
            $idNum          = isset($_POST['idnum'])        ? htmlspecialchars(stripslashes(trim($_POST['idnum'])))         : null;
            $placeOfBirth   = isset($_POST['placeOfBirth']) ? htmlspecialchars(stripslashes(trim($_POST['placeOfBirth'])))  : null;
            $date           = isset($_POST['date'])         ? htmlspecialchars(stripslashes(trim($_POST['date'])))          : null;
            $email          = isset($_POST['email'])        ? htmlspecialchars(stripslashes(trim($_POST['email'])))         : null;
            $password       = isset($_POST['password'])     ? htmlspecialchars(stripslashes(trim($_POST['password'])))      : null;


            if($firstName){
                if(!empty($firstName)){
                    if(strlen($firstName)>1){
                        if(preg_match("/[a-zA-Z]+/", $firstName)==1){
                            $content .= "firstname:" . $firstName . " ";
                        }
                        else{
                            $fnameErr = "Your first name should only include letters";
                        }
                    }
                    else{
                        $fnameErr = "Your first name must be at least 2 characters";
                    }
                }
                else{
                    $fnameErr = "Enter your first name";
                }
            }else{
                $fnameErr = "Enter your first name";
            }

            if(isset($lastName)){
                if(!empty($lastName)){
                    if(strlen($lastName)>3){
                        if(preg_match("/[a-zA-Z]+/", $_POST['lastname'])==1){
                            $content .= "lastname:" . $lastName . " ";
                        }
                        else{
                            $lnameErr = "Your last name should only include letters";
                        }
                    }
                    else{
                        $lnameErr = "Your last name must be at least 2 characters";
                    }
                }
                else{
                    $lnameErr = "Enter your last name";
                }
            }else{
                $lnameErr = "Enter your last name";
            }

            if(isset($idNum)){
                if(!empty($idNum)){
                    if(strlen($idNum) == 10){
                        if(preg_match("/[0-9]{10}/", $_POST['idnum'])==1){
                            $content .= "ID_No.:" .  $idNum . " ";
                        }
                        else{
                            $idErr = "Your ID number should only include digits";
                        }
                    }
                    else{
                        $idErr = "Your ID number must be 10 digits";
                    }
                }
                else{
                    $idErr = "Enter your ID number";
                }
            }else{
                $idErr = "Enter your ID number";
            }

            if(isset($placeOfBirth)){
                if(!empty($placeOfBirth)){
                    if(strlen($placeOfBirth)>2){
                        if(preg_match("/[a-zA-Z]+/", $placeOfBirth)==1){
                            $content .= "placeOfBirth:" . $placeOfBirth . " ";
                        }
                        else{
                            $placeErr = "Your place of birth should only include digits";
                        }
                    }else{
                        $placeErr = "Your place of birth must be at least 3 letters";
                    }
                }
            }

            if(isset($date)){
                if(!empty($date)){
                    $content .= "date:" . $date . " ";
                }else{
                    $dateErr = "Enter your date of birth";
                }
            }else{
                $dateErr = "Enter your date of birth";
            }

            if(isset($email)){
                if(!empty($email)){
                    $content .= "email:" .  $email . " ";
                }else{
                    $emailErr = "Enter your email";
                }
            }else{
                $emailErr = "Enter your email";
            }

            if(isset($password)){
                if(!empty($password)){
                    if(preg_match("/(?=.*\d)(?=.*[a-z])(?=.*[A-Z])(?!.*\s).*$/", $password)==1){
                        $content .= "password:" .  $password . " ";
                    }else{
                        $pswErr = "Your password should have numbers, uppercase<br/> & lowercase letters";
                    }
                }else{
                    $pswErr = "Enter your password";
                }
            }else{
                $pswErr = "Enter your password";
            }

            if(file_exists($email.".txt")){
                echo "<script type='text/javascript'>alert('this email already exists!');</script>";            
                $firstname = $lastname = $idnum = $date = $placeOfBirth = $password = "";
            }
            else{
                $file = fopen($email.".txt","a+") or die("Unable to open file!");
                fwrite($file, $content);
                fclose($file);
                header("location: registered.php");
            }
        }
    ?>

    <div id = "content">
        <fieldset id = "fieldset">
            <legend><h1 class = "reg" >Register Form</h1></legend>
            <!-- SINCE YOUR VALIDATION IS IN THE CURRENT SCRIPT, LEAVING THE  action ATTRIBUTE EMPTY IMPLIES THAT THE FORM WILL POST BACK TO ITSELF [THE CURRENT SCRIPT]. -->
            <form method="POST" action="" enctype = "multipart/form-data">
                <table class = "table">

                    <tr>
                        <td  class = "labels">
                            <p class = "star">*</p> First Name
                        </td>
                        <td>
                            <input class = "inclass" type="text" required="required" placeholder="Please enter your first name" id = "firstname" name="firstname" onclick = "colorBorder(this.id)"/>
                        </td>
                        <td  class = "err">
                            <span><?php echo $fnameErr; ?></span>
                        </td>
                    </tr>

                    <tr>
                        <td class = "labels"><p class = "star">*</p> Last Name</td>
                        <td>
                            <input class = "inclass" type="text" required="required" placeholder="Please enter your last name" name="lastname" id = "lastname" onclick = "colorBorder(this.id)"/>
                        </td>
                        <td  class = "err">
                            <span><?php echo $lnameErr; ?></span>
                        </td>
                    </tr>

                    <tr>
                        <td class = "labels">Gender</td>
                        <td>
                            <input class = "inclass" type="radio" name="gender" value="0" /><p class = "radio" >Male</p>
                            <input class = "inclass" type="radio" name="gender" value="1" /><p class = "radio" >Female</p>
                        </td>
                    </tr>

                    <tr>
                        <td class = "labels"><p class = "star">*</p> ID Number</td>
                        <td>
                            <input class = "inclass" type="text" id="idnum" required="required" placeholder="Please enter your ID number" name="idnum" onclick = "colorBorder(this.id)"/>
                        </td>
                        <td  class = "err">
                            <span><?php echo $idErr; ?></span>
                        </td>
                    </tr>

                    <tr>
                        <td class = "labels">Place of Birth</td>
                        <td>
                            <input class = "inclass" type="text" placeholder="Please enter your place of birth" name="placeOfBirth" id = "place" onclick = "colorBorder(this.id)"/>
                        </td>
                        <td  class = "err">
                            <span><?php echo $placeErr; ?></span>
                        </td>
                    </tr>

                    <tr>
                        <td class = "labels"><p class = "star">*</p> Date Of Birth</td>
                        <td>
                            <input class = "inclass" type="date" id = "date" name="date"/>
                        </td>                   
                        <td  class = "err">
                            <span><?php echo $dateErr; ?></span>
                        </td>
                    </tr>

                    <tr>
                        <td class = "labels"><p class = "star">*</p> Email</td>
                        <td>
                            <input class = "inclass" type="email" required="required" placeholder="Please enter your email" name="email" id = "email" onclick = "colorBorder(this.id)"/>
                        </td>
                        <td  class = "err">
                            <span><?php echo $emailErr; ?></span>
                        </td>
                    </tr>

                    <tr>
                        <td class = "labels"><p class = "star">*</p> Passwords</td>
                        <td>
                            <input class = "inclass" type="password" required="required" placeholder="Please enter your password" name="password" id = "password" onclick = "colorBorder(this.id)"/>
                        </td>
                        <td  class = "err">
                            <span><?php echo $pswErr; ?></span>
                        </td>
                    </tr>

                    <tr>
                        <td>&nbsp;</td>
                        <td><input type="submit" name="register" value="register" class="save"/></td>
                        <td><input type="reset" name = "reset" id = "reset"/></td>
                    </tr>

                </table>
            </form>
        </fieldset>
    </div>

我认为解决您问题的方法是将您的代码、HTML放在一个文件(“form.php”)中、php验证放在另一个文件(“validate.php”)中:

  • “form.php”将收集数据,表单的“action”将执行“validate.php”
  • “validate.php”将验证数据,如果没有发现错误,它将“header”到“registered.php”,如果发现错误,它将把消息存储在$\u会话中,“header”返回到“form.php”,在那里显示消息
例如:

form.php

<?php
session_start(); // NECESSARY TO USE $_SESSION.
?>
<html>
  <body>
    <form action="validate.php" method="post">
      Enter 0 or 1 : <input type="text" name="num"/>
      <br/>
      <input type="submit" value="Submit"/>
    </form>
<?php
// CHECK IF THERE IS ERROR MESSAGE FROM VALIDATION.
if ( isset( $_SESSION[ "err_msg" ] ) )
   { echo $_SESSION[ "err_msg" ];
     unset( $_SESSION[ "err_msg" ] ); // VERY IMPORTANT : DESTROY ERROR MESSAGE.
   }
?>
  </body>
</html>
<?php
session_start(); // NECESSARY TO USE $_SESSION.
if ( isset( $_POST[ "num" ] ) ) // IF CALLED FROM "FORM.PHP"
     { $num = $_POST[ "num" ];
       if ( ( $num == "0" ) || ( $num == "1" ) ) // VALIDATE NUMBER.
            header( "Location: registered.php" ); // NO ERROR.
       else { $_SESSION[ "err_msg" ] = "Number must be 0 or 1."; // MESSAGE.
              header( "Location: form.php" ); // ERROR.
            }
     }
else header( "Location: form.php" ); // WASN'T CALLED FROM "FORM.PHP".
?>

输入0或1:

validate.php

<?php
session_start(); // NECESSARY TO USE $_SESSION.
?>
<html>
  <body>
    <form action="validate.php" method="post">
      Enter 0 or 1 : <input type="text" name="num"/>
      <br/>
      <input type="submit" value="Submit"/>
    </form>
<?php
// CHECK IF THERE IS ERROR MESSAGE FROM VALIDATION.
if ( isset( $_SESSION[ "err_msg" ] ) )
   { echo $_SESSION[ "err_msg" ];
     unset( $_SESSION[ "err_msg" ] ); // VERY IMPORTANT : DESTROY ERROR MESSAGE.
   }
?>
  </body>
</html>
<?php
session_start(); // NECESSARY TO USE $_SESSION.
if ( isset( $_POST[ "num" ] ) ) // IF CALLED FROM "FORM.PHP"
     { $num = $_POST[ "num" ];
       if ( ( $num == "0" ) || ( $num == "1" ) ) // VALIDATE NUMBER.
            header( "Location: registered.php" ); // NO ERROR.
       else { $_SESSION[ "err_msg" ] = "Number must be 0 or 1."; // MESSAGE.
              header( "Location: form.php" ); // ERROR.
            }
     }
else header( "Location: form.php" ); // WASN'T CALLED FROM "FORM.PHP".
?>

这是很多if/else块。也许你可以稍微调试一下,把问题的具体范围缩小到哪里?如果代码正在到达
header()
语句,那么显然这是发生的适用逻辑路径。发生这种情况时,运行时值是什么?为什么您希望它们会有所不同?每次电子邮件文件(“email.txt”)不存在时,“header”都会执行。不,问题不在于我的验证不起作用,而是通过这种方式正确工作,我在问是否有一种方法可以不使用header来实现这一点谢谢你,但是代码是有效的,我知道如何让它更好地工作,谢谢你向我解释,但是我更关心的是使用action字段