03-php之表单

表单传值:即浏览器通过表单元素将用户选择或输入的数据传给后台服务器

表单传值

get 传值

1. form表单的形式

<?php
<form method="get">表单元素</form>

2. a标签

<a href="XXX/index.php?name=php"></a>

3. location对象的href属性

// js语句

location.href='XXX/index.php?name=php';

4. location对象的assign()方法

// js语句

location.assign('XXX/index.php?name=php');

post 传值

只有一种 form表单的形式

<?php
<form method="post">表单元素</form>

get传值和post传值的区别

1、 get传输的数据通常是用来获取数据,不改变服务器上的资源:一般是查询数据

2、 post传输的数据通常是用来增加、修改数据,会改变服务器上的资源

3、 post只有form表单一种传输方式,而get可以有form表单和a标签等多种方式

4、 get传输的数据可以在url中对外可见,post不可见
get传值在浏览器地址栏中的表现:?字段名=数值&字段名=数值...

5、get和post可以传输的数据大小不同:get为2k,post理论上无上限
实际上,get和post本身是没有数据长度限制的,一般是浏览器厂家做的限制

6、 get和post传输数据的格式不一样:get传输简单数据:数值或字符串,post传输复杂数据

表单接收数据

PHP 超全局变量主要通过 $_GET$_POST$_request 接收表单数据
$_GET : 接收get方式提交的数据

$_POST : 接收post方式提交的数据

$_REQUEST: 接收GET或POST方式提交的数据:将GET和POST提交的数据合并到了一个数组里面,所以可以同时接收GET和POST提交的数据

如果GET和POST提交的数据中有同名的数组元素,那么post会覆盖get

GET和POST

GET

  • 通过 GET 方法从表单发送的信息对任何人都是可见的(所有变量名和值都显示在 URL 中)
  • GET 对所发送信息的数量也有限制。限制在大约 2000 个字符。不过,由于变量显示在 URL 中,把页面添加到书签中也更为方便。
  • GET 可用于发送非敏感的数据。
  • 绝不能使用 GET 来发送密码或其他敏感信息!

POST

  • 通过 POST 方法从表单发送的信息对其他人是不可见的(所有名称/值会被嵌入 HTTP 请求的主体中),并且对所发送信息的数量也无限制。
  • POST 支持高阶功能,比如在向服务器上传文件时进行 multi-part 二进制输入。
  • 不过,由于变量未显示在 URL 中,也就无法将页面添加到书签。

GET 和 POST区别与联系

  • GET 和 POST 都创建数组(例如,array( key => value, key2 => value2, key3 => value3, ...))。此数组包含键/值对,其中的键是表单控件的名称,而值是来自用户的输入数据。
  • GET 和 POST 被视作 $_GET$_POST。它们是超全局变量,这意味着对它们的访问无需考虑作用域 - 无需任何特殊代码,您能够从任何函数、类或文件访问它们。
  • $_GET 是通过 URL 参数传递到当前脚本的变量数组。
  • $_POST 是通过 HTTP POST 传递到当前脚本的变量数组。

一个应用:提交数据、接收数据

