Insertion d'images en boucle

Insertion d'images en boucle - PHP - Programmation

Marsh Posté le 31-05-2006 à 10:36:26    

Bonjour à tous,
 
Voilà mon souci : j'ai un formulaire avec 6 champs pour uploader des images (fphoto1, fphoto2, etc... jusqu'à fphoto6).
J'arrive à les uploader toutes dans mon dossier, pas de problème (j'ai adapté un script trouvé pour une image dans une boucle pour faire mes 6 images).
Seulement j'ai deux problèmes :
 
 - Déjà je n'arrive pas à mettre le nom de l'image dans la Base de Données....... :( (il me renvoie le DIE)
 - Ensuite, si jamais j'y arrive, comment faire en sorte que tout soit ajouté sur la même ligne (même ID) ??
 
Voici le code utilisé (pas forcément très propre, je vous l'accorde) :
(l'insertion en base est vers le milieu, sous la série de echo)
 

Code :
  1. $i=1;
  2. while ($i<7) {
  3. $fphoto[$i]=$_FILES['fphoto'.$i]['name'];
  4. $i++;
  5. }
  6. //  DEFINITION DES VARIABLES  
  7. $target     = '../upload/';  // Repertoire cible
  8. $extension  = 'jpg';      // Extension du fichier sans le .  ### Rq : j ai rajoute la possibilite d un GIF dans le code, voir plus bas au troisieme IF .
  9. $max_size   = 500000;     // Taille max en octets du fichier (en octets. 100000 o = 100 Ko )
  10. $width_max  = 1000;        // Largeur max de l'image en pixels
  11. $height_max = 1000;        // Hauteur max de l'image en pixels  
  12. //  DEFINITION DES VARIABLES LIEES AU FICHIER
  13. $i=1;
  14. $erreur=0;
  15. while ($i<7) {
  16. $taille_b[$i]   = $_FILES['fphoto'.$i]['size'];
  17. // Attention ! Ici $fphoto[$i] équivaut au $nom_file (ou $_FILES['photox']['name'] ) utilisé plus haut.
  18. $tmp[$i]      = $_FILES['fphoto'.$i]['tmp_name'];
  19. // UPLOAD DES FICHIERS
  20.     // On vérifie si le champ est rempli
  21.     if(!empty($_FILES['fphoto'.$i]['name'])) {
  22.         // On vérifie l'extension du fichier
  23.         if((substr($fphoto[$i], -3) == $extension) || ((substr($fphoto[$i], -3) == 'gif'))) {
  24.             // On récupère les dimensions du fichier
  25.             $infos_img = getimagesize($_FILES['fphoto'.$i]['tmp_name']);
  26.             // On vérifie les dimensions et taille de l'image
  27.             if(($infos_img[0] <= $width_max) && ($infos_img[1] <= $height_max) && ($_FILES['fphoto'.$i]['size'] <= $max_size)) {
  28.                 // Si c'est OK, on teste l'upload
  29.                 if(move_uploaded_file($_FILES['fphoto'.$i]['tmp_name'],$target.$_FILES['fphoto'.$i]['name'])) {
  30.                     // Si upload OK alors on affiche le message de réussite
  31.                     echo '<b>Image numero '.$i.' uploadée avec succès !</b>';
  32.                     echo '<hr />';
  33.      echo '<table><tr><td>';
  34.                     echo '<b>Fichier :</b> ', $_FILES['fphoto'.$i]['name'], '<br />';
  35.                     echo '<b>Taille :</b> ', $_FILES['fphoto'.$i]['size'], ' Octets<br />';
  36.                     echo '<b>Largeur :</b> ', $infos_img[0], ' px<br />';
  37.                     echo '<b>Hauteur :</b> ', $infos_img[1], ' px<br />';
  38.      echo '</td><td><img src="../upload/'.$fphoto[$i].'"></img>';
  39.      echo '</td></tr></table>';
  40.                     echo '<hr />';
  41.                     echo '<br /><br />';
  42.      $insert_ph="INSERT INTO apigoogle_fiches('f_photo[$i]') VALUES('$fphoto[$i]')";
  43.      $req=mysql_query($insert_ph) or die("Erreur upload photo" );
  44.      $i++;
  45.                 } else {
  46.                     // Sinon on affiche une erreur système
  47.                     echo '<b>Problème lors de l\'upload !</b><br /><br /><b>', $_FILES['fphoto'.$i]['error'], '</b><br /><br />';
  48.      $erreur=1;
  49.      $i++;
  50.                 }
  51.             } else {
  52.                 // Sinon on affiche une erreur pour les dimensions et taille de l'image
  53.                 echo '<b>Problème dans les dimensions ou taille de l\'image !</b><br /><br />';
  54.     $erreur=1;
  55.     $i++;
  56.             }
  57.         } else {
  58.             // Sinon on affiche une erreur pour l'extension
  59.             echo '<b>Votre image ne comporte pas l\'extension .jpg ou .gif !</b><br /><br />';
  60.    $erreur=1;
  61.    $i++;
  62.         }
  63.     } else {
  64.         // Sinon on envoie 0 a la place de la photo dans la BDD
  65.         $fphoto[$i] = "0";
  66.   echo "Pas de photo ajout&eacute;e <br><br>";
  67.   $i++;
  68.  }
  69. }

Message cité 1 fois
Message édité par clemdups le 31-05-2006 à 10:41:09
Reply

Marsh Posté le 31-05-2006 à 10:36:26   

Reply

Marsh Posté le 31-05-2006 à 11:34:34    

clemdups a écrit :

- Déjà je n'arrive pas à mettre le nom de l'image dans la Base de Données....... :( (il me renvoie le DIE)


Dans ta table tu as des champs qui s'appelent 'f_photo[1]', 'f_photo[2]' ... ??? C'est ce que laisse penser la requete:

Code :
  1. "INSERT INTO apigoogle_fiches('f_photo[$i]') VALUES('$fphoto[$i]')"


Et puis vu comme c'est codé j'ai quelques doutes sur la portée de ton tableau fphoto. Pourquoi fais-tu une première boucle pour l'initialier... Elle ne sert strictement à rien, sert toi directement du tableau $_FILES.
 

clemdups a écrit :

Ensuite, si jamais j'y arrive, comment faire en sorte que tout soit ajouté sur la même ligne (même ID) ??


Il faut que tu fasses ta requête d'insertion après tous les uploads, en gros faire une seule requete.
 
Bon maintenant deux trois commentaires sur l'architecture de ton bouzin:

  • J'aurais fait 2 tables:  

une apigoogle avec juste un id
une image avec un identifiant, l'id d'apigoogle en clé étrangère et le nom de ton image
L'intêret ce que si demain tu as 8 images tu n'as rien a changer dans la structure de ta table

  • dans le formulaire html j'aurais utilisé un seul nom dans les inputs:
Code :
  1. <input type="file" name="fphoto[]" ... />


Afin de récuper un tableau dans le script php

  • dans le script php, j'aurais ensuite parcouru ce tableau.


Le but de tout ça est d'éviter d'avoir quoi que ce soit à modifier si un jour tu as besoin de changer le nombre d'image. Avec ça, tu n'aurrais besoin que de rajouter un input file dans ta page html
 

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed