2012-02-15 5 views
1

en utilisant le PHP suivant, je tente de télécharger plusieurs images. Le nombre d'images téléchargées peut être modifié.Téléchargement de fichiers PHP - plusieurs fichiers

Le problème que je semble avoir est que l'image numéro 1 n'est pas en train d'être téléchargée, mais son chemin est en cours d'impression sur l'écran.

Le code: -

if ($_FILES['pac_img_1']['name']>""){ 
    echo("You have uploaded the following images:-<ul>"); 
    for ($i=1; $i<=$imagesCount; $i++){ 
     $target_path = "files/" . $companyName . "/images/"; 
     $target_path = $target_path . basename($_FILES['pac_img_' . $i]['name']); 
     if(move_uploaded_file($_FILES['pac_img_' . $i]['tmp_name'], $target_path)) { 
      echo "<li><a href='". $target_path . "'>". basename($_FILES['pac_img_' . $i]['name']). "</a></li>"; 
     } else{ 
      echo "There was an error uploading an image"; 
     } 
}; 
    echo("</ul>"); 
}else{ 
    echo("None uploaded"); 
}; 

Je l'ai adapté à partir du code que je l'ai utilisé avant, donc je pense que je suis coupable d'une erreur « collégien » ici.

L'aide serait appréciée. Modifier pour ajouter que $ imagesCount prend sa valeur à partir d'un élément de formulaire via une requête $ _POST

Quand une seule image est téléchargée que la valeur = 0.

+0

Il vaut probablement la peine de mentionner que les répertoires existent sur le serveur et qu'ils ont des droits d'écriture. En effet, toute image autre que la première sera bien téléchargée. – Andrew

+0

Je pensais prématurément que j'avais la solution basée sur les réponses initiales - Merci pour ceux :) - Cependant, je rencontre toujours le problème. – Andrew

Répondre

0

Votre boucle doivent être modifiés. Les index de tableau commencent à partir de 0. Et le dernier élément doit être Longueur de tableau - 1; Votre boucle for doit être modifiée en tant qu'échantillon de code ci-dessous.

En fait, il parcourt plusieurs $ _POST itens. Son HTML a probablement quelque chose comme:

<input type="file" name="pac_img_1"> 
<input type="file" name="pac_img_2"> 
<input type="file" name="pac_img_3"> 

et il essaie d'obtenir ces images.

Je le ferais différemment.

HTML:

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

(notez que vous pouvez ajouter dynamiquement des entrées de fichiers sans se soucier des noms)

PHP:

if (count($_FILES['pac_img']) > 0){ 
    echo("You have uploaded the following images:-<ul>"); 

    foreach($_FILES['pac_img'] as $key => $file){ 
     $target_path = "files/" . $companyName . "/images/"; 
     $target_path = $target_path . basename($file['name']); 
     if(move_uploaded_file($file['tmp_name'], $target_path)) { 
      echo "<li><a href='". $target_path . "'>". basename($file['name']). "</a></li>"; 
     } else{ 
      echo "There was an error uploading an image"; 
     } 
    } 
    echo("</ul>"); 
}else{ 
    echo("None uploaded"); 
} 

Et enfin, mais pas moins: Il faut toujours vérifier si les fichiers téléchargés sont ce qu'ils ont su être. (http://www.acunetix.com/websitesecurity/upload-forms-threat.htm)

+0

Merci pour la réponse. Cela n'a pas résolu mon problème quand je l'ai essayé. Mais j'ai réussi à le réparer moi-même. Quand je serai capable de répondre à ma propre question, je détaillerai comment. Aussi merci beaucoup pour le lien. – Andrew

1

Sans être un php-mec du tout, je vais essayer de changer

for ($i=1; $i<=$imagesCount; $i++){ 

à

for ($i=0; $i<=$imagesCount; $i++){ 

-ou peut-être

for ($i=0; $i < $imagesCount; $i++){ 

en fonction de la définition de $ imagesCount.

0

Votre boucle for doit être modifiée. Les index de tableau commencent à partir de 0. Et le dernier élément doit être Longueur de tableau - 1;

Votre boucle for doit être modifiée en tant qu'échantillon de code ci-dessous.

if ($_FILES['pac_img_1']['name']>""){ 
    echo("You have uploaded the following images:-<ul>"); 
    for ($i=0; $i<$imagesCount; $i++){ 
     $target_path = "files/" . $companyName . "/images/"; 
     $target_path = $target_path . basename($_FILES['pac_img_' . $i]['name']); 
     if(move_uploaded_file($_FILES['pac_img_' . $i]['tmp_name'], $target_path)) { 
      echo "<li><a href='". $target_path . "'>". basename($_FILES['pac_img_' . $i]['name']). "</a></li>"; 
     } else{ 
      echo "There was an error uploading an image"; 
     } 
}; 
    echo("</ul>"); 
}else{ 
    echo("None uploaded"); 
}; 
+0

quand utilise-t-il i pour référencer un index de tableau non-clé? je pense que le i est concaténé à la chaîne se référant au nom de fichier? –

+0

Selon son exemple, il utilise $ i comme index. C'est aussi un index clé par défaut pour cela. Et seul le problème est la déclaration de sa boucle for. –

+0

Merci pour la réponse, mais je ne reçois toujours pas la première image téléchargée. – Andrew

Questions connexes