1. 表单数据提交

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <title>表单get和post提交数据</title>
    <style type="text/css">
      .formAction {
        width: 600px;
        margin: 30px auto;
      }

      .formAction .perItem {
        overflow: hidden;
        width: 100%;
        margin: 20px 0px;
      }

      .formAction .perItem .tag {
        float: left;
      }

      .formAction .perItem input {
        float: left;
      }

      .perRadio,
      .perCheckbox {
        margin-right: 36px;
        overflow: hidden;
        float: left;
      }

      .perRadio input[type='radio'],
      .perCheckbox input[type='checkbox'] {
        float: left;
      }

      .perRadio span,
      .perCheckbox span {
        float: left;
      }
    </style>
  </head>

  <body>
    <div class="formAction">
      <!--默认是get模式-->
      <!--action 属性值为空表示提交到当前脚本-->
      <!-- 表单元素必须要有name属性,才可以被接收 -->
      <form action="index.php" method="post">
        <div class="perItem">
          <div class="tag">姓名:</div>
          <input type="text" name="userName" />
        </div>
        <div class="perItem">
          <div class="tag">年龄:</div>
          <input type="text" name="age" />
        </div>
        <div class="perItem">
          <div class="tag">站点:</div>
          <select name="site" id="site">
            <option value="">选择一个站点:</option>
            <option value="RUNOOB">Runoob</option>
            <option value="GOOGLE">Google</option>
            <option value="TAOBAO">Taobao</option>
          </select>
        </div>
        <div class="perItem">
          <div class="tag">多个站点:</div>
          <!--下拉菜单是多选的( multiple="multiple"),我们可以通过将设置 select name="q[]" 以数组的方式获取-->
          <select multiple="multiple" name="siteMore[]" id="siteMore">
            <option value="">选择多个站点:</option>
            <option value="RUNOOB">Runoob</option>
            <option value="GOOGLE">Google</option>
            <option value="TAOBAO">Taobao</option>
          </select>
        </div>
        <div class="perItem">
          <div class="tag">单选复选框站点</div>
          <!--单选按钮radio name属性必须设置相同-->
          <div class="perRadio">
            <input checked type="radio" name="radioSite" value="RUNOOB" />
            <span>Runoob</span>
          </div>
          <div class="perRadio">
            <input type="radio" name="radioSite" value="GOOGLE" />
            <span>Google</span>
          </div>
          <div class="perRadio">
            <input type="radio" name="radioSite" value="TAOBAO" />
            <span>Taobao</span>
          </div>
        </div>
        <div class="perItem">
          <div class="tag">多选复选框站点:</div>
          <!--复选框checkbox  name属性必须是数组-->
          <div class="perCheckbox">
            <!-- checked 默认选中 -->
            <input checked type="checkbox" name="checkboxSite[]" value="RUNOOB" />
            <span>Runoob</span>
          </div>
          <div class="perCheckbox">
            <input type="checkbox" name="checkboxSite[]" value="GOOGLE" />
            <span>Google</span>
          </div>
          <div class="perCheckbox">
            <input type="checkbox" name="checkboxSite[]" value="TAOBAO" />
            <span>Taobao</span>
          </div>
        </div>

        <button type="submit">提交</button>
        <button type="reset">清空</button>
      </form>
    </div>
  </body>
</html>

2. 接收表单数据

<?php
// 接收数据
//姓名(input)
echo '姓名:' . $_POST['userName'] . '<br>';
//年龄(input)
echo '年龄:' . $_POST['age'] . '<br>';

// 下拉框单选:站点
$site = isset($_POST['site']) ? $_POST['site'] : '';
echo '下拉框选择的值:'.convertSite($site);

// 下拉框多选:多个站点
$siteMore = isset($_POST['siteMore']) ? $_POST['siteMore'] : '';
if (is_array($siteMore)) {
    $siteArray = array(
        'RUNOOB' => '菜鸟教程: http://www.runoob.com',
        'GOOGLE' => 'Google 搜索: http://www.google.com',
        'TAOBAO' => '淘宝: http://www.taobao.com',
    );
    $desc = '多个站点:';
    foreach ($siteMore as $item) {
        echo $desc . $siteArray[$item] . '<br>';
    }
}

// 单选站点(单选按钮)
$radioSite = isset($_POST['radioSite']) ? $_POST['radioSite'] : '';
if ($radioSite) {
    echo '单选按钮站点:' . convertSite($radioSite);
}

function convertSite($name)
{
    if ($name == 'RUNOOB') {
        return '菜鸟教程--http://www.runoob.com' . '<br>';
    } else if ($name == 'GOOGLE') {
        return 'Google--http://www.google.com' . '<br>';
    } else if ($name == 'TAOBAO') {
        return '淘宝--http://www.taobao.com' . '<br>';
    }
}

// 复选框 多选
$CheckBoxSite = isset($_POST['checkboxSite']) ? $_POST['checkboxSite'] : '';
echo '复选框 多选:一个数组';
print_r($CheckBoxSite);

posted @ 2023-10-09 17:50  songxia777  阅读(16)  评论(0编辑  收藏  举报