• 技术文章 >后端开发 >php教程

    php表单的验证详解

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

    首先我们对用户所有提交的数据都通过 PHP 的 htmlspecialchars() 函数处理。把特殊字符转换为 HTML 实体。这意味着 < 和 > 之类的 HTML 字符会被替换为 &lt; 和 &gt; 。这样可防止攻击者通过在表单中注入 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 字段中,我们将脚本放于 <textarea> 和 </textarea> 标签之间。 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 表单数据进行适当的验证对于防范黑客和垃圾邮件很重要!

    php入门到就业线上直播课:查看学习

    以上就是php表单的验证详解的详细内容,更多请关注php中文网其它相关文章!

    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。

    前端(VUE)零基础到就业课程:点击学习

    清晰的学习路线+老师随时辅导答疑

    自己动手写 PHP MVC 框架:点击学习

    快速了解MVC架构、了解框架底层运行原理

    专题推荐:php,表单,验证
    上一篇:php防止表单重复提交详解 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • ❤️‍🔥共22门课程,总价3725元,会员免费学• ❤️‍🔥接口自动化测试不想写代码?• 请教QQ互联的代码是如何写的? • 关于网下商城是用伪静态好?还是生成静态好 • 没有上载的分数了,vip次数也用完了啊 • PHP登录跳转,该怎么处理 • 注册信息添加到数据库,该怎么处理
    1/1

    PHP中文网