繁体   English   中英

PHP-在For循环中上传文件脚本

[英]PHP - Upload File Script in a For Loop

因此,我将此表单放在for循环中,该循环提交给自己并获取用户上传的图像,形式为:

    for ($x=1; $x<=10; $x++)
    {
    echo "<form method='post' enctype='multipart/form-data'>";

    echo "
    <label for='file'>Image:</label>
    <input type='file' name='file'><br>
    <input type='submit' name='submit' value='Upload Image'>
    <br>";

    include ('lib/upload.php');
    }

然后,表单将调用一个名为“ upload.php”的脚本,其中包含以下代码:

    <?php
     if (isset($_POST['submit']))
     {
        $allowedext=array("gif", "png", "jpeg", "jpg");
        $tmp=explode(".", $_FILES["file"]["name"]);
        $ext=end($tmp);

        if (
        (($_FILES["file"]["type"]=="image/gif") ||
        ($_FILES["file"]["type"]=="image/jpeg") ||
        ($_FILES["file"]["type"]=="image/jpg") ||
        ($_FILES["file"]["type"]=="image/pjpeg") ||
        ($_FILES["file"]["type"]=="image/png") ||
        ($_FILES["file"]["type"]=="image/x-png")) &&
        ($_FILES["file"]["size"]<=3145728) && in_array($ext, $allowedext)
        )
        {
            if ($_FILES["file"]["error"]>0)
            {
                echo "<br>Error: ".$_FILES["file"]["error"]."<br>";
            }
            else
            {
                if (file_exists("upload/".$_FILES["file"]["name"]))
                {
                    echo "<br><p style='color: #ff0000;'>".$_FILES["file"]["name"]." already exists.</p><br>";
                }
                else
                {
                    move_uploaded_file($_FILES["file"]["tmp_name"], "upload/".$_FILES["file"]["name"]);
                    $x="upload/".$_FILES["file"]["name"];

                    echo "<br><img src='$x' width='320px' height='240px'><br>";
                }
            }
        }
        else if ($_FILES["file"]["size"]>3145728)
        {
            echo "<br><p style='color: #ff0000;'>File too large</p><br>";
        }
        else
        {
            echo "<br><p style='color:#ff0000;'>Invalid file</p><br>";
        }
     }
    ?>

所以我的问题是,即使我确定我已经上传了一个有效的文件,每次上传图像时,都会出现错误“无效文件”。 如果我循环一次表单,这将起作用,如下所示:

    for ($x=1; $x<=1; $x++)
    {
        \\code
    }

任何想法可能是什么问题?

我发现您的代码有问题,也有多个文件上传过程中的问题:

在您的第一个代码片段中,有一个for循环,而此代码是错误的include('lib / upload.php'); 我不知道为什么没有错误发生,但是您应该使用include_onde代替include.this是您编码的错误。

使用多个文件上传时,您无需创建多个表单,应创建一个这样的表单:

<form>
   <input type='file' name='upload_file[]' />
   <input type='file' name='upload_file[]' />
   <input type='file' name='upload_file[]' />
   <input type='file' name='upload_file[]' />
</form>

而在你的PHP这样的事情:

foreach ($_FILES as $key => $value)
{

    foreach($value as $k=>$v)
    {
           if($k !== "error")
           {
              $_FILES[$key][$k] = array_filter($v);
           }                 
     }
}
$name = $_FILES['upload_file']['name'];
if(empty($name))
{
  //do whatever you want to tell user no file uploaded
}

上面的代码用于删除空的上传文件$ _FILES;

然后

$tmp_name=$_FILES['upload_file']['tmp_name'];
$size=$_FILES['upload_file']['size'];
$error=$_FILES['upload_file']['error'];
$filepath = "/usr/www/project/image/";
$ext="get ext by yourself";//like ".jpg" 
foreach($name as $key=>$value)
{
  move_uploaded_file($tmp_name["{$key}"], $filepath.$value.$ext);
  //do other thing here one by one.
 }

尽情享受..

您在代码中丢失了表格。

插入echo '&lt;/form&gt;'; 在您的代码中。

向您介绍一个网站: http : //www.w3schools.com/PHP/php_file_upload.asp

享受您的学习时间。

您忘记在for循环的末尾添加</form>

for ($x=1; $x<=10; $x++)
    {
    echo "<form method='post' enctype='multipart/form-data'>";

    echo "
    <label for='file'>Image:</label>
    <input type='file' name='file'><br>
    <input type='submit' name='submit' value='Upload Image'>
    <br></form>"; //end form here

    include ('lib/upload.php');
    }

您的表单没有关闭,因此给其他表单造成了问题。 但是它将关闭,然后所有表格都可以正常工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM