php表单处理

一、表单处理 $_GET 和 $_POST

PHP中的$_GET 和 $_POST 变量用于检索表单的信息,比如用户的输入。

<form action = "welcome.php" method = "post">
        名字:<input type = "text" name = "usename">
        年龄:<input type = "text" name = "age">
        <input type = "submit" value = "提交">

    </form>

当用户提交完数据之后,表单的数据会被发送到命名为welcome.php的PHP文件

欢迎<?php echo $_POST["usename"];?>!<br>
你的年龄是<?php echo $_POST["age"];?> 岁

二、PHP获取下拉菜单的数据

下拉菜单单选

 1 <?php
 2             $q = isset($_GET['q'])? htmlspecialchars($_GET['q']) : '';
 3             if($q) {
 4                     if($q =='RUNOOB') {
 5                             echo '菜鸟教程<br>http://www.runoob.com';
 6                     } else if($q =='GOOGLE') {
 7                             echo 'Google 搜索<br>http://www.google.com';
 8                     } else if($q =='TAOBAO') {
 9                             echo '淘宝<br>http://www.taobao.com';
10                     }
11             } else {
12         ?>
13             <form action="" method="get"> 
14                 <select name="q">
15                 <option value="">选择一个站点:</option>
16                 <option value="RUNOOB">Runoob</option>
17                 <option value="GOOGLE">Google</option>
18                 <option value="TAOBAO">Taobao</option>
19                 </select>
20                 <input type="submit" value="提交">
21                 </form>
22             <?php
23             }
24             ?>
View Code

下拉菜单多选

如果下拉菜单是多选的( multiple="multiple"),我们可以通过将设置 select name="q[]" 以数组的方式获取,

 1 <?php
 2             $q = isset($_POST['q'])? $_POST['q'] : '';
 3             if(is_array($q)) {
 4                 $sites = array(
 5                         'RUNOOB' => '菜鸟教程: http://www.runoob.com',
 6                         'GOOGLE' => 'Google 搜索: http://www.google.com',
 7                         'TAOBAO' => '淘宝: http://www.taobao.com',
 8                 );
 9                 foreach($q as $val) {
10                     // PHP_EOL 为常量,用于换行
11                     echo $sites[$val] . PHP_EOL;
12                 }
13                   
14             } else {
15             ?>
16             <form action="" method="post"> 
17                 <select multiple="multiple" name="q[]">
18                 <option value="">选择一个站点:</option>
19                 <option value="RUNOOB">Runoob</option>
20                 <option value="GOOGLE">Google</option>
21                 <option value="TAOBAO">Taobao</option>
22                 </select>
23                 <input type="submit" value="提交">
24                 </form>
25             <?php
26             }
27         ?>
View Code

三、单选按钮表单

 PHP 单选按钮表单中 name 属性的值是一致的,value 值是不同的

 1 <?php
 2             $q = isset($_GET['q'])? htmlspecialchars($_GET['q']) : '';
 3             if($q) {
 4                     if($q =='RUNOOB') {
 5                             echo '菜鸟教程<br>http://www.runoob.com';
 6                     } else if($q =='GOOGLE') {
 7                             echo 'Google 搜索<br>http://www.google.com';
 8                     } else if($q =='TAOBAO') {
 9                             echo '淘宝<br>http://www.taobao.com';
10                     }
11             } else {
12             ?><form action="" method="get"> 
13                 <input type="radio" name="q" value="RUNOOB" />Runoob
14                 <input type="radio" name="q" value="GOOGLE" />Google
15                 <input type="radio" name="q" value="TAOBAO" />Taobao
16                 <input type="submit" value="提交">
17             </form>
18             <?php
19             }
20         ?>
View Code

