Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/226.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何验证输入文件是否为空_Php_Html_Mysql - Fatal编程技术网

Php 如何验证输入文件是否为空

Php 如何验证输入文件是否为空,php,html,mysql,Php,Html,Mysql,您好,我有一个在数据库中插入多张图片的脚本,当我想删除现有文件并在每次更新时插入新文件时,但我不知道如何仅在输入是文件时进行删除,如果不是跳过该部分的话。 这是我的密码: $size=$_FILES['files']['size']; if($size > 1) { $query = "Delete from Imagini_Hotel where ID_Hotel='$id_hotel'"; $result = mysql_query($query) o

您好,我有一个在数据库中插入多张图片的脚本,当我想删除现有文件并在每次更新时插入新文件时,但我不知道如何仅在输入是文件时进行删除,如果不是跳过该部分的话。 这是我的密码:

$size=$_FILES['files']['size'];
if($size > 1) { 
   $query = "Delete from Imagini_Hotel where ID_Hotel='$id_hotel'"; 
    $result = mysql_query($query)
        or die("query failed: " . mysql_error()); 
} 


$errors= array();
foreach($_FILES['files']['tmp_name'] as $key => $tmp_name ){
    $file_name = $key.$_FILES['files']['name'][$key];
    $file_size =$_FILES['files']['size'][$key];
    $file_tmp =$_FILES['files']['tmp_name'][$key];
    $file_type=$_FILES['files']['type'][$key];  

    if($file_size > 9097152){
        $errors[]='File size must be less than 9 MB';
    }
    if($file_size <= 0)
    {
    }
    else
    {
    $query="Insert into Imagini_Hotel (`ID_Hotel`,`Nume_Poza`,`Prioritate`) VALUES('$id_hotel','$file_name','$key'); ";
    $desired_dir="../../../images/hotel/$id_hotel";
    if(empty($errors)==true){
        if(is_dir($desired_dir)==false){
            mkdir("$desired_dir", 0777);        // Create directory if it does not exist
        }
        if(is_dir("$desired_dir/".$file_name)==false){
            move_uploaded_file($file_tmp,"$desired_dir/".$file_name);
        }else{                                  // rename the file if another one exist
            $new_dir="$desired_dir/".$file_name.time();
             rename($file_tmp,$new_dir) ;               
        }
     mysql_query($query);           
    }else{
            print_r($errors);
    }
}}
if(empty($error)){
    echo "Success";
}
$size=$\u文件['FILES']['size'];
如果($size>1){
$query=“从Imagani_Hotel中删除,其中ID_Hotel='$ID_Hotel'”;
$result=mysql\u查询($query)
或者死(“查询失败:.mysql_error());
} 
$errors=array();
foreach($\u FILES['FILES']['tmp\u name']作为$key=>$tmp\u name){
$file\u name=$key.$\u FILES['FILES']['name'][$key];
$file\u size=$\u FILES['FILES']['size'][$key];
$file\u tmp=$\u FILES['FILES']['tmp\u name'][$key];
$file\u type=$\u FILES['FILES']['type'][$key];
如果($file_size>9097152){
$errors[]=“文件大小必须小于9 MB”;
}

如果($file\u size有一个
['error']
参数,你可以检查(而且无论如何都应该检查)。现在你只是假设上传成功

if ($_FILES['tmp_name']['error'][$key] === UPLOAD_ERR_OK) {
   ... file was uploaded ...
} else {
   die("Upload failed with error code " . $_FILES['tmp_name']['error'][$key]);
}
这里定义了错误代码:您对代码0(成功)和4(无文件)感兴趣


另外,请注意,上载处理代码会使服务器完全远程受损。您在
move..()
操作中直接使用用户提供的文件名,允许恶意用户在系统上的任何文件上涂鸦。没有任何说明用户提供的文件名不能包含路径信息,例如
['name']='../../../../../../../../etc/passwd
,您的脚本在不进行任何筛选/检查的情况下愉快地盲目使用它。

也许可以检查文件大小($file\u tmp)是否大于0-您将知道文件大小。

不要在SQL查询中插入变量!如果我上载了名为
的文件,则“坏键”);drop table Imaginai_Hotel;--
您丢失了整个数据库它在管理界面中,它由登录和sha3加密保护,因此用户没有访问权限。这不是一个真正的借口。除非您让您的管理员直接访问服务器……如果您继续在其他地方重复使用此代码会怎么样?我只想仅在以下情况下进行删除查询:ome文件在该输入中,现在删除查询正在运行,即使输入为空。空文件输入将给出#4错误。它永远不会为0/成功。