Votre question

Rajout de photos à mon formulaire

Tags :
  • Input
  • Programmation
Dernière réponse : dans Programmation
6 Mars 2010 19:07:02

Bonjour,

sur mon site quand je rajoute une petite annonce en fin d'ajout, j'ai une page ou je peu
rajouter une photo, mais qu'une seul, j'amerais pouvoir en rajouter 5...

Dans ma bdd le nom de la photo s'enregistre dans la champ "photo", j'ai donc rajouter 4 autres
champ, "photo2", "photo3"... jusqu'a 4.

J'aurais vraiment besoin d'un pti coup de pouce pour arriver a traiter les 5 photos, ce serait super!
Et à améliorer le code peu étre.

Merci d'avance si vous pouvez jettez un pti coup d'oeil au code, et m'aider.

Mon formulaire pour l'intant ressemble à ça:

  1. <form action="" method="post" enctype="multipart/form-data" name="form1" id="form1">
  2. <label>
  3. <input type="file" name="file" />
  4. </label>
  5. <label> <br />
  6. <input type="submit" name="Submit" value="Envoyer" />
  7. </label>
  8. <input name="idannonce" type="hidden" id="idannonce" value="<?php echo $row_Recordset1['idannonce']; ?>" />
  9. </form>


et son traitement:

  1. <?php
  2.  
  3. if (phpversion() > "4.0.6") {
  4. $HTTP_POST_FILES = &$_FILES;
  5. }
  6. define("MAX_SIZE",80000000);
  7. define("DESTINATION_FOLDER", "images");
  8. define("no_error", "../index.php");
  9. define("yes_error", "../index.php");
  10. $_accepted_extensions_ = "jpg,jpeg,JPG,JPEG,gif,GIF,png,PNG";
  11. if(strlen($_accepted_extensions_) > 0){
  12. $_accepted_extensions_ = @explode(",",$_accepted_extensions_);
  13. } else {
  14. $_accepted_extensions_ = array();
  15. }
  16. if (isset($HTTP_POST_FILES['file'])){
  17. $_file_ = $HTTP_POST_FILES['file'];
  18. if(is_uploaded_file($_file_['tmp_name']) && $HTTP_POST_FILES['file']['error'] == 0){
  19. $errStr = "";
  20. $_name_ = $_file_['name'];
  21. $_type_ = $_file_['type'];
  22. $_tmp_name_ = $_file_['tmp_name'];
  23. $_size_ = $_file_['size'];
  24. if($_size_ > MAX_SIZE && MAX_SIZE > 0){
  25. $errStr = "Votre photo est trop lourde";
  26. }
  27. $_ext_ = explode(".", $_name_);
  28. $_ext_ = strtolower($_ext_[count($_ext_)-1]);
  29. if(!in_array($_ext_, $_accepted_extensions_) && count($_accepted_extensions_) > 0){
  30. $errStr = "l extension n est pas prise en compte";
  31. }
  32. if(!is_dir(DESTINATION_FOLDER) && is_writeable(DESTINATION_FOLDER)){
  33. $errStr = "La destination de la photo est incorecte";
  34. }
  35. if(empty($errStr)){
  36. //je supprime les accents du nom de la photo--------------------------
  37. function supprimeAccents($chaine){
  38.  
  39. $tofind = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ ";
  40.  
  41. $replac = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn_";
  42.  
  43. return(strtr($chaine,$tofind,$replac));
  44.  
  45. }$_name_=supprimeAccents($_name_);
  46. //fin de supprimer les accents-------------------------------
  47. // un nouveau nom pour les photos en double
  48. $nombre=1;
  49. $repertoire_upload="images/";
  50. $nouveau_nom=$_name_."";
  51.  
  52. while (file_exists($repertoire_upload.$nouveau_nom))
  53. {
  54. $nombre++; // on incremente le nombre tant que le nom du fichier existe
  55. $nouveau_nom=$nombre.$nouveau_nom;
  56. }// fin while
  57. //ok j'enregistre la photo dans le dossier
  58. if(@copy($_tmp_name_,DESTINATION_FOLDER . "/" . $nouveau_nom)){
  59. $_POST['idannonce'];
  60. $idannonce=$_POST['idannonce'];
  61. mysql_select_db($database_connexion, $connexion);
  62. $updateSQL = "UPDATE an_annonce SET photo='$nouveau_nom' WHERE idannonce='$idannonce'";
  63. mysql_select_db($database_connexion, $connexion);
  64. $Result1 = mysql_query($updateSQL, $connexion) or die(mysql_error());
  65.  
  66. header("Location: " . no_error);
  67. } else {
  68. header("Location: " . yes_error);
  69. }
  70. } else {
  71. header("Location: " . yes_error);
  72. }
  73. }
  74. }
  75. ?>


