Bonsoir à 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 !
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' disparait 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]
));
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
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