四、checkbox复选框

 1 <?php
 2             $q = isset($_POST['q'])? $_POST['q'] : '';
 3             if(is_array($q)) {
 4                 $sites = array(
 5                         'RUNOOB' => '菜鸟教程: http://www.runoob.com',
 6                         'GOOGLE' => 'Google 搜索: http://www.google.com',
 7                         'TAOBAO' => '淘宝: http://www.taobao.com',
 8                 );
 9                 foreach($q as $val) {
10                     // PHP_EOL 为常量,用于换行
11                     echo $sites[$val] . PHP_EOL;
12                 }
13                   
14             } else {
15             ?><form action="" method="post"> 
16                 <input type="checkbox" name="q[]" value="RUNOOB"> Runoob<br> 
17                 <input type="checkbox" name="q[]" value="GOOGLE"> Google<br> 
18                 <input type="checkbox" name="q[]" value="TAOBAO"> Taobao<br>
19                 <input type="submit" value="提交">
20             </form>
21             <?php
22             }
23         ?>
View Code
 1 <?php
 2             $q = isset($_POST['q'])? $_POST['q'] : '';
 3             if(is_array($q)) {
 4                 $sites = array(
 5                         'RUNOOB' => '菜鸟教程: http://www.runoob.com',
 6                         'GOOGLE' => 'Google 搜索: http://www.google.com',
 7                         'TAOBAO' => '淘宝: http://www.taobao.com',
 8                 );
 9                 foreach($q as $val) {
10                     // PHP_EOL 为常量,用于换行
11                     echo $sites[$val] . PHP_EOL;
12                 }
13                   
14             } else {
15             ?><form action="" method="post"> 
16                 <input type="checkbox" name="q[]" value="RUNOOB"> Runoob<br> 
17                 <input type="checkbox" name="q[]" value="GOOGLE"> Google<br> 
18                 <input type="checkbox" name="q[]" value="TAOBAO"> Taobao<br>
19                 <input type="submit" value="提交">
20             </form>
21             <?php
22             }
23         ?>
View Code

五、使用PHP验证表单数据

当用户提交表单时,完成两件事
1、使用PHP trim()函数去除用户输入数据中不必要的字符(如:空格, tab, 换行)

2、使用PHP stripslashes()函数去除用户输入数据中的反斜杠(\)

将这些过滤的函数写在一个自定义的函数里,方便调用

 1 <!DOCTYPE HTML> 
 2         <html>
 3             <head>
 4             <meta charset="utf-8">
 5                 <title>菜鸟教程(runoob.com)</title>
 6             </head>
 7         <body> 
 8 
 9         <?php
10         // 定义变量并默认设置为空值
11         $name = $email = $gender = $comment = $website = "";
12 
13         if ($_SERVER["REQUEST_METHOD"] == "POST")
14             {   
15                 //调用test_input()函数对用户输入的值进行处理 (\,空格,tab,换行)
16                $name = test_input($_POST["name"]);
17                
18                $email = test_input($_POST["email"]);
19                
20                $website = test_input($_POST["website"]);
21                
22                $comment = test_input($_POST["comment"]);
23                
24                $gender = test_input($_POST["gender"]);
25             }
26         
27         //自定义函数test_input()去空格、tab、反斜杠、换行
28         /*
29             这里也可以对提交的数据作其他的验证,比如邮箱的格式等等
30         */
31         function test_input($data)
32             {
33                $data = trim($data);
34                $data = stripslashes($data);
35                $data = htmlspecialchars($data);
36                return $data;
37             }
38         ?>
39 
40         <h2>PHP 表单验证实例</h2>
41             <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> //action 提交到当前php页面
42                名字: <input type="text" name="name">
43                <br><br>
44                E-mail: <input type="text" name="email">
45                <br><br>
46                网址: <input type="text" name="website">
47                <br><br>
48                备注: <textarea name="comment" rows="5" cols="40"></textarea>
49                <br><br>
50                性别:
51                <input type="radio" name="gender" value="female">52                <input type="radio" name="gender" value="male">53                <br><br>
54                <input type="submit" name="submit" value="Submit"> 
55             </form>
56 
57         </body>
View Code

六、表单必填字段

对于一些必填的字段,初始定义一些错误变量,这些错误变量将显示在必须字段上。此外还将检查$_POST

