Home  >  Article  >  Backend Development  >  Detailed explanation of php form verification

Detailed explanation of php form verification

伊谢尔伦
伊谢尔伦Original
2017-04-21 14:44:073722browse

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 表单数据进行适当的验证对于防范黑客和垃圾邮件很重要!

The above is the detailed content of Detailed explanation of php form verification. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn