通常表单的提交是通过POST方式,表单提交的数据分为两种,一种是普通的文本数据,一种是上传的文件.在php中,普通的表单数据通过$_POST可以获取到;文件则通过$_FILES获取.看一下下面的案例:
<?php
function dealData () {
echo '<pre>';
var_dump($_FILES);
var_dump($_POST);
echo '</pre>';
}
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
dealData();
}
?>
<!DOCTYPE html>
<html>
<head>
<title>form test</title>
</head>
<body>
<form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post" style="line-height: 30px;" enctype="multipart/form-data">
<label for="name">姓 名:</label>
<input type="text" name="name" id="name" placeholder="请输入姓名"><br />
<label>性 别:</label>
<input type="radio" name="sex" value="男">男
<input type="radio" name="sex" value="女">女<br />
<label>爱 好:</label>
<input type="checkbox" name="interest[]" value="篮球">篮球
<input type="checkbox" name="interest[]" value="足球">足球
<input type="checkbox" name="interest[]" value="乒乓球">乒乓球<br />
<label for="file">单个文件:</label>
<input type="file" name="file" id="file"><br />
<label for="files">多个文件:</label>
<input type="file" name="files[]" id="files" multiple><br />
<input type="submit" value="提 交">
</form>
</body>
</html>
提交的数据:
打印结果:
array(2) { ["file"]=> array(5) { ["name"]=> string(20) "DYTool_201905310.exe" ["type"]=> string(24) "application/x-msdownload" ["tmp_name"]=> string(27) "C:\Windows\Temp\phpCA8F.tmp" ["error"]=> int(0) ["size"]=> int(73863128) } ["files"]=> array(5) { ["name"]=> array(2) { [0]=> string(20) "DYTool_201905310.exe" [1]=> string(19) "xunyou_20190610.exe" } ["type"]=> array(2) { [0]=> string(24) "application/x-msdownload" [1]=> string(24) "application/x-msdownload" } ["tmp_name"]=> array(2) { [0]=> string(27) "C:\Windows\Temp\phpCC64.tmp" [1]=> string(27) "C:\Windows\Temp\phpCE1A.tmp" } ["error"]=> array(2) { [0]=> int(0) [1]=> int(0) } ["size"]=> array(2) { [0]=> int(73863128) [1]=> int(33236704) } } } array(3) { ["name"]=> string(12) "小李飞刀" ["sex"]=> string(3) "男" ["interest"]=> array(3) { [0]=> string(6) "篮球" [1]=> string(6) "足球" [2]=> string(9) "乒乓球" } }
案例中的表单包括的input组件类型有text,radio,checkbox,file,其中的text,radio和checkbox提交的数据在$_POST之中可以通过组件的name为键获取到他们的value值,需要注意的是,类似checkbox这种多选的组件时,组件的name属性值需要加[]表示他们是一个数组.
表单中的file组件选择的文件在$_FILES中获取到,文件上传需要通过POST方式,并且设置表单的enctype为multipart/form-data,文件数据分两种情况:单文件和多文件.当为多选文件的组件时,同样需要在name值后面添加[].
$_FILES中的文件数据有5个属性:name,type,tmp_name,error,size.
name为文件的名字,type为文件的MIME Type,tmp_name为文件的临时存放目录,error为错误码,0代表成功,size为文件的大小.
当上传成功后,需要通过php中的move_uploaded_file函数把文件从tem_name临时路径移动到需要存放的目录中.
当为多选文件时,每个属性都是数组类型,依次存放着各个文件的信息;当为单选文件时,属性值为字符串类型,为所选文件对应的信息.