2012-03-19 152 views
1

我需要修改图片上传表单,以便我可以上传多个图片(准确的说是6张)。我尝试添加另一个输入,并按照其他人的建议更改名称值,但仍然显示与第一个输入相同的图像。我知道这可能很简单,但我不是PHP开发人员,所以我一直无法找到解决方案。上传多张图片,PHP

下面是上传图片的代码:

if(isset($_FILES['image']) && $_FILES['image']['tmp_name'] != '') { 
     $tempext = explode('.', $_FILES['image']['name']); 
     $tempext = strtolower($tempext[count($tempext) - 1]); 
     switch($tempext) { 
      case 'jpg': 
      case 'jpeg': 
       $ext = '.jpg'; 
       break; 
      default: 
       $ext = false; 
     } 

     if($ext != false && move_uploaded_file($_FILES['image']['tmp_name'], $_SERVER['DOCUMENT_ROOT'] . '/img/profiles/' . $id . $ext)) { 
      $imagesuccess = chmod($_SERVER['DOCUMENT_ROOT'] . '/img/profiles/' . $id . $ext, 0644) ? 'yes' : 'no'; 
     } else { 
      $imagesuccess = 'no'; 
     } 
    } 

而对于输入:

<div class="control-container<?php if((isset($_FILES['image']) && !empty($_FILES['image']['name']))) echo ' error'; ?>"> 
      <label for="image">Large Image</label> 
      <div class="multifield"> 
       <?php 
       if(file_exists($_SERVER['DOCUMENT_ROOT'] . '/img/profiles/' . $id . '.jpg')) { 
        echo '<img src="/img/profiles/' . $id . '.jpg?' . rand() . '" width="310px" />'; 
       } 
       ?> 
       <input type="file" name="image" id="image" /> 
      </div> 
</div> 

任何帮助将非常感激。

感谢

回答

4

你需要有多个输入字段:

<input type="file" name="image1" /> 
<input type="file" name="image2" /> 
etc... 

,并访问每个单独的文件:

$_FILES['image1'][...] 
$_FILES['image2'][...] 
etc... 

,或者您可以使用特定的PHP阵列符号快捷键:

<input type="file" name="image[]" /> 
<input type="file" name="image[]" /> 

$_FILES['image']['tmp_name'][0]; 
$_FILES['image']['tmp_name'][1]; 
etc... 

注意使用数组符号时,PHP使得文件阵列自己的阵列中的每个单独的数据点。不是将文件数据集中在一个阵列中,而是将每个位分散在多个阵列中。

+0

我试过这两种解决方案,但表单仍然只发送一个图像到数据库,这是使用最后一个输入字段上传的图像。 – Ryan 2012-03-19 15:29:47

+0

'var_dump($ _ FILES)'显示什么?去结构化你的代码。 – 2012-03-19 15:32:40

+0

好吧,我已经搞砸了一下,它现在看起来像在数据库中显示出来。它出现了一个1添加到ID的末尾,即使我已经添加_02到输入名称和URL。尽管如此,它似乎仍然不想把图片放到网站上。 – Ryan 2012-03-19 15:45:37

0

如果您需要上传更多文件,只需更改name元素。例如,您可以使用JavaScript添加其他输入字段。每个元素将有一个name="images[]"提交后,你可以看到你通过var_dump($_FILES)得到。

2

如果您的窗体中有6个文件输入,$ _FILES应该包含一个数组。在处理文件中使用print_r($_FILES)进行检查。

0

上传多张图片基本片断:

<html> 
<?php 
define("UPLOAD_DIR", "/path/to/uploads/"); 

for ($i = 0; $i < count($_FILES["file"]["tmp_name"]); $i++) { 
    if (is_uploaded_file($_FILES["file"]["tmp_name"][$i])) { 
     move_uploaded_file($_FILES["file"]["tmp_name"][$i], UPLOAD_DIR . $_FILES["file"]["name"][$i]); 
    } 
} 
?> 
<body> 
    <form method="post" enctype="multipart/form-data"> 
    <input name="file[]" type="file" /><br /> 
    <input name="file[]" type="file" /><br /> 
    <input name="file[]" type="file" /><br /> 
    <input type="submit" /> 
    </form> 
</body> 
</html> 
0

@Ryan我认为你的问题可能是HTML部分中为什么不ü使用单输入它泔水你whant什么例如

<form method="post" enctype="multipart/form-data"> 
    <input name="file[]" type="file" multiple="true"><br /> 
    <input type="submit" /> 
    </form>