Merci encore!

Autres pages sur : rajout photos formulaire

8 Mars 2010 04:42:58

Je fais un petit up, je m'excuse! Merci!
m
0
l
8 Mars 2010 06:22:01

Bonjour,

$_FILES est un tableau.
tu peux peut être faire une boucle pour l'envoi (?)

++
m
0
l
Contenus similaires
a c 232 L Programmation
10 Mars 2010 00:17:02

Salut,

- Tu ajoutes plusieurs <input de type file
- Tu ajoutes des colonnes à ta base de données
- Tu boucles sur le tableau $_FILES comme spécifié par flo_974, en exécutant le même code à chaque fois
- Tu mets à jour ta requête SQL de type UPDATE en ajoutant les nouveaux fichiers

Par contre, plutôt que d'ajouter 5 colonnes photos, faire une deuxième table qui contiendrait les photos et l'ID de l'annonce serait plus propre.
m
0
l
10 Mars 2010 18:03:45

Merci flo_974 et Omar

Ce que j'ai trouvé qui peu étre pratique c'est un nouveau code avec une boucle comme le précisé flo_974

j'ai créer mes nouveaux champs formulaire et bdd, pour l'instant photo et photo2 pour faire un test, et j'ai réglé le probléme du formulaire

alors je vous met le nouveau code de traitement et le formulaire pour vous donnez une idée et voir ou je bloque maintenant
le traitemant de ce code m'envoie les fichier dans un dossier mais ce que je voudrais aussi et sourtout, c'est qu'il prenne les
nouveaux nom les dissocié et les incérementés dans ma bdd c'est la ou je comprend pas comment faire.

Formulaire:
  1. <form name="formu" action="traitement.php" method="post" enctype="multipart/form-data">
  2.  
  3. fichier 1 <input type="file" name="fichier[]" accept="image/gif" /><br />
  4. fichier 2 <input type="file" name="fichier[]" accept="image/gif" /><br />
  5.  
  6. fichier 5 <input type="submit" value="Go !!!!" />
  7. </form>


