PHP|Débutant :: Forums

Advertisement

Besoin d'aide ? N'hésitez pas, mais respectez les règles

Vous n'êtes pas identifié(e).

#1 07-03-2010 03:21:45

dobi19
Membre
Inscription : 23-07-2009
Messages : 35

Rajout de photos à mon formulaire

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:



<form action="" method="post" enctype="multipart/form-data" name="form1" id="form1">
              <label>
              <input type="file" name="file" />
              </label>
              <label> <br />
              <input type="submit" name="Submit" value="Envoyer" />
              </label>
              <input name="idannonce" type="hidden" id="idannonce" value="<?php echo $row_Recordset1['idannonce']; ?>" />
            </form>

et son traitement:


<?php

if (phpversion() > "4.0.6" ) {
    $HTTP_POST_FILES = &$_FILES;
}
define("MAX_SIZE",80000000);
define("DESTINATION_FOLDER", "images" );
define("no_error", "../index.php" );
define("yes_error", "../index.php" );
$_accepted_extensions_ = "jpg,jpeg,JPG,JPEG,gif,GIF,png,PNG";
if(strlen($_accepted_extensions_) > 0){
    $_accepted_extensions_ = @explode(",",$_accepted_extensions_);
} else {
    $_accepted_extensions_ = array();
}
if (isset($HTTP_POST_FILES['file'])){
$_file_ = $HTTP_POST_FILES['file'];
if(is_uploaded_file($_file_['tmp_name']) && $HTTP_POST_FILES['file']['error'] == 0){
    $errStr = "";
    $_name_ = $_file_['name'];
    $_type_ = $_file_['type'];
    $_tmp_name_ = $_file_['tmp_name'];
    $_size_ = $_file_['size'];
    if($_size_ > MAX_SIZE && MAX_SIZE > 0){
        $errStr = "Votre photo est trop lourde";
    }
    $_ext_ = explode(".", $_name_);
    $_ext_ = strtolower($_ext_[count($_ext_)-1]);
    if(!in_array($_ext_, $_accepted_extensions_) && count($_accepted_extensions_) > 0){
        $errStr = "l extension n est pas prise en compte";
    }
    if(!is_dir(DESTINATION_FOLDER) && is_writeable(DESTINATION_FOLDER)){
        $errStr = "La destination de la photo est incorecte";
    }
    if(empty($errStr)){
        //je supprime les accents du nom de la photo--------------------------
    function supprimeAccents($chaine){

      $tofind = "ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ ";

      $replac = "AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn_";

      return(strtr($chaine,$tofind,$replac));

}$_name_=supprimeAccents($_name_);
//fin de supprimer les accents-------------------------------
// un nouveau nom pour les photos en double
$nombre=1;
    $repertoire_upload="images/";
            $nouveau_nom=$_name_."";

while (file_exists($repertoire_upload.$nouveau_nom))
{
$nombre++; // on incremente le nombre tant que le nom du fichier existe
$nouveau_nom=$nombre.$nouveau_nom;
}// fin while
//ok j'enregistre la photo dans le dossier
if(@copy($_tmp_name_,DESTINATION_FOLDER . "/" . $nouveau_nom)){
$_POST['idannonce'];
$idannonce=$_POST['idannonce'];
mysql_select_db($database_connexion, $connexion);
$updateSQL = "UPDATE an_annonce SET photo='$nouveau_nom' WHERE idannonce='$idannonce'";
            mysql_select_db($database_connexion, $connexion);
$Result1 = mysql_query($updateSQL, $connexion) or die(mysql_error());

            header("Location: " . no_error);
        } else {
            header("Location: " . yes_error);
        }
    } else {
        header("Location: " . yes_error);
    }
}
}
?>

Merci encore!

Hors ligne

#2 07-03-2010 10:11:09

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Rajout de photos à mon formulaire

Il te faudra donc rajouter un champs file dans ton formulaire :

<input type="file" name="file2" />

Avec un nom différent.

Ensuite dans le code PHP il te faudra trouver où est utilisée la variable d'index file et faire un doublon du code avec un index file2.
Et appliquer la méthode pour les autres, mais mieux vaut tester de n'en rajouter qu'une seule au cas où tu aurais des soucis. ^_-

Hors ligne

#3 07-03-2010 16:53:42

moogli
Modérateur
Inscription : 08-05-2009
Messages : 336
Site Web

Re : Rajout de photos à mon formulaire

Salut,

il te faut faire un upload multiple que j'explique ici => http://www.phpjungle.info/cours/10-comm … -http.html

il te faut penser au fait que la taille Max des photos est limitée par le poid Max des fichiers que tu peut envoyer (2Mo) et la taille Max des données sur le formulaire (8Mopar défaut).

Pour ce qui est du code :
avoir 5 champs image dans la table est une hérésie.
Tu fait table qui contient l'identifiant de l'annonce et le nom dd l'image. Pour savoir si une annonce a des image tu fait une requête sur la seconde table.
Cela te permet de faire une dynamique et de ne pas avoir une structure figée pleine de vide (Ben oui demain tu voudra peut être ne permettre que 2 photos wink )

