当前位置:首页 > PHP教程 > php应用 > 列表

实例讲解PHP表单

发布:smiling 来源: PHP粉丝网  添加日期:2022-03-14 11:52:38 浏览: 评论:0 

这篇文章主要介绍了PHP表单相关知识,文中讲解非常细致,代码帮助大家更好的参考和学习,感兴趣的朋友可以了解下。

表单处理

GET vs. POST

1  GET 和 POST 都创建数组(例如,array( key => value, key2 => value2, key3 => value3, ...))。此数组包含键/值对,其中的键是表单控件的名称,而值是来自用户的输入数据。

2  GET 和 POST 被视作 $_GET 和 $_POST。它们是超全局变量,这意味着对它们的访问无需考虑作用域 - 无需任何特殊代码,您能够从任何函数、类或文件访问它们。

3  传递方式

$_GET 是通过 URL 参数传递到当前脚本的变量数组。

$_POST 是通过 HTTP POST 传递到当前脚本的变量数组。

(1)何时使用 GET?

通过 GET 方法从表单发送的信息对任何人都是可见的(所有变量名和值都显示在 URL 中)。GET 对所发送信息的数量也有限制。限制在大约 2000 个字符。

GET 可用于发送非敏感的数据。

注释:绝不能使用 GET 来发送密码或其他敏感信息!

(2)何时使用 POST?

通过 POST 方法从表单发送的信息对其他人是不可见的(所有名称/值会被嵌入 HTTP 请求的主体中),并且对所发送信息的数量无限制。

此外 POST 支持高阶功能,比如在向服务器上传文件时进行 multi-part 二进制输入。

提示:开发者偏爱 POST 来发送表单数据。

表单验证

htmlspecialchars() 函数

如果要将表单提交给页面本身,而不是跳转到另一张页面。这样,用户就能够在表单页面获得错误提示信息。

表单的 HTML 代码是这样的:

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

(1)什么是 $_SERVER["PHP_SELF"] 变量?

$_SERVER["PHP_SELF"] 是一种超全局变量,它返回当前执行脚本的文件名。

因此,$_SERVER["PHP_SELF"] 将表单数据发送到页面本身,而不是跳转到另一张页面。这样,用户就能够在表单页面获得错误提示信息。

(2)什么是 htmlspecialchars() 函数?

htmlspecialchars() 函数把特殊字符转换为 HTML 实体。这意味着 < 和 > 之类的 HTML 字符会被替换为 &lt; 和 &gt; ,页面效果仍是< >。这样可防止攻击者通过在表单中注入 HTML 或 JavaScript 代码(跨站点脚本攻击)对代码进行利用。

如果没有 htmlspecialchars() 函数

hacker输入url:

http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E

表单处则会转换为:

<form method="post" action="test_form.php"/><script>alert('hacked')</script>

典型反射xss

表单检查函数:

  1. <?php 
  2. // 定义变量并设置为空值 
  3. $name = $email = $gender = $comment = $website = ""
  4.  
  5. if ($_SERVER["REQUEST_METHOD"] == "POST") { 
  6.  $name = test_input($_POST["name"]); 
  7.  $email = test_input($_POST["email"]); 
  8.  $website = test_input($_POST["website"]); 
  9.  $comment = test_input($_POST["comment"]); 
  10.  $gender = test_input($_POST["gender"]); 
  11.  
  12. function test_input($data) { 
  13.  $data = trim($data); 
  14.  $data = stripslashes($data); 
  15.  $data = htmlspecialchars($data); 
  16.  return $data
  17. ?> 

必填字段 验证 E-mail 和 URL

1.验证名字

以下代码展示的简单方法检查 name 字段是否包含字母和空格,如果 name 字段无效,则存储一条错误消息:

  1. $name = test_input($_POST["name"]); 
  2. if (!preg_match("/^[a-zA-Z ]*$/",$name)) { 
  3.  $nameErr = "只允许字母和空格!";  

2.验证 E-mail

以下代码展示的简单方法检查 e-mail 地址语法是否有效,如果无效则存储一条错误消息:

  1. $email = test_input($_POST["email"]); 
  2. if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email)) { 
  3.  $emailErr = "无效的 email 格式!";  

3.验证 URL

以下代码展示的方法检查 URL 地址语法是否有效(这条正则表达式同时允许 URL 中的斜杠),如果 URL 地址语法无效,则存储一条错误消息:

  1. $website = test_input($_POST["website"]); 
  2. if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/% 
  3. =~_|]/i",$website)) { 
  4.  $websiteErr = "无效的 URL";  

完成表单实例

  1. <!DOCTYPE HTML>  
  2. <html> 
  3. <head> 
  4. <style> 
  5. .error {color: #FF0000;} 
  6. </style> 
  7. </head> 
  8. <body>  
  9.  
  10. <?php 
  11. // 定义变量并设置为空值 
  12. $nameErr = $emailErr = $genderErr = $websiteErr = ""
  13. $name = $email = $gender = $comment = $website = ""
  14.  
  15. if ($_SERVER["REQUEST_METHOD"] == "POST") { 
  16.  if (emptyempty($_POST["name"])) { 
  17.  $nameErr = "姓名是必填的"
  18.  } else { 
  19.  $name = test_input($_POST["name"]); 
  20.  // 检查姓名是否包含字母和空白字符 
  21.  if (!preg_match("/^[a-zA-Z ]*$/",$name)) { 
  22.  $nameErr = "只允许字母和空格";  
  23.  } 
  24.  } 
  25.    
  26.  if (emptyempty($_POST["email"])) { 
  27.  $emailErr = "电邮是必填的"
  28.  } else { 
  29.  $email = test_input($_POST["email"]); 
  30.  // 检查电子邮件地址语法是否有效 
  31.  if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email)) { 
  32.  $emailErr = "无效的 email 格式";  
  33.  } 
  34.  } 
  35.    
  36.  if (emptyempty($_POST["website"])) { 
  37.  $website = ""
  38.  } else { 
  39.  $website = test_input($_POST["website"]); 
  40.  // 检查 URL 地址语法是否有效(正则表达式也允许 URL 中的斜杠) 
  41.  if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website)) { 
  42.  $websiteErr = "无效的 URL";  
  43.  } 
  44.  } 
  45.  
  46.  if (emptyempty($_POST["comment"])) { 
  47.  $comment = ""
  48.  } else { 
  49.  $comment = test_input($_POST["comment"]); 
  50.  } 
  51.  
  52.  if (emptyempty($_POST["gender"])) { 
  53.  $genderErr = "性别是必选的"
  54.  } else { 
  55.  $gender = test_input($_POST["gender"]); 
  56.  } 
  57.  
  58. function test_input($data) { 
  59.  $data = trim($data); 
  60.  $data = stripslashes($data); 
  61.  $data = htmlspecialchars($data); 
  62.  return $data
  63. ?> 
  64.  
  65. <h2>PHP 验证实例</h2> 
  66. <p><span class="error">* 必需的字段</span></p> 
  67. <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">  
  68.  姓名:<input type="text" name="name"
  69.  <span class="error">* <?php echo $nameErr;?></span> 
  70.  <br><br> 
  71.  电邮:<input type="text" name="email"
  72.  <span class="error">* <?php echo $emailErr;?></span> 
  73.  <br><br> 
  74.  网址:<input type="text" name="website"
  75.  <span class="error"><?php echo $websiteErr;?></span> 
  76.  <br><br> 
  77.  评论:<textarea name="comment" rows="5" cols="40">

Tags: PHP表单

分享到: