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 :

transfert de fichiers vers bdd


Sujet :

PHP & Base de données

  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2021
    Messages : 5
    Points : 4
    Points
    4
    Par défaut transfert de fichiers vers bdd
    Bonjour,

    J'ai fait un formulaire où les champs sont ajouté à ma base de données. Dans mon formulaire j'ai mis qu'on puisse uploader plusieurs images. Et moi je ne peux en mettre qu'une dans ma base de données. Peut-être devrais-je joindre une autre table avec seulement des images? Je ne sais pas tellement comment m'y prendre. Je vous mets le code ici en dessous.. Si quelqu'un pouvait m'aider, ce serait chouette.

    Merci d'avance,

    Jacques

    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
         <?php 
         try
         {
            $bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8','root','');
         }
     
         catch (Exception $e)
    {
            die('Erreur : ' . $e->getMessage());
    }
     if(isset($_POST['submit_commentaire'])) {
        if(isset($_POST['ville'],$_POST['atmosphere'],$_POST['nombre'],$_POST['prix'],$_POST['commentaire']) AND !empty($_POST['ville']) AND !empty($_POST['atmosphere']) AND !empty($_POST['nombre'])  AND !empty($_POST['prix']) AND !empty($_POST['commentaire'])  AND !empty($_FILES["image"]["tmp_name"])) {
          $ville = $_POST['ville'];
          $atmosphere = $_POST['atmosphere'];
          $nombre = $_POST['nombre'];
          $prix = $_POST['prix'];
          $commentaire = $_POST['commentaire'];
          $image = file_get_contents($_FILES["image"]["tmp_name"]);
     
          if (strlen($ville) < 30) {
           $ins = $bdd->prepare('INSERT INTO  new(ville, atmosphere, nombre, prix, commentaire, image) VALUES (?,?,?,?,?,?)');
           $ins->execute(array($ville, $atmosphere, $nombre, $prix, $commentaire, $image));
           $c_msg ="<span style = 'font-size: 1.5em; color:green; font-weight: bold' ><em>Votre commentaire a bien été envoyé. Merci!</em></span>";
          }
          else{
            $c_msg = "<span style = 'font-size: 1.5em; color:red; font-weight: bold' ><em>Erreur: Votre prénom ne peut pas depasser les 20 caractères!</em></span>";
          }
        } else {
           $c_msg = "<span style = 'font-size: 1.5em; color:red; font-weight: bold' ><em>Erreur: Tous les champs doivent être complétés</em></span>";
         }
      }
     ?>
         <h1>Place ton annonnce</h1>
     
        <div class="container">
            <form method='POST' enctype="multipart/form-data">
            <input type="hidden" name="MAX_FILE_SIZE" value="100000000" />                        
                <legend>Vos coordonnées:</legend> </br></br>
                <?php 
                 if (isset($c_msg)) {
                 echo $c_msg;}
                 ?>
                 </br></br>
                <label for="ville">Ville: </label></br>
                <input type="text" name="ville" class="coordonnées" id="ville" placeholder='Saisissez la ville'/></br></br>
     
     
                <label for="atmosphere">atmosphere: </label></br>
                <select name="atmosphere" id="atmosphere">
                    <option value="Peu importe">Peu importe</option>
                    <option value="Kot studieux">Kot studieux</option>
                    <option value="Kot fêtard">Kot fêtard</option>
                    <option value="Jeunes professionnels">Jeunes professionnels</option>
     
                </select></br></br>
     
                <label for="nombre">nombre:</label></br>
                <input type="number" name="nombre" class="coordonnées" id="nombre" placeholder='Saisissez le nombre'/></br></br>
     
     
                <label for="prix">prix:</label></br>
                <textarea type="text" name="prix" class="coordonnées" id='prix'></textarea></br></br>
                <label for="commentaire">commentaire:</label></br>
                <textarea type="text" name="commentaire" class="coordonnées" id='commentaire'></textarea></br></br>
                <input type="file" name="image" multiple="true" accept=".jpg,.jpeg,.png,.ai,.eps,.pdf,.psd,.gif,.tif,.svg,.heif" id="image"/></br></br>
                <input type="submit" name ='submit_commentaire' value="Envoyer"id="bouton">
     
            </form>
        </div>

  2. #2
    Membre à l'essai
    Homme Profil pro
    graphiste
    Inscrit en
    Septembre 2021
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : graphiste
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Septembre 2021
    Messages : 13
    Points : 11
    Points
    11
    Par défaut
    Bonjour, je suis un dev amateur donc ma réponse est à prendre avec des pincettes :

    Tout d'abord visiblement vous stockez l'image en binaire.
    Effectivement, en présupposant qu'une image ne peut faire référence qu'à un seul commentaire et que vous enregistrez dans la bdd les commentaires un par un :
    je créerais une table images avec comme champs img_id, com_id (l'id du commentaire), img_nom , img_type et tout ce dont vous avez besoin sans oublier img_datas (le blob servant à récupérer votre file_get_contents).

    Ensuite côté php, insertion de votre commentaire puis récupération du dernier id inséré via un 'lastinsertid'
    qui vous servira à remplir le champ com_id de la table images lors de l'insertion de celles-ci.

    Ensuite avec une petite clause WHERE vous récupérerez vos images associées à votre commentaire.

  3. #3
    Inactif  
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2021
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2021
    Messages : 645
    Points : 1 280
    Points
    1 280
    Par défaut
    Bonjour,

    1- dans la pratique courante :
    • on enregistre le NOM / URL de l'image/fichier en Bdd
    • l'image/fichier dans un dossier



    2- si tu donnes la possibilité d'uploader plusieurs images, alors oui, il faut une autre table :
    • id_image
    • id_?? (celui de la ligne associée)
    • url_image

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2021
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Bonjour,

    j'ai fait une nouvelle table avec les sources des images seulement. Le problème, c'est que mes images ne sont pas reliés avec l'ID du commentaire. Vous m'aviez parlé de lastinsertid, mais je n'arrive pas à l'utiliser...

    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
         <?php 
         try
         {
            $bdd = new PDO('mysql:host=localhost;dbname=test;charset=utf8','root','');
         }
     
         catch (Exception $e)
    {
            die('Erreur : ' . $e->getMessage());
    }
     if(isset($_POST['submit_commentaire'])) {
        if(isset($_POST['ville'],$_POST['atmosphere'],$_POST['nombre'],$_POST['prix'],$_POST['commentaire'],$_POST['emplacement']) AND !empty($_POST['ville']) AND !empty($_POST['atmosphere']) AND !empty($_POST['nombre'])  AND !empty($_POST['prix']) AND !empty($_POST['commentaire']) AND !empty($_POST['emplacement'])) {
          $ville = $_POST['ville'];
          $atmosphere = $_POST['atmosphere'];
          $nombre = $_POST['nombre'];
          $prix = $_POST['prix'];
          $commentaire = $_POST['commentaire'];
          $emplacement = $_POST['emplacement'];
     
     
          if (strlen($ville) < 30) {
              //Database Connection
    $conn = mysqli_connect('localhost', 'root', '', 'test');
    //Check for connection error
    if($conn->connect_error){
      die("Error in DB connection: ".$conn->connect_errno." : ".$conn->connect_error);    
    }
               // Count total uploaded files
     $totalfiles = count($_FILES['file']['name']);
     
     // Looping over all files
     for($i=0;$i<$totalfiles;$i++){
     $filename = $_FILES['file']['name'][$i];
     
    // Upload files and store in database
    if(move_uploaded_file($_FILES["file"]["tmp_name"][$i],'upload/'.$filename)){
    		// Image db insert sql
    		$insert = "INSERT into files(file_name,uploaded_on,status) values('upload/$filename',now(),1)";
    		if(mysqli_query($conn, $insert)){
    		//   echo 'Data inserted successfully';
    		}
    		else{
    		  echo 'Error: '.mysqli_error($conn);
    		}
    	}else{
    		echo 'Error in uploading file - '.$_FILES['file']['name'][$i].'<br/>';
    	}
     
     }
           $ins = $bdd->prepare('INSERT INTO  new(ville, emplacement, atmosphere, nombre, prix, commentaire) VALUES (?,?,?,?,?,?)');
           $ins->execute(array($ville, $emplacement, $atmosphere, $nombre, $prix, $commentaire));
           $c_msg ="<span style = 'font-size: 1.5em; color:green; font-weight: bold' ><em>Votre commentaire a bien été envoyé. Merci!</em></span>";
          }
          else{
            $c_msg = "<span style = 'font-size: 1.5em; color:red; font-weight: bold' ><em>Erreur: Votre prénom ne peut pas depasser les 20 caractères!</em></span>";
          }
        } else {
           $c_msg = "<span style = 'font-size: 1.5em; color:red; font-weight: bold' ><em>Erreur: Tous les champs doivent être complétés</em></span>";
         }
      }
     ?>
         <h1>Place ton annonnce</h1>
     
        <div class="container">
            <form method='POST' enctype="multipart/form-data">
            <input type="hidden" name="MAX_FILE_SIZE" value="1000000000" />                        
                <legend>Vos coordonnées:</legend> </br></br>
                <?php 
                 if (isset($c_msg)) {
                 echo $c_msg;}
                 ?>
                 </br></br>
                <label for="ville">Ville: </label></br>
                <input type="text" name="ville" class="coordonnées" id="ville" placeholder='Saisissez la ville'/></br></br>
     
                <label for="emplacement">Emplacement: </label></br>
                <input type="text" name="emplacement" class="coordonnées" id="emplacement" placeholder='Saisissez emplacement'/></br></br>
     
                <label for="atmosphere">atmosphere: </label></br>
                <select name="atmosphere" id="atmosphere">
                    <option value="Peu importe">Peu importe</option>
                    <option value="Kot studieux">Kot studieux</option>
                    <option value="Kot fêtard">Kot fêtard</option>
                    <option value="Jeunes professionnels">Jeunes professionnels</option>
     
                </select></br></br>
     
                <label for="nombre">nombre:</label></br>
                <input type="number" name="nombre" class="coordonnées" id="nombre" placeholder='Saisissez le nombre'/></br></br>
     
     
                <label for="prix">prix:</label></br>
                <textarea type="text" name="prix" class="coordonnées" id='prix'></textarea></br></br>
                <label for="commentaire">commentaire:</label></br>
                <textarea type="text" name="commentaire" class="coordonnées" id='commentaire'></textarea></br></br>
                <input type="file" name="file[]" multiple="true" accept=".jpg,.JPEG,.png,.ai,.eps,.pdf,.psd,.gif,.tif,.svg,.heif" id="file"/></br></br>
                <input type="submit" name ='submit_commentaire' value="Envoyer"id="bouton">
     
            </form>
        </div>
    </body>

  5. #5
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 479
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 479
    Points : 43 302
    Points
    43 302
    Par défaut
    dans la pratique courante :

    • on enregistre le NOM / URL de l'image/fichier en Bdd
    • l'image/fichier dans un dossier
    Il est tout à fait possible d'enregistrer des fichiers dans des enregistrements BLOB (Binary Large OBject) dans une base de données. Par contre c'est pas trop recommandé, ça créé des bases lourdes, et avec des champs sur lequel aucun traitement n'est possible (tri), juste un stockage.

    jreaux62 a donc raison : dans la pratique on ne stocke qu'un nom/chemin d'accès de fichier dans la base.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  6. #6
    Inactif  
    Homme Profil pro
    Webmaster
    Inscrit en
    Juin 2021
    Messages
    645
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Webmaster
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juin 2021
    Messages : 645
    Points : 1 280
    Points
    1 280
    Par défaut
    Bonjour,

    Citation Envoyé par Jacquesdp Voir le message
    ...mes images ne sont pas reliés avec l'ID du commentaire. Vous m'aviez parlé de lastinsertid, mais je n'arrive pas à l'utiliser...
    Il faut faire les opérations dans le bon ordre :
    • 1- on fait d'abord l'INSERT du commentaire dans la table "new"
    • 2- on récupère l'id créé via mysqli_insert_id (ici : $ins->insert_id)
    • 3- on INSERT ensuite les images dans la table "files", avec cet id

  7. #7
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2021
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2021
    Messages : 5
    Points : 4
    Points
    4
    Par défaut
    Merci à tous pour votre aide. J'ai pu résoudre mon problème.

    Jacques

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

Discussions similaires

  1. Transfert des fichiers vers un serveur FTP de façon automatique.
    Par WhiteTigerZ dans le forum Entrée/Sortie
    Réponses: 8
    Dernier message: 09/06/2015, 16h36
  2. [AC-2002] Transfert de fichier vers une table existante
    Par Brett dans le forum Access
    Réponses: 2
    Dernier message: 18/02/2011, 16h53
  3. Réponses: 4
    Dernier message: 25/01/2011, 22h21
  4. Transfert de fichiers vers ftp
    Par khiloc dans le forum Langage
    Réponses: 0
    Dernier message: 08/04/2010, 11h25
  5. importe fichier vers bdd
    Par ulysse031 dans le forum SQL Procédural
    Réponses: 0
    Dernier message: 27/12/2007, 17h17

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