php表单的验证详解

伊谢尔伦
伊谢尔伦asal
2017-04-21 14:44:073739semak imbas

PHP网站开发建设中,用户注册、登录,留言等等是必不可少的一些实用功能,用户提交的信息数据都是通过form表单提交,然而提交的数据难免会有这样或者那样的错误,不管是有心还是无意,为了保证数据的完整性、安全性,PHP form表单验证是过滤数据的必不可少的环节。

首先我们对用户所有提交的数据都通过 PHP 的 htmlspecialchars() 函数处理。把特殊字符转换为 HTML 实体。这意味着 92d33664ec5f827b86e068a341370a86 之类的 HTML 字符会被替换为 < 和 > 。这样可防止攻击者通过在表单中注入 HTML 或 JavaScript 代码(跨站点脚本攻击)对代码进行利用。

当用户提交表单时,我们将做以下两件事情,:

使用 PHP trim() 函数去除用户输入数据中不必要的字符 (如:空格,tab,换行)。

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

必须字段

字段 验证规则
Name 必需。必须包含字母和空格。
E-mail 必需。必须包含有效的电子邮件地址(包含 @ 和 .)。
Website 可选。如果选填,则必须包含有效的 URL。
Comment 可选。多行输入字段(文本框)。

上述字段是必须的,不能为空。

格式匹配

1、匹配姓名

“/^[a-zA-Z ]*$/” 

只允许空格和字母,”^”表示开头,”$”表示结尾,[a-zA-Z ]表示a-z或者A-Z或者空格中的一个字符。

其实例代码如下:

<?php
$name = test_input($_POST["name"]);
if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
 $nameErr = "只允许字母和空格!";
}
?>

2、匹配E-mail

“/([\w-]+\@[\w-]+.[\w-]+)/”

“\w”匹配包括下划线的任何单词字符。等价于’[A-Za-z0-9_]’;

+匹配前面的子表达式一次或多次;

“-“匹配”-“。

3、匹配URL

“/\b(?:(?:https?|ftp):\/\/|www.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i”

保留表单中的值

在用户点击提交按钮后,为确保字段值是否输入正确,我们在HTML的input元素中插添加PHP脚本, 各字段名为: name, email, 和 website。 在评论的 textarea 字段中,我们将脚本放于 4750256ae76b6b9d804861d8f69e79d3 和 40587128eee8df8f03d0b607fe983014 标签之间。 PHP脚本输出值为: $name, $email, $website, 和 $comment 变量。 

例如如下的代码:

Name: <input type="text" name="name" value="<?php echo $name;?>">
E-mail: <input type="text" name="email" value="<?php echo $email;?>">
Website: <input type="text" name="website" value="<?php echo $website;?>">
Comment: <textarea name="comment" rows="5" cols="40"><?php echo $comment;?></textarea>

来一个PHP表单验证完整实例,其代码如下:

<!DOCTYPE HTML>
<html>
<head>
  <meta charset="utf-8">
  <title>form</title>
  <style>
    .error {color: #FF0000;}
  </style>
</head>
<body>
<?php
// 定义变量并默认设置为空值
$nameErr = $emailErr = $genderErr = $websiteErr = "";
$name = $email = $gender = $comment = $website = "";
if ($_SERVER["REQUEST_METHOD"] == "POST")
{
  if (empty($_POST["name"]))
  {
    $nameErr = "名字是必需的";
  }
  else
  {
    $name = test_input($_POST["name"]);
    // 检测名字是否只包含字母跟空格
    if (!preg_match("/^[a-zA-Z ]*$/",$name))
    {
      $nameErr = "只允许字母和空格";
    }
  }
  if (empty($_POST["email"]))
  {
    $emailErr = "邮箱是必需的";
  }
  else
  {
    $email = test_input($_POST["email"]);
    // 检测邮箱是否合法
    if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email))
    {
      $emailErr = "非法邮箱格式";
    }
  }
  if (empty($_POST["website"]))
  {
    $website = "";
  }
  else
  {
    $website = test_input($_POST["website"]);
    // 检测 URL 地址是否合法
    if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website))
    {
      $websiteErr = "非法的 URL 的地址";
    }
  }
  if (empty($_POST["comment"]))
  {
    $comment = "";
  }
  else
  {
    $comment = test_input($_POST["comment"]);
  }
  if (empty($_POST["gender"]))
  {
    $genderErr = "性别是必需的";
  }
  else
  {
    $gender = test_input($_POST["gender"]);
  }
}
function test_input($data)
{
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}
?>
<h2>PHP 表单验证实例</h2>
<p><span class="error">* 必需字段。</span></p>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
  名字: <input type="text" name="name" value="<?php echo $name;?>">
  <span class="error">* <?php echo $nameErr;?></span>
  <br><br>
  E-mail: <input type="text" name="email" value="<?php echo $email;?>">
  <span class="error">* <?php echo $emailErr;?></span>
  <br><br>
  网址: <input type="text" name="website" value="<?php echo $website;?>">
  <span class="error"><?php echo $websiteErr;?></span>
  <br><br>
  备注: <textarea name="comment" rows="5" cols="40"><?php echo $comment;?></textarea>
  <br><br>
  性别:
  <input type="radio" name="gender" <?php if (isset($gender) && $gender=="female") echo "checked";?>  value="female">女
  <input type="radio" name="gender" <?php if (isset($gender) && $gender=="male") echo "checked";?>  value="male">男
  <span class="error">* <?php echo $genderErr;?></span>
  <br><br>
  <input type="submit" name="submit" value="Submit">
</form>
<?php
echo "<h2>您输入的内容是:</h2>";
echo $name;
echo "<br>";
echo $email;
echo "<br>";
echo $website;
echo "<br>";
echo $comment;
echo "<br>";
echo $gender;
?>
</body>
</html>

以上这些将展示如何安全地处理 PHP 表单。对 HTML 表单数据进行适当的验证对于防范黑客和垃圾邮件很重要!

Atas ialah kandungan terperinci php表单的验证详解. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn