• 企业400电话
  • 网络优化推广
  • AI电话机器人
  • 呼叫中心
  • 全 部 栏 目

    网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    实例讲解PHP表单
    POST TIME:2021-10-18 03:43

    表单处理

    GET vs. POST

    1  GET 和 POST 都创建数组(例如,array( key => value, key2 => value2, key3 => value3, ...))。此数组包含键/值对,其中的键是表单控件的名称,而值是来自用户的输入数据。

    2  GET 和 POST 被视作 $_GET 和 $_POST。它们是超全局变量,这意味着对它们的访问无需考虑作用域 - 无需任何特殊代码,您能够从任何函数、类或文件访问它们。

    3  传递方式

    $_GET 是通过 URL 参数传递到当前脚本的变量数组。
    $_POST 是通过 HTTP POST 传递到当前脚本的变量数组。

    (1)何时使用 GET?

    通过 GET 方法从表单发送的信息对任何人都是可见的(所有变量名和值都显示在 URL 中)。GET 对所发送信息的数量也有限制。限制在大约 2000 个字符。

    GET 可用于发送非敏感的数据。

    注释:绝不能使用 GET 来发送密码或其他敏感信息!

    (2)何时使用 POST?

    通过 POST 方法从表单发送的信息对其他人是不可见的(所有名称/值会被嵌入 HTTP 请求的主体中),并且对所发送信息的数量无限制。

    此外 POST 支持高阶功能,比如在向服务器上传文件时进行 multi-part 二进制输入。

    提示:开发者偏爱 POST 来发送表单数据。

    表单验证

    htmlspecialchars() 函数

    如果要将表单提交给页面本身,而不是跳转到另一张页面。这样,用户就能够在表单页面获得错误提示信息。

    表单的 HTML 代码是这样的:

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

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

    $_SERVER["PHP_SELF"] 是一种超全局变量,它返回当前执行脚本的文件名。
    因此,$_SERVER["PHP_SELF"] 将表单数据发送到页面本身,而不是跳转到另一张页面。这样,用户就能够在表单页面获得错误提示信息。

    (2)什么是 htmlspecialchars() 函数?

    htmlspecialchars() 函数把特殊字符转换为 HTML 实体。这意味着 和 > 之类的 HTML 字符会被替换为 lt; 和 gt; ,页面效果仍是 >。这样可防止攻击者通过在表单中注入 HTML 或 JavaScript 代码(跨站点脚本攻击)对代码进行利用。
    如果没有 htmlspecialchars() 函数

    hacker输入url:

    http://www.example.com/test_form.php/%22%3E%3Cscript%3Ealert('hacked')%3C/script%3E

    表单处则会转换为:

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

    典型反射xss

    表单检查函数:

    ?php
    // 定义变量并设置为空值
    $name = $email = $gender = $comment = $website = "";
    
    if ($_SERVER["REQUEST_METHOD"] == "POST") {
     $name = test_input($_POST["name"]);
     $email = test_input($_POST["email"]);
     $website = test_input($_POST["website"]);
     $comment = test_input($_POST["comment"]);
     $gender = test_input($_POST["gender"]);
    }
    
    function test_input($data) {
     $data = trim($data);
     $data = stripslashes($data);
     $data = htmlspecialchars($data);
     return $data;
    }
    ?>

    必填字段 验证 E-mail 和 URL

    1.验证名字

    以下代码展示的简单方法检查 name 字段是否包含字母和空格。如果 name 字段无效,则存储一条错误消息:

    $name = test_input($_POST["name"]);
    if (!preg_match("/^[a-zA-Z ]*$/",$name)) {
     $nameErr = "只允许字母和空格!"; 
    }

    2.验证 E-mail

    以下代码展示的简单方法检查 e-mail 地址语法是否有效。如果无效则存储一条错误消息:

    $email = test_input($_POST["email"]);
    if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email)) {
     $emailErr = "无效的 email 格式!"; 
    }

    3.验证 URL

    以下代码展示的方法检查 URL 地址语法是否有效(这条正则表达式同时允许 URL 中的斜杠)。如果 URL 地址语法无效,则存储一条错误消息:

    $website = test_input($_POST["website"]);
    if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+@#\/%?=~_|!:,.;]*[-a-z0-9+@#\/%
    =~_|]/i",$website)) {
     $websiteErr = "无效的 URL"; 
    }

    完成表单实例

    !DOCTYPE HTML> 
    html>
    head>
    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 = "无效的 email 格式"; 
     }
     }
     
     if (empty($_POST["website"])) {
     $website = "";
     } else {
     $website = test_input($_POST["website"]);
     // 检查 URL 地址语法是否有效(正则表达式也允许 URL 中的斜杠)
     if (!preg_match("/\b(?:(?: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">
     span class="error">* ?php echo $nameErr;?>/span>
     br>br>
     电邮:input type="text" name="email">
     span class="error">* ?php echo $emailErr;?>/span>
     br>br>
     网址:input type="text" name="website">
     span class="error">?php echo $websiteErr;?>/span>
     br>br>
     评论:textarea name="comment" rows="5" cols="40">

    以上就是PHP表单相关知识总结的详细内容,更多关于PHP表单的资料请关注脚本之家其它相关文章!

    您可能感兴趣的文章:
    • 实例讲解PHP表单验证功能
    • 实例讲解PHP表单处理
    • php防止表单重复提交实例讲解
    • php 提交表单 关闭layer弹窗iframe的实例讲解
    • ThinkPHP防止重复提交表单的方法实例分析
    • thinkPHP5 ajax提交表单操作实例分析
    • PHP用正则匹配form表单中所有元素的类型和属性值实例代码
    • 微信小程序 PHP后端form表单提交实例详解
    上一篇:如何在PHP中使用数组
    下一篇:详解php反序列化
  • 相关文章
  • 

    关于我们 | 付款方式 | 荣誉资质 | 业务提交 | 代理合作


    © 2016-2020 巨人网络通讯

    时间:9:00-21:00 (节假日不休)

    地址:江苏信息产业基地11号楼四层

    《增值电信业务经营许可证》 苏B2-20120278

    X

    截屏,微信识别二维码

    微信号:veteran88

    (点击微信号复制,添加好友)

     打开微信