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

  • 相关阅读:
    021.day21 反射 Class类 反射常用操作
    020.day20 线程概述 多线程优缺点 线程的创建 线程常用方法 生命周期 多线程同步
    019.day19 缓冲流 对象流 标准输入输出流
    018.day18 map集合如何实现排序 File类 IO流 字节流 字符流 编码
    017.day17 Map接口 克隆 treeSet集合排重缺陷
    016.day16 HashSet TreeSet 比较器Comparable Comparator
    015.day15
    014.day14
    013.day13
    线程
  • 原文地址:https://www.cnblogs.com/furuihua/p/12134207.html
Copyright © 2011-2022 走看看