PHP(10)表单传值

一、传值方式

  • HTTP传输规则有六种:HEAD、GET、PUT、POST、DELETE、OPTIONS。

  • HTTP协议的传输规则

    传输规则描述
    HEAD通过发送HTTP请求来从服务器获取数据(不带任何数据,很少使用)
    GET与HEAD一样,但是GET通常是通过自身携带数据来获取服务器数据
    POST直接提交数据给服务器
    PUT指定服务器端存储位置来提交数据(HTML不支持)
    DELETE通过指定数据来删除服务器的数据(很少使用)
    OPTIONS获取URL所支持的方法(极少使用)
  • 传值方式通常使用 GET 和 POST 两种方式。

二、PHP接收表单数据

  • 在PHP中,提供了三种数据接收方式:
    • $_GET:接收用户 GET 方法提交的数据
    • $_POST:接收用户 POST 方法提交的数据
    • $_REQUEST:接收用户 GET 和 POST 提交的数据

1. $_GET

专用于接收 GET 方法提交的数据,是一个超全局预定义数组,表单名字作为数组下标,表单值作为数组元素值。

<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
</head>
<body>
<a href="index.php?k=123&v=456">GET 传值</a>
</body>
</html>
<?php

echo $_GET['k'];
echo $_GET['v'];

在这里插入图片描述

2. $_POST

专用于接收POST方式提交的数据,与 $_GET 形式一样

<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
</head>
<body>
<form action="index.php" method="post">
    key: <input type="text" name="k">
    value: <input type="text" name="v">
    <input type="submit" name="检索">
</form>
</body>
</html>
<?php

echo "key:" . $_POST['k'];
echo "value:" . $_POST['v'];

在这里插入图片描述

三、文件上传

  • 需要明确告知HTTP协议使用到了文件上传,这时候需要在表单form中使用属性 enctype,enctype 是关于表单内容处理的属性。
  • PHP接收:使用 $_FILES 来接受文件。
  • 文件上传后,在PHP端会保存文件的5个信息:
    • name:文件在客户端的文件名字
    • type:文件类型
    • tmp_name:文件在服务器端操作系统接收后保存的临时文件名
    • error:错误代码
    • size:文件大小(字节)

1. 文件上传函数封装

index.php

<?php
/*
 * @param1 array $file,要上传的文件信息,包含5个元素
 * @param2 string $path,存储位置
 * @param3 string $error,错误信息
 * @param4 array $type=array(),MIME类型限定
 * @param5 int $size = 2000000,默认2M
 * @return mixed,成功返回文件名字,失败返回false
 * */
function fileUpload($file, $path, &$error, $type = array(), $size = 2000000)
{
    // 文件本身是否有限
    if (!isset($file['error'])) {
        $error = '文件无效';
        return false;
    }
    // 路径是否有效
    if (!is_dir($path)) {
        $error = '存储路径无效';
        return false;
    }

    // 判断文件本身上传是否成功
    switch ($file['error']) {
        case 1:
        case 2:
            $error = '文件超过服务器允许大小';
            return false;
        case 3:
            $error = '文件只有部分成功';
            return false;
        case 4:
            $error = '用户没有选择要上传的文件';
            return false;
        case 6:
        case 7:
            $error = '服务器操作失败';
            return false;
    }

    // 判定类型是否符合
    if (!empty($type) && !is_array($file['type'], $type)) {
        $error = '当前上传的文件类型不符合';
        return false;
    }

    // 大小判定
    if ($file['size'] > $size) {
        $error = '文件大小超过当前允许范围,当权允许的大小是:' . (string)($size / 1000000) . "M";
        return false;
    }

    // 转存文件
    $newFileName = getNewName($file['name']);
    if (@move_uploaded_file($file['tmp_name'], $path . '' . $newFileName)) {
        return $newFileName;

    } else {
        $error = '文件上传失败';
        return false;
    }
}

function getNewName($filename, $rand = 6): string
{
    // 时间日期部分
    $newName = date('YmdHis');

    // 增加随机部分
    $old = array_merge(range('a', 'z'), range("A", "Z"));
    shuffle($old);
    for ($i = 0; $i < $rand; $i++) {
        $newName .= $old[$i];
    }
    return $newName . strstr($filename, '.');
}

// 调用文件上传
$file = $_FILES['file'];
$res = fileUpload($file, 'UPLOAD/', $error);
if ($res) {
    echo '文件上传成功';
} else {
    echo $error;
}

index.html

<html lang="zh-cn">
<head>
    <meta charset="UTF-8">
</head>
<body>
<form action="index.php" method="post" enctype="multipart/form-data">
    <input type="file" name="file" id="">
    <input type="submit" name="检索">
</form>
</body>
</html>

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

iFulling

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值