变量是否为空(使用PHP的empty函数)。如果为空,则显示对应的错误信息,如果不为空,数据将传递给test_input()函数:

 1 <?php 
 2         //定义变量默认设置为空值
 3         $nameErr = $emailErr = $genderErr = $websiteErr = "";
 4         $name = $email = $gender = $comment = $website = "";
 5         
 6         if($_SERVER["REQUEST_METHOD"] == "POST){
 7             
 8             //验证名字
 9             if(empty($_POST["name"])){
10                 $nameErr = "名字是必填项";
11                 
12             }else {
13                 $name = test_input(_POST["name"]);
14                 
15             }
16             
17             //验证邮箱
18             if(empty($_POST["email"])){
19                 $emailErr = "邮箱是必填项";
20                 
21             }else {
22                 $email = test_input($_POST["email"]);
23             
24             }
25             
26             //验证性别
27             if(empty($_POST["gender"])){
28                 $gender = "性别是必填项";
29             
30             }else {
31                 $gender = test_input($_POST["gender"]);
32             
33             }
34             
35             //验证站点
36             if(empty($_POST["website"])){
37                 $website = "";
38             }else{
39                 $website = test_input($_POST["website"]);
40             }
41         
42         }
43     function test_input($data) {
44            $data = trim($data);
45            $data = stripslashes($data);
46            $data = htmlspecialchars($data);
47            return $data;
48         }
49     
50     ?>
View Code

以下是一个完整的表单输入并验证,输入错误并给出提示

 1 <!DOCTYPE HTML> 
 2         <html>
 3         <head>
 4         <meta charset="utf-8">
 5         <title>菜鸟教程(runoob.com)</title>
 6         <style>
 7         .error {color: #FF0000;}
 8         </style>
 9         </head>
10         <body> 
11 
12         <?php
13         // 定义变量并默认设为空值
14         $nameErr = $emailErr = $genderErr = $websiteErr = "";
15         $name = $email = $gender = $comment = $website = "";
16 
17         if ($_SERVER["REQUEST_METHOD"] == "POST") {
18            if (empty($_POST["name"])) {
19               $nameErr = "名字是必须的。";
20            } else {
21               $name = test_input($_POST["name"]);
22            }
23 
24            if (empty($_POST["email"])) {
25               $emailErr = "邮箱是必须的。";
26            } else {
27               $email = test_input($_POST["email"]);
28            }
29 
30            if (empty($_POST["website"])) {
31               $website = "";
32            } else {
33               $website = test_input($_POST["website"]);
34            }
35 
36            if (empty($_POST["comment"])) {
37               $comment = "";
38            } else {
39               $comment = test_input($_POST["comment"]);
40            }
41 
42            if (empty($_POST["gender"])) {
43               $genderErr = "性别是必须的。";
44            } else {
45               $gender = test_input($_POST["gender"]);
46            }
47         }
48         
49         function test_input($data) {
50            $data = trim($data);
51            $data = stripslashes($data);
52            $data = htmlspecialchars($data);
53            return $data;
54         }
55         ?>
56 
57         <h2>PHP 表单验证实例</h2>
58         <p><span class="error">* 必填字段。</span></p>
59         //action 不做跳转,把当前表单信息传给当前执行的文件
60         <form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>"> 
61         
62            名字: <input type="text" name="name">
63            <span class="error">* <?php echo $nameErr;?></span>  //用于显示错误信息
64            <br><br>
65            
66            E-mail: <input type="text" name="email">
67            <span class="error">* <?php echo $emailErr;?></span>
68            <br><br>
69            
70            网址: <input type="text" name="website">
71            <span class="error"><?php echo $websiteErr;?></span>
72            <br><br>
73            
74            备注: <textarea name="comment" rows="5" cols="40"></textarea>
75            <br><br>
76            
77            性别:
78            <input type="radio" name="gender" value="female">79            <input type="radio" name="gender" value="male">80            <span class="error">* <?php echo $genderErr;?></span>
81            <br><br>
82            
83            <input type="submit" name="submit" value="Submit"> 
84         </form>
85 
86         </body>
87         </html>
View Code

关于action后面的代码

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

//action后面是PHP代码,代码最终返回当前正在执行脚本的文件名

什么是$_SERVER["PHP_SELF]

$_SERVER["PHP_SELF] 是超级全局变量,返回当前正在执行脚本的文件名,
所以$_SERVER["PHP_SELF] 会发送表单数据到当前页面,而不是跳转到不同的页面

什么是htmlspecialchars()方法?

htmlspecialchars()函数把一些预定义的字符转换为HTML实体。总而言之,为了安全起见。

 

posted @ 2019-09-18 15:37  神神气气  阅读(742)  评论(0编辑  收藏  举报