如何验证表单字段,然后单击提交

时间:2016-05-02 12:16:17

标签: php html forms

我正在尝试验证表单字段,然后将表单数据插入到数据库中。在所有字段值都正确后,单击提交按钮两次后,我的表单会提交。实际上,通过单击提交按钮一次验证表单字段并更改操作。设置操作后,单击“提交”按钮将提交表单。

任何人都可以通过只点击一次提交按钮告诉我如何提交。

这是我在相同文件上使用验证php脚本的html代码

<html>
<head>
    <title></title>
    <style> .error {color:#ff0000;} </style>
</head>
<body>
    <?php 
        $companyNameErr = $addressErr = $emailErr = $contactErr = "";
        $companyName = $address = $email = $contact = $description = "";
        function test_data($data)
        {
            $data=trim($data);
            $data=stripslashes($data);
            $data=htmlspecialchars($data);
            return $data;
        }
        $errors = array();
        $valid=0; 
        if ( $_SERVER["REQUEST_METHOD"] =="POST" )
        {

            $companyName=$_POST["companyName"];
            if( empty($companyName) )
            {
                $companyNameErr = "Please Enter Company Name";
                $errors[]= $companyNameErr ;
            }
            else
            {
                if( !preg_match("/^[a-zA-Z ]*$/",$companyName) )
                {
                    $companyNameErr = "Invalid Company Name";
                    $errors[]= $companyNameErr ;
                }
                else
                {
                    $companyName=test_data($companyName);
                    $valid++;

                }
            }
            $address=$_POST["address"];
            if( empty($address) )
            {
                $addressErr = "Please Enter Address";
                $errors[]= $addressErr ;
            }
            else
            { 
                $address=test_data($address);
                $valid++;
            }
            $email=$_POST["email"];
            if( empty($email) )
            {
                $emailErr = "Please Enter Email";
                $errors[]= $emailErr ;
            }
            else
            {
                if( !filter_var($email, FILTER_VALIDATE_EMAIL) )
                {
                    $emailErr = "Invalid Email";
                    $errors[]= $emailErr ;
                }
                else
                {
                    $email=test_data($email);
                    $valid++;
                }   
            }       
            $contact=$_POST["contact"];
            if( empty($contact) )
            {
                $contactErr = "Please Enter Contact Number";
                $errors[]= $contactErr ;
            }
            else
            { 
                if( !preg_match("/^[0-9]*$/",$contact ) )
                {
                    $contactErr = "Invalid Contact";
                    $errors[]= $contactErr ;
                }
                else
                {
                    $contact=test_data($contact);
                    $valid++;
                }   
            }
    }
    if($valid==4)
    {

    }
    ?>
    <form name="myform" method="post" action="<?php if($valid < 4){ echo $_SERVER["PHP_SELF"]; }else{ echo "validate1.php"; }?>" >
        <table>
            <tr>
                <td>Company Name</td>
                <td><input type="text" name="companyName" value ="<?php if(isset($_POST['companyName']) && empty($companyNameErr)){ echo $_POST['companyName'];} else {echo '';}?>" required ><span class="error"><sup>*</sup><?php echo $companyNameErr; ?></span></td>
            </tr>
            <tr>
                <td>Address</td>
                <td><input type="text" name="address" value ="<?php if(isset($_POST['address']) && empty($addressErr)){ echo $_POST['address'];} else {echo '';}?>" required><span class="error"><sup>*</sup><?php echo $addressErr; ?></span></td>
            </tr>
            <tr>
                <td>Email</td>
                <td><input type="text" name="email" value ="<?php if(isset($_POST['email']) && empty($emailErr)){ echo $_POST['email'];} else {echo '';}?>" required><span class="error"><sup>*</sup><?php echo $emailErr; ?></span></td>
            </tr>
            <tr>
                <td>Contact</td>
                <td>+91-<input type="text" name="contact" value ="<?php if(isset($_POST['contact']) && empty($contactErr)){ echo $_POST['contact'];} else {echo '';}?>" required maxlength="10" minlength="10"><span class="error"><sup>*</sup><?php echo $contactErr; ?></span></td>
            </tr>
            <tr>
                <td>Description</td>
                <td><textarea name="description" cols="60" rows="3"></textarea></td>
            </tr>
        </table>
        <input type="submit" name="submit" value="next>>">
    </form>
</body>

指定连接,然后将值插入数据库的php代码在另一个文件中

<html>
<head>
    <title></title>
</head>
<body>    
<?php 
    $servername="localhost";
    $username="root";
    $password="";
    $conn = new mysqli($servername, $username, $password, 'mydatabase');
    if ($conn->connect_error)
    {
        die("Connection failed: " . $conn->connect_error);
    }
    $conn->query("CREATE DATABASE IF NOT EXISTS `MyDataBase`"); 
    $conn->query("CREATE TABLE IF NOT EXISTS MyDataBase.company_details( `comp_id` INT AUTO_INCREMENT PRIMARY KEY,`company_name` VARCHAR(50) NOT NULL,`address` VARCHAR(70) NOT NULL,`email` VARCHAR(30) NOT NULL,`contact` INT(13) NOT NULL,`description` VARCHAR(150))");
    $conn->query("INSERT INTO company_details (company_name, address, email, contact, description ) VALUES ( '".$_POST['companyName']."', '".$_POST['address']."', '".$_POST['email']."', '".$_POST['contact']."', '".$_POST['description']."')");
    $conn->close();
?>
</body>

3 个答案:

答案 0 :(得分:1)

有很多很好的框架,为什么你想要用很多年前没有oop的旧方式自己创建验证的东西。 mvc很不错。

返回主题

你的$ valid在第一次调用时将为0 .. 在实际提交数据时,你只有$ _POST 表单操作是validate1.php php_sef是同一页面,所以我不知道你想要做什么,如果有的话。它将是alsways validate1.php。 你在哪里实际插入数据库。为什么数据库插入未经过验证。在输出数据之前插入数据之前,需要进行验证。 不要忘记未经过滤的php_self是不安全的并允许xss

数据流:

  • if method = post验证数据
    • 如果数据库更新没有错误。
    • 否则我们会有验证错误,所以输出它们。
  • 否则我们没有帖子所以只显示表格

阻止表单是没用的,因为每个人都可以重新加载页面并再次提交。只输出错误并再给他一次机会。如果你想要禁用它,你需要有一些访问控制。如果您只想轻松禁用并向用户显示,请将提交设置为已禁用或将操作设置为#

答案 1 :(得分:0)

问题在于你正在做什么的顺序。

  1. 用户输入表单数据
  2. 提交按钮,将数据提交给自己进行验证
  3. 重新显示数据,并将操作指向插入脚本
  4. 提交按钮,提交数据以插入脚本
  5. 问题是,在3到4之间,用户可以更改数据,绕过验证并提交不同的数据。

    验证应始终在与数据库查询相同的脚本中完成(是的,即使对于选择查询也是如此)。

    将数据库查询放入验证(如果有效),或者将验证检查放入数据库查询中。然后删除表单的任何条件操作,并让它提交。

答案 2 :(得分:0)

您确切地描述了问题中的问题。当您的页面首次呈现时,操作为PHP_SELF。然后,您必须单击提交按钮(1次)以根据$valid的值更改操作。完成后再次单击“提交”(2次),即可成功提交。

要解决此问题,您无需停止表单提交至validate1.php。所以这样做:

<html>
    <head>
        <title></title>
        <style> .error {color:#ff0000;} </style>
    </head>
    <body>
        <form name="myform" method="post" action="validate1.php" >
            <table>
                <tr>
                    <td>Company Name</td>
                    <td><input type="text" name="companyName" value ="<?php if(isset($_POST['companyName']) && empty($companyNameErr)){ echo $_POST['companyName'];} else {echo '';}?>" required ><span class="error"><sup>*</sup><?php echo $companyNameErr; ?></span></td>
                </tr>
                <tr>
                    <td>Address</td>
                    <td><input type="text" name="address" value ="<?php if(isset($_POST['address']) && empty($addressErr)){ echo $_POST['address'];} else {echo '';}?>" required><span class="error"><sup>*</sup><?php echo $addressErr; ?></span></td>
                </tr>
                <tr>
                    <td>Email</td>
                    <td><input type="text" name="email" value ="<?php if(isset($_POST['email']) && empty($emailErr)){ echo $_POST['email'];} else {echo '';}?>" required><span class="error"><sup>*</sup><?php echo $emailErr; ?></span></td>
                </tr>
                <tr>
                    <td>Contact</td>
                    <td>+91-<input type="text" name="contact" value ="<?php if(isset($_POST['contact']) && empty($contactErr)){ echo $_POST['contact'];} else {echo '';}?>" required maxlength="10" minlength="10"><span class="error"><sup>*</sup><?php echo $contactErr; ?></span></td>
                </tr>
                <tr>
                    <td>Description</td>
                    <td><textarea name="description" cols="60" rows="3"></textarea></td>
                </tr>
            </table>
            <input type="submit" name="submit" value="next>>">
        </form>
    </body>

现在您已提交到validate1.php,并且可以像之前在表单顶部所做的那样进行验证。如果表单是干净的,请将其提交给数据库,否则重新呈现表单,并将数据和错误消息提交回validate1.php再试一次。