IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

upload multiple de photos [MySQL]


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 33
    Par défaut upload multiple de photos
    bonjour à tous. voila j'ai réussi à faire un script qui upload via un formulaire une photo, crée une miniature et enregistre les chemins vers la photo et la miniature dans une base de donnée mais voila je voudrais uploader plusieurs photos à la fois en ajoutant des champs à mon formulaire d'upload et je sais vraiment pas comment m'y prendre. je sais pas si je dois copier le code plusieurs fois de suite pour chaque photo à uploader ou bien je dois modifier le code et ajouter un truc. j'ai fais plusieurs recherche sur google et malheureusement j'ai pas trouvé. si vous pouvez m'aider ou me mettre sur la voie ce serait vraiment cool. je joins le code php qui traite le formulaire d'enregistrement dans la base de donnée et d'upload de la photo ainsi que la création de la miniature si ça peut aider.
    merci d'avance

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
      <?php
    // Parametres mysql à remplacer par les vôtres
    define('DB_SERVER', 'localhost'); // serveur mysql
    define('DB_SERVER_USERNAME', 'root'); // nom d'utilisateur
    define('DB_SERVER_PASSWORD', ''); // mot de passe
    define('DB_DATABASE', 'partners'); // nom de la base
    // Connexion au serveur mysql
    $connect = mysql_connect(DB_SERVER, DB_SERVER_USERNAME, 
    DB_SERVER_PASSWORD) 
    or die('Impossible de se connecter : ' . mysql_error());
    // sélection de la base de données
    mysql_select_db(DB_DATABASE, $connect);
    $msg_erreur = "Erreur. Les champs suivants doivent être obligatoirement remplis:
    <br/><br/>";
    $msg_ok = "Votre annonce a bien été ajoutée.<br/><br/>";
    $message = $msg_erreur;
    // vérification des champs 
    if (empty($_POST['ville'])) 
      $message .= "La ville<br/>";
    if (empty($_POST['quartier'])) 
      $message .= "Le quartier<br/>";
    if (empty($_POST['surface'])) 
      $message .= "La Surface<br/>";
    if (empty($_POST['prix'])) 
      $message .= "Le prix<br/>";
     
    $pic=($_FILES['photo_1']['name']); 
    $dossier = 'photos/'; 
    $fichier = basename($_FILES['photo_1']['name']); 
    $taille_maxi = 5000000; 
    $taille = filesize($_FILES['photo_1']['tmp_name']); 
    $extensions = array('.png', '.gif', '.jpg', '.jpeg', '.JPG'); 
    $extension = strrchr($_FILES['photo_1']['name'], '.'); 
    //Début des vérifications de sécurité... 
    if(!in_array($extension, $extensions)) //Si l'extension n'est pas dans le tableau 
    { 
    $erreur = 'Vous devez uploader un fichier de type png, gif, jpg, jpeg, txt ou doc...'; 
    } 
    if($taille>$taille_maxi) 
    { 
    $erreur = 'Le fichier est trop gros...'; 
    } 
    if(!isset($erreur)) //S'il n'y a pas d'erreur, on upload 
    { 
    //On formate le nom du fichier ici... 
    $fichier = strtr($fichier, 
    'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ', 
    'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy'); 
    $fichier = preg_replace('/([^.a-z0-9]+)/i', '-', $fichier); 
     
    // Création d'une image minature  - Redimensionner l'image
    	$taille_image = getimagesize($_FILES['photo_1']['tmp_name']); // getimagesize, récupère la hauteur et la largeur d'une image, sous forme de tableau
    	$image_choisie =  imagecreatefromjpeg($_FILES['photo_1']['tmp_name']); // Call_user_fun récupere l'identifiant de l'image, imagecreateform sauvegarde une copie
    	$nouvelle_largeur = 176; // Nouvelle largeur de mon image
     
    	$reduction = ( ($nouvelle_largeur * 100) / $taille_image[0] ); // Calule la ratio qui correspond au quotient de l'ancienne largeur par la nouvelle. C'est un %tage, on multiplie donc par 100
    	$nouvelle_hauteur = ($taille_image[1] * $reduction/100 ); // // Calule la nouvelle hauteur en application la ratio à l'ancienne hauteur. On oublie pas de diviser par 100 sinon notre dimension, reste en %
     
    //Création de la miniature
    	$nouvelle_image = imagecreatetruecolor($nouvelle_largeur , $nouvelle_hauteur); // C
    	imagecopyresampled($nouvelle_image, $image_choisie, 0 , 0 , 0 , 0 , $nouvelle_largeur, $nouvelle_hauteur, $taille_image['0'], $taille_image['1']);
    	imagedestroy($image_choisie); // Supprimer notre image de sauvegarde
     
    	imagejpeg($nouvelle_image, 'photos/small/' . $fichier , 176);
        imagejpeg($image_choisie , 'photos/' . $fichier . 'FullImage' , 176);
     
    if(move_uploaded_file($_FILES['photo_1']['tmp_name'], $dossier . $fichier)) //Si la fonction renvoie TRUE, c'est que ça a fonctionné... 
    { 
    echo '<br/><br/>photo ajouté avec succès !'; 
    } 
    else //Sinon (la fonction renvoie FALSE). 
    { 
    echo '<br/><br/>Echec de l\'upload !'; 
    } 
    } 
    else 
    { 
    echo $erreur; 
    } 
     
    // si un champ est vide, on affiche le message d'erreur
    if (strlen($message) > strlen($msg_erreur)) {
     
      echo $message;
     
    // sinon c'est ok 
    } else {
     
      foreach($_POST as $index => $valeur) {
        $$index = mysql_real_escape_string(trim($valeur));
      }
     
      $sql = "INSERT INTO annonce VALUES ('', '".$type_bien."', '".$type_ope."', 
        '".$ville."', '".$quartier."', '".$surface."', '".$nombre_chambre."',
        '".$prix."', '".$pic."', '".$fichier."')";
      $res = mysql_query($sql);
     
      if ($res) {
        echo $msg_ok;
      } else {
        echo mysql_error();
      }
     
    }
    ?>

  2. #2
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonjour,

    Regarde le manuel php.

    A+.

  3. #3
    Membre émérite Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Par défaut
    dans ton formulaire :
    tu remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	<input type='file' name='photo_1'>
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	<input type='file' name='photo_1[]'>
    et tu ajoute d'autres input identique (autant que tu veux télécharger des fichiers en une seule fois.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    	<input type='file' name='photo_1[]'>
            <input type='file' name='photo_1[]'>
    	<input type='file' name='photo_1[]'>
    dans ton php :
    au lieu de $_FILES['photo_1'] mettre $Fichier , $_FILES['photo_1']['name'] devient $Fichier['name'] , $_FILES['photo_1']['tmp_name'] devient $Fichier['tmp_name'], etc... */
    tu ajoute les lignes (en gras italique dans le code si dessous)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    <?php
    ....
    if (empty($_POST['prix'])) 
      $message .= "Le prix<br/>";
     
    //var_dump($_FILES['photo_1']); /*décommenter pour voir le contenu*/
    $countFiles=count($_FILES['photo_1']['name']);/* pour obtenir le nombre de fichier téléchargés */
    foreach($_FILES['photo_1'] as $key => $value) /* parcours le tableau des fichiers */
    {
            for($Indice=0;$Indice<$countFiles;$Indice++) /* pour chaque fichier */
            {
                 $Fichiers[$Indice][$key]=$_FILES['photo_1'][$key][$Indice]; /* construit un tableau avec les informations */
            }
    }
    //var_dump($Fichiers); /*décommenter pour voir le contenu*/
    for($Indice=0;$Indice<$countFiles;$Indice++) /* pour chaque fichier */
    {
            $Fichier=$Fichiers[$Indice];
            if($Fichier['error']==0) /* si il n'y a pas d'erreur */
            {
    	/* au lieu de $_FILES['photo_1'] mettre $Fichier */
            /* $_FILES['photo_1']['name'] devient $Fichier['name'] */
            /* $_FILES['photo_1']['tmp_name'] devient $Fichier['tmp_name'] */
            /* etc... */
            ...
            ton traitement pour le fichier
            ...
    
            } /* ne pas oublier de fermer le if */
    } /* ne pas oublier de fermer le for */ 
    ....
    ?>

  4. #4
    Membre émérite Avatar de patrickbaras
    Homme Profil pro
    Informaticien (à sa mémère).
    Inscrit en
    Septembre 2010
    Messages
    525
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien (à sa mémère).
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 525
    Par défaut
    ptit explication:
    la <form> envois :
    $_FILES['photo_1']['name'][0] = nom_du_premier_fichier
    $_FILES['photo_1']['name'][1] = nom_du_deuxiéme_fichier
    ...
    $_FILES['photo_1']['name'][x] = nom_du_xième_fichier

    $_FILES['photo_1']['type'][0] = type_du_premier_fichier
    $_FILES['photo_1']['type'][1] = type_du_deuxiéme_fichier
    ...
    $_FILES['photo_1']['type'][x] = type_du_xième_fichier
    idem pour
    $_FILES['photo_1']['tmp_name'][x]
    $_FILES['photo_1']['error'][x]
    $_FILES['photo_1']['size'][x]

    on transforme le tout dans un tableau $Fichiers pour avoir
    $Fichiers[0]['name']= nom_du_premier_fichier
    $Fichiers[0]['type']= type_du_premier_fichier
    $Fichiers[0]['tmp_name']= tmp_name_du_premier_fichier
    $Fichiers[0]['error']= error_du_premier_fichier
    $Fichiers[0]['size']= size_du_premier_fichier

    $Fichiers[1]['name']= nom_du_deuxiéme_fichier
    $Fichiers[1]['type']= type_du_deuxiéme_fichier
    $Fichiers[1]['tmp_name']= tmp_name_du_deuxiéme_fichier
    $Fichiers[1]['error']= error_du_deuxiéme_fichier
    $Fichiers[1]['size']= size_du_deuxiéme_fichier
    etc ...

    ensuite on parcours $Fichiers
    en on assigne chaque $Fichiers[x] à $Fichier
    que l' on le traite avec $Fichier['name'],$Fichier['type'],$Fichier['tmp_name'],$Fichier['error'],$Fichier['size']

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 33
    Par défaut
    vraiment merci patrickbaras pour ta réponse. je vais essayer ça ce soir et après je reviens te dire si ça a marché. c'est cool d'avoir pris le temps d'expliquer

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2012
    Messages
    33
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Sénégal

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2012
    Messages : 33
    Par défaut
    bonjour et merci à patrickbaras pour ton aide. en suivant tes conseils j'ai réussi à uploader 4 photos en même temps et à créer pour chacune d'elles une miniature. mais un nouveau problème à surgit parce que avant les modifications mon code me permettait d'enregistrer en même temps le chemin vers la photo et la miniature dans la base de donnée. le problème c'est que maintenant il y a 4 photos et 4 miniatures à enregistrer dans la base. j'ai créé de nouveaux champs dans la base mais j'ai des problèmes avec le code dans la mesure où $pic enregistre le chemin de la photo et $fichier le chemin vers la miniature. ma question est comment enregistrer les autres liens dans photo2, photo3, photo4 et mini2, mini3, mini4.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    $sql = "INSERT INTO annonce VALUES ('', '".$type_bien."', '".$type_ope."', 
        '".$ville."', '".$quartier."', '".$surface."', '".$nombre_chambre."',
        '".$prix."', '".$pic."', '".$fichier."')";
      $res = mysql_query($sql);

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Upload] Upload multiple files
    Par aymanov dans le forum Langage
    Réponses: 17
    Dernier message: 22/12/2008, 09h38
  2. [Upload] traitement upload multiples
    Par renaud26 dans le forum Langage
    Réponses: 7
    Dernier message: 23/03/2006, 19h20
  3. Réponses: 2
    Dernier message: 27/02/2006, 10h18
  4. [demande] upload multiples
    Par pIch dans le forum Général Java
    Réponses: 6
    Dernier message: 21/07/2005, 15h47
  5. [Upload] upload multiple
    Par mat10000 dans le forum Langage
    Réponses: 3
    Dernier message: 16/06/2005, 17h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo