一、表单处理 $_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 ?>
下拉菜单多选
如果下拉菜单是多选的( 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 ?>
三、单选按钮表单
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 ?>
四、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 ?>

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 ?>
五、使用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>
六、表单必填字段
对于一些必填的字段,初始定义一些错误变量,这些错误变量将显示在必须字段上。此外还将检查$_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 ?>
以下是一个完整的表单输入并验证,输入错误并给出提示

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>
关于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实体。总而言之,为了安全起见。