【问题标题】:PHP - Upload File Script in a For LoopPHP - 在 For 循环中上传文件脚本
【发布时间】:2014-03-22 08:59:21
【问题描述】:

所以我在 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
    }

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

【问题讨论】:

    标签: php html image loops upload


    【解决方案1】:

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

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

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

    <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.
     }
    

    尽情享受吧..

    【讨论】:

      【解决方案2】:

      您在代码中丢失了一个表单。

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

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

      享受你的学习时光。

      【讨论】:

        【解决方案3】:

        您忘记在 for 循环末尾添加 &lt;/form&gt;

        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');
            }
        

        您的表单未关闭,因此与其他表单产生了问题。 但它会关闭,然后所有表单都可以正常工作。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-01-11
          • 2021-01-16
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多