博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

表单和用户输入

Posted on 2016-11-11 05:37  简单是书  阅读(87)  评论(0编辑  收藏  举报

记住:php代码嵌入到html文件中,文件只有保存为php格式才能在服务端正常运行。如果在客户端运行,浏览器只能识别html代码,不能识别php代码。再简单一点来说,服务器端能执行php文件中的html代码,不能执行html文件中的php代码。客户端只会执行html代码,无论文件保存为什么格式。

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
action将数据提交到一个php文件处理。
$_SERVER["PHP_SELF"]  返回当前正在执行脚本的文件名。
htmlspecialchars()方法?  把一些预定义的字符转换成实体。  
避免$_SERVER["PHP_SELF"] 被黑客利用。  
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
    <title>表单验证</title>
</head>
<body>
<?php 
     $name=$email=$address="";
     $nameErr=$emailErr=$addressErr="";
     if ($_SERVER["REQUEST_METHOD"]=="POST") {
        if (empty($_POST["name"])) {//注意empty()函数的运用。
                $nameErr="名字是必须的";
        }else{
            $name = test_input($_POST["name"]);
            if (!preg_match("/^[a-zA-Z ]*$/",$name)) {//这里使用preg_match();
                $nameErr = "只允许字母和空格";
            }
        }

        if (empty($_POST["email"])) {
            $emailErr="邮箱是必须的";
        } else {
            $email = test_input($_POST["email"]);
            if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email))
        {
            $emailErr = "非法邮箱格式"; 
        }
        }
        if (empty($_POST["address"])) {
            $addressErr = "";
        }else{

        $address = test_input($_POST["address"]);
        if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$address)) {
            $addressErr = "网址格式不匹配";
             }
        }

     }
    function test_input($data)//该函数主要用来检测数据,避免黑客攻击。
{
    $data = trim($data);//trim()函数用于去除用户输入 数据不必要的字符如空格、tab、换行。  
    $data = stripslashes($data);//去除用户数据中的反斜杠。
    $data = htmlspecialchars($data);
    return $data;
}

 ?>
    <form method="POST" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]) ?>">
    <h2>表单验证实例</h2>
    <p style="color: red">*必须字段。</p>
    名字:<input type="text" name="name" value="<?php echo $name;?>">
    <span class="error">* <?php echo $nameErr;?></span>
    <br><br>
    Email:<input type="text" name="email" value="<?php echo $email?>">
    <span>*<?php echo  $emailErr?></span>
    <br><br>
    网址:<input type="text" name="address">
    <span><?php echo $addressErr; ?></span><br><br>            
    备注:<input type="textarea" style="width: 300px;height: 50px" name="textarea"><br><br>
    性别:<input type="radio" name="gender">女
          <input type="radio" name="gender">男
          <br><br>
    <input type="submit" name="submit">

    </form>
    <?php 
    echo "<h2>您输入的内容是:</h2>";
    echo $name;
    echo "<br>.<br>";
    echo $email;
    echo "<br>.<br>";
    echo $addressErr;

     ?>

</body>
</html>

二、GET_POST

在 HTML 表单中使用 method=”get” 时,所有的变量名和值都会显示在 URL 中。所以在发送密码或其他敏感信息时,不应该使用这个方法!
预定义的 $_POST 变量用于收集来自 method=”post” 的表单中的值。

从带有 POST 方法的表单发送的信息,对任何人都是不可见的(不会显示在浏览器的地址栏),并且对发送信息的量也没有限制。
注释:然而,默认情况下,POST 方法的发送信息的量最大值为 8 MB(可通过设置 php.ini 文件中的 post_max_size 进行更改)

三、PHP $_REQUEST 变量

SERVER[REQUESTMETHOD]==POSTPOST._REQUEST 变量包含了 GET_POST 和 $_COOKIE 的内容,可用来收集通过 GET 和 POST 方法发送的表单数据。.

欢迎 <?php echo $_REQUEST["fname"]; ?>!<br>//直接获取信息,无论是通过 $_GET还是$_POST传递的讯息。
你的年龄是 <?php echo $_REQUEST["age"]; ?> 岁。