PHP(10)表单传值

PHP(10)表单传值

  • 一、传值方式
  • 二、PHP接收表单数据
    • 1. $_GET
    • 2. $_POST
  • 三、文件上传
    • 1. 文件上传函数封装

一、传值方式

  • 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>


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

PHP(10)表单传值_第1张图片

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>


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

PHP(10)表单传值_第2张图片

三、文件上传

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

1. 文件上传函数封装

index.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>

你可能感兴趣的:(PHP,1024程序员节,php,开发语言)