l'avantage aussi est qu'un sple sélect te permet de savoir combien de champ image tu peut afficher et construire ton formulaire totalement dynamiquement et le tout simplement wink


@+


Il en faut peu pour être heureux pompompompompompompompompompompom

Hors ligne

#4 07-03-2010 18:35:13

dobi19
Membre
Inscription : 23-07-2009
Messages : 35

Re : Rajout de photos à mon formulaire

Merci pour vos réponses!

j'ai essayé la solution de xTG qui me convient mieux, je pense mais sans succés...

je sais pas comment faire un doublon de la variable d'index file, enfin j'ai essayé quelques trucs qui me semblé logique
en rajoutant "file2" et "$_file_" etc.. de la ligne 16 à 26 , mais des soucis ensuite au niveau de l'enregistrement dans la bdd "$nouveau_nom" etc...

Par contre moogli le upload que tu explique serait pas mal mais est ce que les noms s'enregistre dans une bdd? je vois aucune ligne
pour l'envoie dans la base de donné.

Remarque je vais essayé de l'ajouter.

Dur Dur pour moi...

Merci encore!

Dernière modification par dobi19 (07-03-2010 18:40:11)

Hors ligne

#5 08-03-2010 19:05:02

dobi19
Membre
Inscription : 23-07-2009
Messages : 35

Re : Rajout de photos à mon formulaire

Bjr,

Si quelqu'un pouvait me re écrire les parties du code à changer, et m'expliquer plus précisément le pourquoi du comment, je lui en serait éternellement reconnaissant...

Je cale complet... hmm

Snif snif...

Dernière modification par dobi19 (08-03-2010 19:05:39)

Hors ligne

#6 08-03-2010 21:09:09

xTG
GrandGourou
Inscription : 18-06-2009
Messages : 1 127
Site Web

Re : Rajout de photos à mon formulaire

Le tutorial de Moogli ne t'a pas aidé ? Je l'ai parcouru et je dois bien dire que je vois pas quoi ajouter de plus...
C'est bien commenté je trouve.

Quelles sont les parties que tu ne comprends pas ?

Hors ligne

#7 09-03-2010 09:46:45

dobi19
Membre
Inscription : 23-07-2009
Messages : 35

Re : Rajout de photos à mon formulaire

Bonjour,

ce que je n'arrive pas à faire en faite c'est enregistrer chaque nom de fichiers dans photo, photo1, photo2... Dans la base de donnée.

Comme le nom des fichiers envoyé est name="fichier[]" du coup je suis perdu...

C'est pour ça.

Hors ligne

#8 09-03-2010 10:01:13

Maljuna Kris
Infantimigulo
Lieu : Douarnenez 29100 Breizh Izel
Inscription : 08-05-2009
Messages : 2 453
Site Web

Re : Rajout de photos à mon formulaire

Saluton,
var_dump($_FILES);
inséré dans ton code devrait te donner une idée de comment manipuler ces informations.
Rappel de la doc


Gloire à qui n'ayant pas d'idéal sacro-saint,
Se borne à ne pas trop emmerder ses voisins. G. Brassens Don Juan 1976.
Avĉjo MoKo kantas
La chaîne YouTube MoKo Papy

Hors ligne

#9 09-03-2010 10:03:42

dobi19
Membre
Inscription : 23-07-2009
Messages : 35

Re : Rajout de photos à mon formulaire

En faite ce que je pensais faire c'est:

Aprés la ligne ou dans le code de moogli on déplace l'image dans le dossier, ensuite je veux
récupérer l'identifiant de mon annonce et enregistrer l'identifiant et les nom des photos pour
les enregistrer dans la base de donnée.

Mais à la ligne:

 $updateSQL = "UPDATE an_annonce SET photo='$nom_final', photo2='????' WHERE idannonce='$idannonce'";

Je suis censé mettre quoi entre les quote dans photo2='   '


                //on déplace l'image dans le répertoire final
                if (move_uploaded_file($tmp,'./images/'.$nom_final)) {


// Je récupére l'id de l'annonce
$_POST['idannonce'];
$idannonce=$_POST['idannonce'];

//J'enregistre le nom des photos et l'id dans la bdd
mysql_select_db($database_connexion, $connexion);
 $updateSQL = "UPDATE an_annonce SET photo='$nom_final' WHERE idannonce='$idannonce'";
             mysql_select_db($database_connexion, $connexion);
 $Result1 = mysql_query($updateSQL, $connexion) or die(mysql_error());


Je viens de regarder la fonction avec avec var_dump()
mais comment l'appliquer dans mon cas:


<?php
$a = ;
$b = ;
var_dump($nom_final);
?>
 

et je remplace ensuite $a et $b pour photo, photo1...

Merci!

Dernière modification par dobi19 (09-03-2010 10:39:29)

Hors ligne

#10 10-03-2010 18:06:33

dobi19
Membre
Inscription : 23-07-2009
Messages : 35

Re : Rajout de photos à mon formulaire

Bonjour,

merci encore a vous tous!

Maljuna Kris tu ne pourrais pas me donner un exemple concret avec var_dump($_FILES); s'il te plait?

Hors ligne

Pied de page des forums