Traitement:
  1. <?php
  2. if (isset($_FILES['fichier']))
  3. {
  4. //$_FILES existe
  5. foreach ($_FILES['fichier']['name'] as $key => $value) {
  6. $fichier=$value;//nom reel de l'image
  7. $size=$_FILES['fichier']['size'][$key]; //poids de l'image en octets
  8. $tmp=$_FILES['fichier']['tmp_name'][$key];//nom temporaire de l'image (sur le serveur)
  9. $type=$_FILES['fichier']['type'][$key];//type de l'image
  10. //On récupère la taille de l'image
  11. list($width,$height)=getimagesize($tmp);
  12. if (is_uploaded_file($tmp)) //permet de vérifier si le fichier a été uplodé via http
  13. {
  14. //vérification du type de l'img, son poids et sa taille
  15. if ($type=="image/gif" && $size<=20500 && $width<=100 && $height<=100 )
  16. {
  17. // type mime gif, poids < à 20500 octets soit environ 20Ko, largeur = hauteur = 100px
  18. //Pour supprimer les espaces dans les noms de fichiers car celà entraîne une erreur lorsque vous voulez l'afficher
  19. $fichier = preg_replace ("` `i","",$fichier);//ligne facultative :)
  20. //On vérifie s'il existe une image qui a le même nom dans le répertoire
  21. if (file_exists('./images_up/'.$fichier))
  22. {
  23. //Le fichier existe on rajoute dans son nom le timestamp du moment pour le différencier de la première (comme cela on est sûr de ne pas avoir 2 images avec le même nom :) )
  24. $nom_final= preg_replace("`.gif`is",date("U").".gif",$fichier);
  25. }
  26. else {
  27. $nom_final=$fichier; //l'image n'existe pas on garde le même nom
  28. }
  29. //on déplace l'image dans le répertoire final
  30. if (move_uploaded_file($tmp,'./images/'.$nom_final)) {
  31.  
  32.  
  33. // je récupére l'id de l'annonce
  34. $_POST['idannonce'];
  35. $idannonce=$_POST['idannonce'];
  36.  
  37. //J'enregistre le nom des photos et l'id dans la base de donné
  38. mysql_select_db($database_connexion, $connexion);
  39. $updateSQL = "UPDATE an_annonce SET photo='$nouveau_nom' WHERE idannonce='$idannonce'";
  40. mysql_select_db($database_connexion, $connexion);
  41. $Result1 = mysql_query($updateSQL, $connexion) or die(mysql_error());
  42.  
  43.  
  44. //Message indiquant que tout s'est bien passé
  45. //Pour le test on affiche l'image
  46. echo '<img src="./images/'.$nom_final.'" border="0" />';
  47. echo '<br/>';
  48. }
  49. else {
  50. //l'image ne peut être déplacée, on supprime le fichier temporaire
  51. @ unlink ($tmp);
  52. echo 'L\'image n\'a pu être déplacée !';
  53. }
  54.  
  55. }
  56. else {
  57. //Le type mime, ou la taille ou le poids est incorrect
  58. echo 'Votre image a été rejetée (poids, taille ou type incorrect)';
  59. }
  60. }
  61. }
  62. }
  63. echo '<a href="javascript:history.back();">Retour</a>';
  64. ?>


Mon probléme maintenant c'est de la partie ligne 33 à 42 c'est a dire:
  1. // je récupére l'id de l'annonce
  2. $_POST['idannonce'];
  3. $idannonce=$_POST['idannonce'];
  4.  
  5. //J'enregistre le nom des photos et l'id dans la base de donné
  6. mysql_select_db($database_connexion, $connexion);
  7. $updateSQL = "UPDATE an_annonce SET photo='$nouveau_nom' WHERE idannonce='$idannonce'";
  8. mysql_select_db($database_connexion, $connexion);
  9. $Result1 = mysql_query($updateSQL, $connexion) or die(mysql_error());


la bon je récupére l'id de mon annonce pour que la ou je vais insérer les nouveaux noms des fichiers ça s'enregistre dans ma base de donné.

et le soucis le seul qui me reste à trouver, c'est comment récupérer les nouveaux nom les dissociés dans l'ordre pour l'insertion dans la bdd.

  1. photo='$nouveau_nom', photo2='$nouveau_nom2'


Je sais pas trop si j'arrive a bien m'expliquer... (et désolé pour l'othographe...)

Mais si vous pouviez m'aider, méme en me donnant un exemple concret ce serait super

Merci encore
m
0
l
10 Mars 2010 19:48:56

bonjour

Tu pourrais créer le début de $updateSQL avant la boucle.
dans la boucle, continues ton instruction sql
après la boucle, tu termines ton instruction (attention aux virgules)

tu exécutes une seule fois mysql_query si le sql est OK (peut être un test "au moins une photo" ???)

A priori, tu as créé les 5 champs (photo1, photo2...) dans la table an_annonce, en utilisant un "compteur" dans la boucle, tu peux faire "photo" .$compteur pour préciser le champ.

Tu devras aussi prévoir quand certains fichiers ne sont pas uploadés.

Y'a surement plus propre (pour reprendre le terme d'Omar :-) et plus simple...
Tous les avis sont bienvenus.

a+
m
0
l
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS