zoukankan      html  css  js  c++  java
  • php中的form表单

    表单处理

      表单的概念在生活中很常见,就像是问卷调查表一样,别人先把问卷发给你,你照着问卷的要求填写,完事过后再将填完的问卷发给别人,从而达到一个将别人需要的信息传递给别人的一种方式。
      传统的网页大多数的作用都是展示数据,就是将信息传递给用户。而在现代化的 Web 开发中,非常注重信息交互,所以表单也随处可见,只是形式上变成网页,性质上还是一模一样的。主要的作用任然是 收集指定的用户信息。

    1.表单的基本使用

    HTML 中有一个专门用于提交数据的标签: <form> ,通过这个标签可以很容易的收集用户输入.

    form 标签有两个必要属性:
      action:表单提交地址(填完了,交给谁)
      method:表单以什么方式提交

    例如,我们需要在登录界面上收集用户输入的用户名和密码:

    <!DOCTYPE html>
    <html lang="en">
    <head>
      <meta charset="UTF‐8">
      <title>登录</title>
    </head>
    <body>
      <form action="login.php" method="post">
        <div>
          <label for="username">用户名</label>
          <input type="text" id="username" name="username">
        </div>
        <div>
          <label for="password">密码</label>
          <input type="password" id="password" name="password">
        </div>
        <button type="submit">登录</button>
      </form>
    </body>
    </html>

    按照目前的情况,用户第一次请求得到这个表单页面,填写完表单内容,点击登录,表单会自动发送到login.php ,剩下的问题就是要考虑如何在 login.php 中获取到用户提交过来的内容.

    PHP 中有三个超全局变量专门用来获取表单提交内容:
        $_GET :用于获取以 GET 方式提交的内容
        $_POST :用于获取以 POST 方式提交的内容
        $_REQUEST :用于获取 GET 或 POST 方式提交的内容

    借助  $_POST 或者  $_REQUEST 就可以获取到表单提交的内容:

    <?php
    // 获取表单提交的用户名和密码
    echo '用户名:' . $_REQUEST['username'];
    echo '密码:' . $_REQUEST['password'];

    1.1.  提交地址

      action 提交地址指的是这个表单填写完成过后点击提交,发送请求的请求地址是什么。
      从便于维护的角度考虑,一般我们最常见的都是提交给当前文件,然后在当前文件中判断是否是表单提交请求:

    <?php
    if ($_SERVER['REQUEST_METHOD'] === 'POST') {
      // 表单提交请求
    }

    另外,建议使用 $_SERVER['PHP_SELF'] 动态获取当前页面访问路径,这样就不用因为文件重命名或者网站目录结构调整而修改代码了:

    <!‐‐ 这样写死 action 地址,当文件重命名就需要修改代码 ‐‐>
    <form action="/foo/login.php">
      <!‐‐ ... ‐‐>
    </form>
    <!‐‐ 通过 `$_SERVER['PHP_SELF']` 获取路径,可以轻松避免这个问题 ‐‐>
    <form action="<?php echo $_SERVER['PHP_SELF']; ?>">
      <!‐‐ ... ‐‐>
    </form>

    1.2.  提交方式

    method 可以用于设置表单提交的方式,目前我们所认识的就是最常见两种表单提交方式: GET 和 POST 。
      从效果上来看,两者都可以将数据提交到服务端,但是从实现提交的原理上两者有很大的不同:
    GET
      表单数据是通过 URL 中的 ? 参数传递到服务端的
      可以在地址栏中看到提交的内容
      数据长度有限制,因为 URL 地址长度有限(2000个字符)
    POST
      表单数据是通过请求体传递到服务端的,我们在界面上看不到
      可以提交任何类型的数据,包括文件
      由于界面上看不见,浏览器也不储存,所以更安全
      至于什么情况下应该选用哪种方式,这个需要结合业务场景和这两种方式各自的特点来决定,没有绝对的答案,只能给出一些原则:
      绝不能使用 GET 来发送密码或其他敏感信息!!!
      应该想清楚这次请求到底主要是去拿东西,还是去送东西

    2.  常见表单元素处理

    至于表单元素中的文本框文本域一类的元素,都是直接将元素的 name 属性值作为键,用户填写的信息作为值,发送到服务端。但是表单元素中还有一些比较特殊的表单元素需要单独考虑:

    2.1.  单选按钮

    <!‐‐ 最终只会提交选中的那一项的 value ‐‐>
    <input type="radio" name="gender" value="male">
    <input type="radio" name="gender" value="female">

    2.2.  复选按钮

    <!‐‐ 没有设置 value 的 checkbox 选中提交的 value 是 on ‐‐>
    <input type="checkbox" name="agree">
    <!‐‐ 设置了 value 的 checkbox 选中提交的是 value 值 ‐‐>
    <input type="checkbox" name="agree" value="true">

    如果需要同时提交多个选中项,可以在  name 属性后面 跟上  [] :

    https://php.net/manual/zh/faq.html.php#faq.html.arrays

    <input type="checkbox" name="funs[]" id="" value="football">
    <input type="checkbox" name="funs[]" id="" value="basketball">
    <input type="checkbox" name="funs[]" id="" value="world peace">

    最终提交到服务端,通过  $_POST 接收到的是一个索引数组.

    2.3.  选择框

    <select name="subject">
      <!‐‐ 设置 value 提交 value ‐‐>
      <option value="1">语文</option>
      <!‐‐ 没有设置 value 提交 innerText ‐‐>
      <option>数学</option>
    </select>

    2.3.  文件上传

    type 属性为 file 的 input 元素可以通过表单提交文件(上传文件),服务端 PHP 可以通过 $_FILES 获取上传的文件信息。

    <?php
    // 如果选择了文件 $_FILES['file']['error'] => 0
    // 详细的错误码说明:http://php.net/manual/zh/features.file‐upload.errors.php
    if ($_FILES['file']['error'] === 0) {
      // PHP 在会自动接收客户端上传的文件到一个临时的目录
      $temp_file = $_FILES['file']['tmp_name'];
      // 我们只需要把文件保存到我们指定上传目录
      $target_file = '../static/uploads/' . $_FILES['file']['name'];
      if (move_uploaded_file($temp_file$target_file)) {
        $image_file = '/static/uploads/' . $_FILES['file']['name'];
      }
    }

    $_FILES 同样也是一个关联数组,键为表单的  name ,内容如下:

    array(1) {
      ["avatar"]=>
      array(5) {
        ["name"]=>
        string(17) "demo.jpg"
        ["type"]=>
        string(10) "image/jpeg"
        ["tmp_name"]=>
        string(27) "C:WindowsTempphp786C.tmp"
        ["error"]=>
        int(0)
        ["size"]=>
        int(29501)
      }
    }
  • 相关阅读:
    php 不依赖数据实现删除图片,核心代码
    php插入htm htm插入php的变量
    php 删除指定文件 glob,unlink
    glob函数 循环遍历子目录下的文件
    对函数及递归的通俗理解
    glob 遍历函数
    修改 ueditor1_4_3-utf8-php 它的图片上传地址
    thinkphp 自动跟新时间
    用Hadoop构建电影推荐系统
    Hive导入10G数据的测试
  • 原文地址:https://www.cnblogs.com/wjw9/p/10962998.html
Copyright © 2011-2022 走看看