• php表单的验证详解


    在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或者空格中的一个字符。

    其实例代码如下:

    1

    2

    3

    4

    5

    6

    <?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

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

    保留表单中的值

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

    例如如下的代码:

    1

    2

    3

    4

    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表单验证完整实例,其代码如下:

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    56

    57

    58

    59

    60

    61

    62

    63

    64

    65

    66

    67

    68

    69

    70

    71

    72

    73

    74

    75

    76

    77

    78

    79

    80

    81

    82

    83

    84

    85

    86

    87

    88

    89

    90

    91

    92

    93

    94

    95

    96

    97

    98

    99

    100

    101

    102

    103

    104

    105

    106

    107

    108

    109

    110

    111

    112

    113

    114

    115

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

  • 相关阅读:
    Html5页面返回机制解决方案
    Linux(Fedora)下NodeJs升级最新版本(制定版本)
    fedora23开发环境搭建手册
    fedora安装sublime text教程
    实现斐波那契数列之es5、es6
    选择城市下拉框中选择框右对齐,文本右对齐问题
    前端笔记(二)
    前端基础笔记(一)
    解决点击输入框弹出软键盘导致弹窗失效的问题
    angularJS之ng-bind与ng-bind-template的区别
  • 原文地址:https://www.cnblogs.com/furuihua/p/12134207.html
Copyright © 2020-2023  润新知