• php表单验证


    表单验证实例

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

    什么是 $_SERVER["PHP_SELF"] 变量?

    $_SERVER["PHP_SELF"]是超级全局变量,返回当前正在执行脚本的文件名,与 document root相关。

    什么是 htmlspecialchars()方法?

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

    预定义的字符是:

    • & (和号) 成为 &amp;
    • " (双引号) 成为 &quot;
    • ' (单引号) 成为 &#039;
    • < (小于) 成为 &lt;
    • > (大于) 成为 &gt;

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

    指定以下表单问文件名为:test_form.php

    <form method="post" action="<?php echo $_SERVER["PHP_SELF"];?>">
    

    现在,我们使用URL来指定提交地址 "test_form.php",以上代码修改为如下所示:

    <form method="post" action="test_form.php">
    

      

    这样做就很好了。

    但是,考虑到用户会在浏览器地址栏中输入以下地址:

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

    如何避免 $_SERVER["PHP_SELF"] 被利用?

    $_SERVER["PHP_SELF"] 可以通过 htmlspecialchars() 函数来避免被利用。

    form 代码如下所示:

    <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
    

    htmlspecialchars() 把一些预定义的字符转换为 HTML 实体。现在如果用户想利用 PHP_SELF 变量, 结果将输出如下所示:

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

    使用 PHP 验证表单数据

    首先我们对用户所有提交的数据都通过 PHP 的 htmlspecialchars() 函数处理。

    当我们使用 htmlspecialchars() 函数时,在用户尝试提交以下文本域:

    <script>location.href('http://www.runoob.com')</script>
    

    该代码将不会被执行,因为它会被保存为HTML转义代码,如下所示:

    &lt;script&gt;location.href('http://www.runoob.com')&lt;/script&gt;

    以上代码是安全的,可以正常在页面显示或者插入邮件中。

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

    1. 使用 PHP trim() 函数去除用户输入数据中不必要的字符 (如:空格,tab,换行)。
    2. 使用PHP stripslashes()函数去除用户输入数据中的反斜杠 ()

    接下来让我们将这些过滤的函数写在一个我们自己定义的函数中,这样可以大大提高代码的复用性。

    将函数命名为 test_input()。

    现在,我们可以通过test_input()函数来检测 $_POST 中的所有变量, 脚本代码如下所示:

    注意我们在执行以上脚本时,会通过$_SERVER["REQUEST_METHOD"]来检测表单是否被提交 。如果 REQUEST_METHOD 是 POST, 表单将被提交 - 数据将被验证。如果表单未提交将跳过验证并显示空白。

    在以上实例中使用输入项都是可选的,即使用户不输入任何数据也可以正常显示。



  • 相关阅读:
    053592
    053591
    053590
    053589
    053588
    053676
    C# WPF Border控件总结
    Android Studio 添加jar或aar依赖的两种方式
    javascript Date与string之间的转换
    C#:使用dsoframer.ocx控件实现内嵌office效果(详解)
  • 原文地址:https://www.cnblogs.com/shiyoushao/p/8080620.html
Copyright © 2020-2023  润新知