警告:为foreach()提供了无效的参数-上传照片表格

时间:2018-07-28 02:12:54

标签: php html file-upload image-uploading

嗨,我是php新手,并不断收到此错误:“ 警告:在第61行的/home/site/folder/upload.php中为foreach()提供了无效的参数。” < / p>

我正在尝试构建一个表单,用户可以在其中自动将一张或多张照片上传到目录,然后在其他位置显示。

每当我使用此表格时,我创建的表格就可以在我的网站上正常运行,但是不幸的是,它不断打印出该错误,并希望其消失。这是我正在使用的代码:

 <div>
        <form action="upload.php" enctype="multipart/form-data" method="POST">
            <input type="file" name="images[]" multiple="multiple"/>
            <input type="submit" name="submit" value="upload images"/>
        <form/>
        <?php
                    // check if uploads directory exists
            $dir = "images/";
            if(!is_dir($dir))
            {
                            echo "Directory not found, let's create the folder.";
                            mkdir($dir,"0777", true);
            }

            $countimg = 0;
            $allimg = 0;
            foreach($_FILES["images"]["name"] as $k=>$name)
            {
                         $allimg++;
                         $imgname = $_FILES["images"]["name"][$k];
                         $sizeimg = $_FILES["images"]["size"][$k];
                         $tmpname = $_FILES["images"]["tmp_name"][$k];
                                 //2.
                         $extension = strtolower(pathinfo($dir.$imgname, PATHINFO_EXTENSION));
                    if($extension=='png' || $extension=='jpg' ||$extension=='jpeg' ||$extension=='gif')
                                 {
                                        if($sizeimg < 2097152){
                                                        if(!file_exists($dir.$imgname)){
                                                                            //1.
                                                                    if(move_uploaded_file($tmpname,$dir.$imgname))
                                                                    {
                                                                                         $countimg++;
                                                                    }
                                                     }
                                        }
                         }
            }
            echo "You are trying to upload $allimg images".'<br>';
            echo "From $allimg image(s) - $countimg was/were uploaded with success".'<br>';
            $z = $allimg - $countimg;
            echo "$z image(s) were not uploaded: Not an image, over 2MB, or already uploaded.";

        ?>
    </div>

2 个答案:

答案 0 :(得分:0)

我测试了您的脚本,效果很好。出现错误消息是因为您没有在启动foreach之前检查文件是否已上传。如果我进入页面,PHP代码仍将被触发。要解决此问题,您可以使用以下内容:

<div>
        <form action="upload.php" enctype="multipart/form-data" method="POST">
            <input type="file" name="images[]" multiple="multiple"/>
            <input type="submit" name="submit" value="upload images"/>
        <form/>
        <?php

            if( $_POST['submit'] ) {

                $dir = "images/";
                if(!is_dir($dir))
                {
                                echo "Directory not found, let's create the folder.";
                                mkdir($dir,"0777", true);
                }

                $countimg = 0;
                $allimg = 0;
                foreach($_FILES["images"]["name"] as $k=>$name)
                {
                             $allimg++;
                             $imgname = $_FILES["images"]["name"][$k];
                             $sizeimg = $_FILES["images"]["size"][$k];
                             $tmpname = $_FILES["images"]["tmp_name"][$k];
                                     //2.
                             $extension = strtolower(pathinfo($dir.$imgname, PATHINFO_EXTENSION));
                        if($extension=='png' || $extension=='jpg' ||$extension=='jpeg' ||$extension=='gif')
                                     {
                                            if($sizeimg < 2097152){
                                                            if(!file_exists($dir.$imgname)){
                                                                                //1.
                                                                        if(move_uploaded_file($tmpname,$dir.$imgname))
                                                                        {
                                                                                             $countimg++;
                                                                        }
                                                         }
                                            }
                             }
                }
                echo "You are trying to upload $allimg images".'<br>';
                echo "From $allimg image(s) - $countimg was/were uploaded with success".'<br>';
                $z = $allimg - $countimg;
                echo "$z image(s) were not uploaded: Not an image, over 2MB, or already uploaded.";

            }

        ?>
    </div>

if( $_POST['submit'] )将确保在运行其余PHP代码之前提交表单。

答案 1 :(得分:0)

尝试

if (count($_FILES)) {
    foreach($_FILES["images"]["name"] as $k=>$name) {
        ....
    }
}
相关问题