zoukankan      html  css  js  c++  java
  • php form表单的提交

    php表单之在Web页面中插入表单

    在普通的WEB页面中插入表单是如下的:这里将创建一个比较完整的表单, 将<form>中的元素和属性全部基本全部都展示出来。

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>index</title>
    </head>
    <body>
        <form action="test.php" method="post" name="form1" enctype="multipart/form-data">
            <table width="400" border="1" cellpadding="1" bgcolor="#999">
                <tr bgcolor="#ffcc33">
                    <td width="103" height="25" align="right">username: </td>
                    <td height="25"><input type="text" name="user" size="20" maxlength="100"></td>
                </tr>
                <tr bgcolor="#ffcc33">
                    <td height="25" align="right">gender: </td>
                    <td height="25" colspan="2">
                        <input type="radio" name="gender" value="0" checked>male
                        <input type="radio" name="gender" value="1">female    
                    </td>
                </tr>
                <tr bgcolor="#ffcc33">
                    <td width="103" height="25" align="right">password: </td>
                    <td width="289" height="25" colspan="2"><input type="password" name="pwd" size="20" maxlength="100"></td>
                </tr>
                <tr bgcolor="#ffcc33">
                    <td height="25" align="right">schooling: </td>
                    <td height="25" colspan="2">
                        <select name="select" >
                            <option value="0">Specialized subject</option>
                            <option value="1">Undergraduate course</option>
                            <option value="2" selected>A graduate student</option>
                        </select>
                    </td>
                </tr>
                <tr bgcolor="#ffcc33">
                    <td height="25" align="right">hobby: </td>
                    <td height="25" colspan="2">
                        <input type="checkbox" name="hobby[]" value="0" checked>php
                        <input type="checkbox" name="hobby[]" value="1">thinkphp    
                        <input type="checkbox" name="hobby[]" value="2" checked>laravel
                    </td>
                </tr>
                <tr bgcolor="#ffcc33">
                    <td height="25" align="right">pic: </td>
                    <td height="25" colspan="2">
                        <input type="file" name="image" size="20" maxlength="100">
                    </td>
                </tr>
                <tr bgcolor="#ffcc33">
                    <td height="25" align="right">info: </td>
                    <td height="25" colspan="2">
                        <textarea name="info" cols="30" rows="10"></textarea>
                    </td>
                </tr>
                <tr bgcolor="#ffcc33">
                    <td height="25" align="right">info: </td>
                    <td height="25" colspan="2">
                        <input type="submit" value="提交">
                        <input type="reset" value="重置">
                    </td>
                </tr>
            </table>
        </form>
    </body>
    </html>

    在浏览器中输入地址,按回车键,运行结果如下:

    php中提交表单数据的POST()方法和GET()方法

    使用POST()方法提交表单

    在使用POST()方法时,只需要将<form>表单中的属性 method 设置成POST即可。 POST()方法不依赖于URL,不会显示在地址栏。POST()方法可以没有限制地传递数据到服务器,所有提交的信息在后台传输,用户在浏览器端是看不到这一过程的,安全性会更高。所以POST()方法比较适合用于发送一个保密的(如银行账号)或者容量较大的数据到服务器中。

    下面的实例将使用POST()方法发送文本框信息到服务器,示例代码如下所示:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>index</title>
    </head>
    <body>
        <form action="test.php" method="post" name="form1">
            <table width="300" border="0" cellpadding="0" cellspacing="0">
                <tr>
                    <td height="30">
                        订单号:
                        <input type="text" name="order" size="20">
                        <input type="submit" value="提交">
                    </td>
                </tr>
            </table>
        </form>
    </body>
    </html>

    使用GET()方法提交表单

    注意:若要使用GET()方法提交表单,URL的长度应限制在1MB字符以内。如果发送的数据量太大,数据将会被截断,从而导致意外或失败的处理结果。

    下面创建一个表单来实现应用 GET()方法提交用户名和密码,并显示在URL 地址栏中。添加一个文本框,命名为user;添加一个密码域,命名为pwd;将表单的 method 属性设置为 GET()方法,示例代码如下所示:

    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>index</title>
    </head>
    <body>
        <form action="test.php" method="get" name="form1">
            <table width="300" border="0" cellpadding="0" cellspacing="0">
                <tr>
                    <td height="30">
                        用户名:<input type="text" name="user" size="20"><br>
                        密码:<input type="password" name="pwd" size="20"><br>
                        <input type="submit" value="提交">
                    </td>
                </tr>
            </table>
        </form>
    </body>
    </html>

    运行这个实例,在文本框中输入用户名和密码,点击“提交”按钮后,文本框内的信息就会显示在URL地址栏中,如下面的图所示:

    GET()方法会将参数暴露在地址栏中。如果用户传递的参数是非保密性的参数(如id=8),那么采用GET()方法传递数据是可行的;如果用户传递的保密性的参数(如密码等),使用这种方法传递数据是不安全的。解决该问题的方法是将表单中的 method 属性默认的GET()方法替换为POST()方法。

    php判断form表单是否提交详解

    我们一般通过 submit 提交表单时,会在乎在表单中填写的一大堆数据是否提交到后台。这里就需要做个判断,使用php代码来判断表单数据是否被提交一般采用如下的形式:

    <html>
    <body>
        <form action="" method="post" name="form1">
            <table width="300" border="0" cellpadding="0" cellspacing="0">
                <tr>
                    <td height="30">
                        用户名:<input type="text" name="user" size="20"><br>
                        密码:<input type="password" name="pwd" size="20"><br>
                        <input type="submit" name="submit" value="提交">
                    </td>
                </tr>
            </table>
        </form>
    </body>
    </html>
    
    <?php
    if(isset($_POST['submit'])){
        echo '数据被提交过来';
    }

    说明:isset -- 检测变量是否设置 ,返回值有如下的几种形式。

    若变量不存在则返回 FALSE

    若变量存在且其值为NULL,也返回 FALSE

    若变量存在且值不为NULL,则返回 TURE

    同时检查多个变量时,每个单项都符合上一条要求时才返回 TRUE,否则结果为 FALSE。

    在做数据查询时,建议用GET方式,而在做数据添加、修改或删除时,建议用POST方式。
    request是先读取 get再读post 的, 同时存在, 即覆盖掉前面的变量。

    php防止表单重复提交详解

    用户提交表单时可能因为网速的原因,或者网页被恶意刷新,致使同一条记录重复插入到数据库中,所以不能忽视的一个限制是防止用户重复提交表单,因为有可能用户连续点击了提交按钮或者是攻击者恶意提交数据,那么我们在提交数据后的处理如修改或添加数据到数据库时就会惹上麻烦。

    第一、首先从前端做限制。

    前端JavaScript在按钮被点击一次后禁用,即disabled,这个方法简单的防止了多次点击提交按钮,但是缺点是如果用户禁用了javascript脚本则失效。

    提到客户在下面的例子中,我们使用它处理表单的重复提交问题,请看下面的代码:

    <html>
    <body>
        <form action="" method="post" name="register" enctype="multipart/form-data">
            <input type="text" name="text" id="text"><br>
            <input name="cont" value="提交" type="button" onclick="document.register.cont.value='正在提交,请等待...';document.register.cont.disabled=true;document.register.submit();">
        </form>
    </body>
    </html>

    当用户单击“提交”按钮后,该按钮将变为灰色不可用状态

    还有一个方法,也是利用JavaScript的功能,但是使用的是OnSubmit()方法,如果已经提交过一次表单,将立即弹出对话框,代码如下:

    <html>
    <body>
        <form action="" method="post" name="register" onSubmit="return submitOnce(this)">
            <input type="text" name="text" id="text"><br>
            <input name="cont" value="提交" type="submit">
        </form>
    </body>
    </html>
    
    <script>
        var count = 0;
        function submitOnce(form){
            if(count == 0){
                count++;
                return true;
            }else{
                alert('请勿重复提交表单!');
                return false;
            }
        }
    </script>

    第二、使用Cookie处理

    使用Cookie记录表单提交的状态,根据其状态可以检查是否已经提交表单,请见下面的代码:

    <html>
    <body>
        <form action="" method="post" name="register" enctype="multipart/form-data">
            username: <input type="text" name="text" id="text"><br>
            <input name="submit" value="提交" type="submit">
        </form>
    </body>
    </html>
    
    <?php
    if(isset($_post['submit'])){
        setcookie('tmpcookie','',time()+30);
        header('Location:'.$_SERVER[PHP_SELF]);
        exit;
    }
    if(isset($_COOKIE['tmpcookie'])){
        setcookie('tmpcookie','',0);
        echo '请勿重复提交表单';
    }

    如果客户端禁止了Cookie,该方法将不起任何作用,这点请注意。

    第三、使用Session处理

    利用PHP的Session功能,也能避免重复提交表单。Session保存在服务器端,在PHP运行过程中可以改变Session变量,下次访问这个变量时,得到的是新赋的值,所以,可以用一个Session变量记录表单提交的值,如果不匹配,则认为是用户在重复提交,请见如下代码:

    <?php
    session_start();
    $code = mt_rand(0,1000000);
    $_SESSION['code'] = $code;
    ?>
    <html>
    <body>
        <form action="deal.php" method="post" name="register" enctype="multipart/form-data">
            username: <input type="text" name="text" id="text"><br>
            <input type="hidden" name="code" value="<?=$code?>">
            <input name="submit" value="提交" type="submit">
        </form>
    </body>
    </html>

    在接收页面的PHP代码如下:

    <?php
    session_start();
    if(isset($_POST['code'])){
        if($_POST['code'] == $_SESSION['code']){
    
        }else{
            echo '请不要重复提交表单';
        }
    }
    ?>

    第四、使用header函数转向

    除了上面的方法之外,还有一个更简单的方法,那就是当用户提交表单,服务器端处理后立即转向其他的页面,代码如下所示。

    <html>
    <body>
        <form action="deal.php" method="post" name="register" enctype="multipart/form-data">
            username: <input type="text" name="text" id="text"><br>
            <input name="submit" value="提交" type="submit">
        </form>
    </body>
    </html>

    deal.php

    <?php
    if(isset($_POST['submit'])){
        //业务处理...
        
        header('location:success.php');
    }
    ?>

    success.php

    <?php
    echo '提交成功';
  • 相关阅读:
    Codeforces 627A XOR Equation(思路)
    Codeforces 633C Spy Syndrome 2(DP + Trie树)
    BZOJ 1982 [Spoj 2021]Moving Pebbles(博弈论)
    BZOJ 3676 [Apio2014]回文串(回文树)
    BZOJ 3790 神奇项链(manacher+DP+树状数组)
    Codeforces 449D Jzzhu and Numbers(高维前缀和)
    SPOJ Time Limit Exceeded(高维前缀和)
    BZOJ 4031 [HEOI2015]小Z的房间(Matrix-Tree定理)
    BZOJ 3809 Gty的二逼妹子序列(莫队+分块)
    BZOJ 3544 [ONTAK2010]Creative Accounting(set)
  • 原文地址:https://www.cnblogs.com/chenyingying0/p/12936895.html
Copyright © 2011-2022 走看看