如果表单中没有选择文件,如何签入php

如果表单中没有选择文件,如何签入php,php,jquery,ajax,file,Php,Jquery,Ajax,File,我使用jqueryajax将表单中的数据发送到php文件。 我想检查用户是否至少选择了一个文件。 这是我的附件文件表格的一部分: <input type="file" class="form-control-file" name="user_attachment[]" multiple="multiple"> 如果未选择任何文件,则要签入contact.php: $user_attachment_tmp

我使用jqueryajax将表单中的数据发送到php文件。 我想检查用户是否至少选择了一个文件。 这是我的附件文件表格的一部分:

<input type="file" class="form-control-file" name="user_attachment[]" multiple="multiple">
如果未选择任何文件,则要签入contact.php

$user_attachment_tmp = $_FILES['user_attachment']['tmp_name'];
$user_attachment = $_FILES['user_attachment']['name'];

// several checks if no file is chosen
if( empty($_FILES['user_attachment']['name']) ) {
    echo 'no file chosen'; // fails when nothing is chosen
}

if(!isset($_FILES['user_attachment']) || $_FILES['user_attachment']['error'] == UPLOAD_ERR_NO_FILE) {
    echo 'no file chosen'; // fails when nothing is chosen
}

if(!file_exists($_FILES['user_attachment']['tmp_name']) || !is_uploaded_file($_FILES['user_attachment']['tmp_name'])) {
    echo 'no file chosen'; // fails when nothing is chosen
}

所以问题是:在每种情况下,当没有选择任何文件时,我都不会收到消息
no file selected


那么,我如何检查是否未选择任何文件(以表单形式附加)?

因为
用户\u附件[]
是一个数组,您可以使用
count()
函数轻松检查

$count = count($_FILES['user_attachment']['name']);
for ($i = 0; $i < $count; $i++) {
    if (empty($_FILES['user_attachment']['name'][$i])) {
        echo 'no file chosen';
    }

    if ($_FILES['user_attachment']['error'][$i] == UPLOAD_ERR_NO_FILE) {
        echo 'no file chosen';
    }

    if (!file_exists($_FILES['user_attachment']['tmp_name'][$i]) || !is_uploaded_file($_FILES['user_attachment']['tmp_name'][$i])) {
        echo 'no file chosen';
    }
}
$count=count($\u文件['user\u attachment']['name']);
对于($i=0;$i<$count;$i++){
if(空($_文件['user_attachment']['name'][$i])){
回显“未选择文件”;
}
如果($\u文件['user\u attachment']['error'][$i]==上载\u ERR\u NO\u文件){
回显“未选择文件”;
}
如果(!file_存在($_FILES['user_attachment']['tmp_name'][$i])| |!是否上载了_文件($_FILES['user_attachment']['tmp_name'][$i])){
回显“未选择文件”;
}
}

由于
用户\u附件[]
是一个数组,您可以使用
count()
函数轻松检查

$count = count($_FILES['user_attachment']['name']);
for ($i = 0; $i < $count; $i++) {
    if (empty($_FILES['user_attachment']['name'][$i])) {
        echo 'no file chosen';
    }

    if ($_FILES['user_attachment']['error'][$i] == UPLOAD_ERR_NO_FILE) {
        echo 'no file chosen';
    }

    if (!file_exists($_FILES['user_attachment']['tmp_name'][$i]) || !is_uploaded_file($_FILES['user_attachment']['tmp_name'][$i])) {
        echo 'no file chosen';
    }
}
$count=count($\u文件['user\u attachment']['name']);
对于($i=0;$i<$count;$i++){
if(空($_文件['user_attachment']['name'][$i])){
回显“未选择文件”;
}
如果($\u文件['user\u attachment']['error'][$i]==上载\u ERR\u NO\u文件){
回显“未选择文件”;
}
如果(!file_存在($_FILES['user_attachment']['tmp_name'][$i])| |!是否上载了_文件($_FILES['user_attachment']['tmp_name'][$i])){
回显“未选择文件”;
}
}

您可以使用
$\u文件
数组上的
大小
字段进行检查,如下所示:

if ($_FILES['user_attachment']['size'] == 0 && $_FILES['user_attachment']['error'] == 0)
{
    // user_attachment is empty (and not an error)
}
(我还在此处检查错误,因为如果出现问题,它可能是0。我不会使用此检查的名称,因为它可以被覆盖)


复制您可以使用
$\u文件
数组上的
大小
字段进行检查,如下所示:

if ($_FILES['user_attachment']['size'] == 0 && $_FILES['user_attachment']['error'] == 0)
{
    // user_attachment is empty (and not an error)
}
(我还在此处检查错误,因为如果出现问题,它可能是0。我不会使用此检查的名称,因为它可以被覆盖)


复制自

只需查看控制台并检查
$\u文件
数组中的
var\u转储($\u文件)
。由于您的表单声明,
user\u attachment
是一个数组,因此您可以在其上使用任何数组函数。假设
var\u dump($\u文件)
是一个数组。
var\u dump($\u文件)
给了我这个:
array(1){[“user\u attachment”]=>array(5){[“name”]=>array(1){[0]=>string(0)”}[“type”=>array(1){[0]=>string(0)”,}[“tmp\u name”=>array(1){[0]=>string(0)”,“error”=>(1) {[0]=>int(0)}}}
更新了答案。原因:文件数组的结构与预期略有不同。示例:
$\u文件['user\u attachment']['name']
包含的条目与上载的文件一样多。如果没有上载的文件,则可以使用上面的代码检查一个错误条目。只需在控制台中查看并使用
var\u dump($\u文件)检查
$\u files
数组中的内容
。由于您的表单声明,
user\u attachment
是一个数组,因此您可以在其上使用任何数组函数。假设
$\u FILES['user\u attachment']
是一个数组。
var\u dump($\u FILES)
给了我以下信息:
array(1){[“user\u attachment”]=>array(5){[“name”=>array(1){[0]=>string(0)}[“type”=>array(1){[0]=>string(0)”“}[“tmp_name”]=>array(1){[0]=>string(0)”“}[“error”=>array(1){[0]=>int(4)}[“size”]=>array(1){[0]=>int(0)}}
更新了答案。原因:文件数组的结构与预期稍有不同。例如:
$\u文件['user_attachment']name']
包含的条目与上载的文件数量完全相同。如果没有上载的文件,则可以使用上面的代码检查一个错误条目。这将不起作用,因为它是一个多文件上载,
size
以及
error
都是数组。您可以添加$_文件['user\u attachment']['size'][0]无法工作,因为它是一个多文件上载,
size
以及
error
都是数组。您可以添加$\u文件['user\u attachment']['size'][0]