我有这个表单,我想检查用户是否选择了文件。
<form action="upload.php" method="POST" enctype="multipart/form-data" >
<select name="category">
<option value="cat1" name="cat1">Productfotografie</option>
<option value="cat2" name="cat2">Portretten</option>
<option value="cat3" name="cat3">Achitectuur</option>
</select>
<input type="file" name="file_upload">
<input type="submit" name="submit" value="Upload photo">
</form>
我写了这个PHP代码来测试它
if (empty($_POST) === false) {
$fileupload = $_POST['file_upload'];
if (empty($fileupload) === true) { //
echo "Error no file selected";
} else {
print_r($_FILES);
}
}
但我得到&#34;错误没有选择文件&#34;即使我选择了一些东西。任何线索?对不起,我是PHP的新手。
编辑:我已尝试替换$fileupload = $_FILES['file_upload']
,但会打印出一个空错误
(Array([file_upload] =&gt; Array([name] =&gt; [type] =&gt; [tmp_name] =&gt; [错误] =&gt; 4 [size] =&gt; 0)))
当我不输入文件时?
答案 0 :(得分:10)
使用$_FILES
数组和UPLOAD_ERR_NO_FILE
常量:
if(!isset($_FILES['file_upload']) || $_FILES['file_upload']['error'] == UPLOAD_ERR_NO_FILE) {
echo "Error no file selected";
} else {
print_r($_FILES);
}
您还可以查看UPLOAD_ERR_OK
,表明文件是否已成功上传(现在且没有错误)。
注意:您不能在empty()
数组上使用$_FILES['file_upoad']
,因为即使没有上传文件,仍会填充数组并设置error
元素,这意味着{{ 1}}将返回empty()
。
答案 1 :(得分:0)
首先,单击“提交而不选择文件”
/* check input 'submit' */
if (isset($_POST['submit'])) {
print($_FILES);
}
结果:
> Array ( > [file_upload] => Array > ( > [name] => > [type] => > [tmp_name] => > [error] => 4 > [size] => 0 > ) > > )
有 [file_upload] [error] = 4 的数组,非null或空格。
代码值= 4,表示UPLOAD_ERR_NO_FILE
如果成功且没有错误,则代码值= 0
检查here
因此使用函数 isset ,而不是为空
/* check input submit */
if (isset($_POST['submit'])) {
/* check input file_upload on error */
if (isset($_FILES['file_upload']['error'])) {
/* check code error = 4 for validate 'no file' */
if ($_FILES['file_upload']['error'] == 4) {
echo "Please select an image file ..";
}
}
}
答案 2 :(得分:-2)
根据http://www.php.net,自php 4.1.0起可以获得$ _FILES。此变量保存有关上载文件的信息。所以你应该编码
$fileupload = $_FILES['file_upload'];
if (isset($fileupload)) {
print_r($_FILES);
} else {
echo "Error no file selected";
}