• 表单验证


    表单验证

    <!DOCTYPE HTML> 
    <html>
    <head>
    <meta charset="utf-8">
    <title>菜鸟教程(runoob.com)</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>
    

    首先让我们先看看纯HTML的表单代码分析:

    文本字段

    "名字", "E-mail", 及"网址"字段为文本输入元素,"备注"字段是 textarea。

    单选按钮

    "性别"字段是单选按钮

    表单元素

    HTML 表单代码如下所示:

    <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
    
    • 该表单使用 method="post" 方法来提交数据。 那么什么是 $_SERVER["PHP_SELF"] 变量?

    $_SERVER["PHP_SELF"]是超级全局变量,返回当前正在执行脚本的文件名,与 document root相关。 所以, $_SERVER["PHP_SELF"] 会发送表单数据到当前页面,而不是跳转到不同的页面。

    • 什么是 htmlspecialchars()方法?

    htmlspecialchars() 函数把一些预定义的字符转换为 HTML 实体。

    预定义的字符是:
    & (和号) 成为 &amp;
    " (双引号) 成为 &quot;
    ' (单引号) 成为 &#039;
    < (小于) 成为 &lt;
    > (大于) 成为 &gt;
    

    PHP表单中需引起注重的地方:

    • XSS又叫 CSS (Cross-Site Script) ,跨站脚本攻击。恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意用户的特殊目的。

    考虑到用户会在浏览器地址栏中输入以下地址:http://www.runoob.com/test_form.php/"><script>alert('hacked')</script> 以上的 URL 中,将被解析为如下代码并执行:

    <form method="post" action="test_form.php/"><script>alert('hacked')</script>
    

    请注意, 任何JavaScript代码可以添加在<script>标签中! 黑客可以利用这点重定向页面到另外一台服务器的页面上,页面 代码文件中可以保护恶意代码,代码可以修改全局变量或者获取用户的表单数据。

    • 可以通过 htmlspecialchars() 函数来避免被利用。 htmlspecialchars() 把一些预定义的字符转换为 HTML 实体。现在如果用户想利用 PHP_SELF 变量, 结果将输出如下所示:
    <form method="post" action="test_form.php/&quot;&gt;&lt;script&gt;alert('hacked')&lt;/script&gt;">
    

    尝试该漏洞失败!

    使用 PHP 验证表单数据

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

    1. 使用 PHP trim() 函数去除用户输入数据中不必要的字符 (如:空格,tab,换行)。
    2. 使用PHP stripslashes()函数去除用户输入数据中的反斜杠 ( ).
  • 相关阅读:
    Math app 2.0
    “口袋精灵”单元测试
    学习进度条
    本学期总结
    sprint2的总结及团队贡献分
    点餐系统Sprint1总结
    实验8
    实验7
    实验6
    实验五
  • 原文地址:https://www.cnblogs.com/sinceForever/p/7573823.html
Copyright © 2020-2023  润新知