(初探PHP)三:php中的请求方式GET,POST...

请求在网站的访问过程中很常见,并且请求分为多种方式:GET、POST、PUT、DELETE、OPTIONS等。其中GET和POST最常用。

什么是GET请求?

    GET从字面上理解为'获取',通常用于获取服务端的数据。

常见发起GET请求的方式:

     地址栏访问

      src/href

       表单   

网页中有很多效果都是GET请求: 各种搜索框,各种详情页面,大部分超链接

GET方式提交数据的格式

    1. 格式:index.phpuserName=jack&password=123
    2. 参数名与参数值之间没有空格

    3. 参数值不需要使用单双引号包括

GET方式提交数据的特点

    1. get方式在url后面拼接参数,只能以文本的形式传递数据
    2. 传递的数据量小,4KB左右(不同浏览器会有差异)
    3. 安全性低,会将数据显示在地址栏

    4. 速度快,通常用于对安全性要求不高的请求

什么是POST请求?

面上理解,post就是指发送,提交,它可以向指定的资源提交要被处理的数据

为什么需要POST请求?

    GET方式提交数据通过URL传递到请求的页面,提交的数据量一般较小,用于请求页面数据。此外,GET方式传递的数据安全性低, 对于密码等隐私信息、文件上传必须使用POST方式提交。

    如果使用表单方式进行提交,表单的method必须设置为POST。

POST提交方式的特点:

    1-post 方式 安全性比较高

    2-传递数据量大,请求对数据长度没有要求

    3-请求不会被缓存,也不会保留在浏览器历史记录中

       用于:密码等安全性要求比较高的场合,提交的数据量比较大:发布文章,上传文件。

       POST方式提交数据上限默认为8M(可以在PHP的配置文件post_max_size选项中修改)

表单的基本使用

    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 方式提交的内容,更标准的说法:接收 URL 地址问号参数中的数据
    $_POST:用于获取以 POST 方式提交的内容,更标准的说法:接收 请求体 中的数据
    $_REQUEST:用于获取 GET 或 POST 方式提交的内容

 

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

 

提交地址

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

常见表单元素处理

<!-- 1.单选按钮 -->
<!-- 最终只会提交选中的那一项的 value -->
<input type="radio" name="gender" value="male">
<input type="radio" name="gender" value="female">

<!-- 2.复选按钮 -->
<!-- 没有设置 value 的 checkbox 选中提交的 value 是 on -->
<input type="checkbox" name="agree">
<!-- 设置了 value 的 checkbox 选中提交的是 value 值 -->
<input type="checkbox" name="agree" value="true">

<!-- 如果需要同时提交多个选中项,可以在 name 属性后面 跟上 []: -->
<input type="checkbox" name="funs[]" value="football">
<input type="checkbox" name="funs[]" value="basketball">
<input type="checkbox" name="funs[]" value="world peace">

<!-- 3.下拉列表 -->
<select name="subject">
  <!-- 设置 value 提交 value -->
  <option value="1">语文</option>
  <!-- 没有设置 value 提交 innerText -->
  <option>数学</option>
</select>

$_FILES数组详解

$_FILES也是一个关联数组,键为表单的 name

<?php
array(1) {
  ["avatar"]=>
  array(5) {
    ["name"]=>
    string(17) "demo.jpg"
    ["type"]=>
    string(10) "image/jpeg"
    ["tmp_name"]=>
    string(27) "C:\Windows\Temp\php786C.tmp"
    ["error"]=>
    int(0)
    ["size"]=>
    int(29501)
  }
}
?>

文件上传后,文件信息自动保存在预定义变量$_FILES数组中。假设myFile为文件域的name属性值。

1)  $_FILES[‘myFile’][‘name’] 文件的原始名称。
2)   $_FILES[‘myFile’][‘tmp_name’] 文件的临时路径,默认为c:/windows/temp(运行窗口—>temp)。没有直接将文件上传至Apache服务器的根目录
3)   $_FILES[‘myFile’][‘type’] 文件的内容类型。
常见的文件类型: image/jpeg,image/png,image/gif,text/html,text/javascript
4)  $_FILES[‘myFile’]’‘error’] 文件上传的错误代号。0代表没有发生错误。

5)   $_FILES[‘myFile’]‘size’] 文件大小(单位为byte,字节)

 

文件上传的完整步骤

    1. 设计表单
    2. 接收数据:判断$_FILES是否为空
    3. 判断错误:$_FILES‘myFile’.出错提示错误信息

 

    4. 此时文件在临时路径,如果需要将上传后的文件移动到某个指定位置,需要使用move_uploaded_file()函数移动到网站永久 路径:move_upload_file(临时路径$_FILES‘myFile’,永久路径);   

<?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'];
  }
}
  •  
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值