Poster plusieurs images pour les afficher ensuite

Résolu/Fermé
emrh Messages postés 427 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 9 avril 2024 - Modifié par emrh le 8/03/2015 à 10:13
emrh Messages postés 427 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 9 avril 2024 - 8 mars 2015 à 10:25
Bonjour à tous...

J'ai un problème dans mon code et à force d'avoir le nez dedans, je n'arrive pas à mettre le doigt dessus ;-)

J'ai un formulaire qui me permet de récupérer 1 ou 10 images sur mon ordi et de les télécharger sur mon serveur Web. Après vérification de différents paramètres (taille, extension), je renomme mon fichier avec comme nom la date (classique) et j'informe ma bdd de ce nom dans un champs photo1, photo2...photo10.

Je rencontre les problèmes suivants :
1 - Une seule image est uploadée à chaque fois, même si plusieurs
input sont renseignés de données différentes ! (problèmes dans ma boucle ?)
2 - Les champs 'photo1', 'photo2'... de la BDD sont remplis du même nom de fichier !
3 - Quand je reviens sur le formulaire pour ajouter une 'photo5' par exemple, la 'photo1' disparaît ensuite du formulaire alors que j'aimerai qu'elle reste et que vienne s'ajouter la 5...

je pense que le problème vient du fait que je ne sais pas faire un contrôle sur un array vide....($_FILES['photo' . $i])

Mais plutôt que de long discours, voici mon code :

FORMULAIRE :



<fieldset>
<legend>Photos en ligne actuellement : </legend>
<img src="photos/<?php echo $reponse['photo1'];?>" alt="Photo 1" title="Photo principale" width="244" height="196" /><br />
<input type="file" name="photo1" /><br />
<?php
for ($i=2; $i <11 ; $i++) {?>
<img src="photos/<?php echo $reponse['photo'. $i];?>" alt="Photo <?php echo $i;?>" title="Photo <?php echo $i;?>" width="244" height="196" /><br />
<input type="file" name="photo<?php echo $i;?>" /><br />
<?php } ?>
</fieldset>



TRAITEMENT :



$image=array();

for ($i=1; $i<11 ; $i++) {
// 1 - La photo est elle bien jointe au formulaire :
if (isset($_FILES['photo' . $i]) AND $_FILES['photo' . $i]['error'] == 0) {
// 2 - La photo n'est elle pas trop grosse :
if ($_FILES['photo' . $i]['size'] <=1000000) {
// 3 - L'extension de la photo est elle autorisé :
$infosfichiers = pathinfo($_FILES['photo' . $i]['name']);
$extension_upload = $infosfichiers['extension'];
$extensions_autorisees = array('jpg', 'jpeg', 'gif', 'png');
$image[$i] = '' .time(). '.' .$extension_upload;
if (in_array($extension_upload,$extensions_autorisees)) {
// 4 - Le fichier est valide, on peut le télécharger :
move_uploaded_file($_FILES['photo' . $i]['tmp_name'],'photos/' . $image[$i]);
}
else {
$message='Le format de la photo n°' . $i . ' n\'est pas autorisé !';
}
}
else {
$message='La taille de la photo n°' . $i . ' dépasse la taille autorisée !';
}
}
}



$requete = $DB->prepare("UPDATE chambres SET prix = :nvprix, descriptif = :nvdescriptif,
commentaire = :nvcommentaire, photo1 = :nvphoto1,
photo2 = :nvphoto2, photo3 = :nvphoto3, photo4 = :nvphoto4, photo5 = :nvphoto5 WHERE id = '$id'");
$requete->execute(array(
'nvprix' => $prix,
'nvdescriptif' => $descriptif,
'nvcommentaire' => $commentaire,
'nvphoto1' => $image[1],
'nvphoto2' => $image[2],
'nvphoto3' => $image[3],
'nvphoto4' => $image[4],
'nvphoto5' => $image[5]
));




EDIT :
print_r de $_FILES['photo' . $i] donne :
Array
(
[name] => chambre-de-luxe-1269194801.jpg
[type] => image/jpeg
[tmp_name] => /tmp/phpkvWOan
[error] => 0
[size] => 41380
)

Array
(
[name] => chambre-coloniale-1269194783.jpg
[type] => image/jpeg
[tmp_name] => /tmp/phpMve222
[error] => 0
[size] => 45020
)


print_r de $image[$i] donne :
1425805876.jpg
1425805876.jpg


Je pense au passage avoir un problème de sécurité ici : WHERE id = '$id'

Merci d'avance pour vos lumières !


1 réponse

emrh Messages postés 427 Date d'inscription mardi 9 décembre 2014 Statut Membre Dernière intervention 9 avril 2024 20
8 mars 2015 à 10:25
Je pense avoir trouvé ! ! !

L'enregistrement semble être tellement rapide que les images porte le même nom time()...

En faisant comme ça :

$image[$i] = $i .time(). '.' .$extension_upload;


au lieu de :

$image[$i] = '' .time(). '.' .$extension_upload;



j'ai réglé mon problème ! ! !
0