Partage
  • Partager sur Facebook
  • Partager sur Twitter

Ajouter une image à une base de donnée Mysql

Sujet résolu
    19 septembre 2019 à 21:59:10

    Hello tout le monde !

    Je débute en PHP (vous vous en doutez) et j'essaie de faire une galerie d'image.

    Pour chaque image, j'aurais besoin d'afficher le nom et une description.

    	if (!isset($_SESSION['admin']) || empty($_SESSION['admin'])) {
    		header('location:index.php');
    	}
    	if (isset($_POST) AND !empty($_POST)) {
    		if (!empty($_POST['name']) AND !empty($_POST['content']) AND !empty($_POST['size'])) {
    			$req = $db->prepare('INSERT INTO tableaux(name, content, size) VALUES(:name, :content, :size)');			
    			$req->bindValue(':name', $_POST['name'], PDO::PARAM_STR);
    			$req->bindValue(':content', $_POST['content'], PDO::PARAM_STR);
    			$req->bindValue(':size', $_POST['size'], PDO::PARAM_STR);
    			$req->execute();
    		}
    	}



    La première partie fonctionne très bien, les infos complétés sont bien reprises dans la base de donnée... le problème c'est l'image.

    J'aimerais que l'image soit renomée "img_(id du tableau).jpg".

    voilà mon code:

    if ( isset($_FILES['up_tab']) AND !empty(($_FILES['up_tab']['name'])) )
             {
    			 $tailleMax = 2097152; //2mo
                 $extensionValides = array ('jpg', 'jpeg', 'gif', 'tif', 'png');
    			 if ($_FILES['up_tab']['size'] <= $tailleMax)
    			 {
    				 $extensionUpload = strtolower(substr(strrchr($_FILES['up_tab']['name'], '.'), 1));
    				 if (in_array($extensionUpload, $extensionValides))
    				 {
    					 $chemin = "images/tableaux/"."img_ "."['id']"."." .$extensionUpload;
    					 $resultat = move_uploaded_file($_FILES['up_tab']['tmp_name'],$chemin);
    					 if ($resultat){
    						 $updatetab = $db->prepare('UPDATE tableaux SET img_tab = :img_tab WHERE id = :id');
    						 $updatetab->execute([
    						 'up_tab' => "img_". "." .$extensionUpload,
    						 'id' => $_GET['id'],
    						 ]);
    					 }
    					 else{
    						 $msg = "erreur durant l'importation";
    					 }
    				 }
    				 else{
    					 $msg = "pas le bon format";
    				 
    			 }
    			 }
    			 else			 {
    				 $msg = "fichier supérieur à 2mo";
    			 }
    			 
             }


    Mais apparemment je m'y prends mal avec "'id' => $_GET['id']" et j'arrive pas à trouver la solution.

    et voilà pour le formulaire:


    <form enctype="multipart/form-data" action="#" method="post">
    							<input type="file" name="up_tab" size=50 />
    		 <h4 style="margin-bottom:10px;">Le nom :</h4>
    				<input type="texte" name="name" style="margin-bottom:10px;" value=""/>
    				<h4 style="margin-bottom:10px;">La description :</h4>
    				<textarea name="content" style="margin-bottom:10px;"></textarea>
    				<h4 style="margin-bottom:10px;">Les dimensions :</h4>
    				<input type="texte" name="size" style="margin-bottom:10px;" value=""/>
             <input type="submit" value="Envoyer" />
          </form>


    si l'un d'entre vous pourrez m'aider ca serait super,

    Merci d'avance !



    • Partager sur Facebook
    • Partager sur Twitter
      19 septembre 2019 à 23:01:59

      Salut, pourquoi tu utilises "$_GET['id']" ?

      Ton formulaire utilise la méthode post si je me trompe pas.

      • Partager sur Facebook
      • Partager sur Twitter

      OMG OMG OMG

        20 septembre 2019 à 8:44:18

        Oui j'utilise la méthode post, et ce que j'essaie de faire c'est récupérer l'id du post pour renommer mon fichier.
        • Partager sur Facebook
        • Partager sur Twitter
          20 septembre 2019 à 10:14:37

          Bonjour.

          Soit tu renseignes l'action de ton formulaire pour y mettre l'idée en Get ou tu utilises un champ input hidden et le passer en Post

          • Partager sur Facebook
          • Partager sur Twitter
            20 septembre 2019 à 11:33:38

            Merci Aurélien pour ton aide..

            Je suis pas sur de bien comprendre ta réponse (j'avais prévenu, je débute) mais je vais garder le formulaire en Post et donc option pour l'input hidden...

            Comme je connais pas cette méthode j'ai regardé ce que je pouvais trouver la dessus sur google et je vois que je dois rajouter une value.

            Mais comment mettre la value de l'id puisque je ne la connais pas encore ?

            j'ai tenté un :

            "input type="hidden" name"idimage" id="idimage" value="#">


            Evidemment j'ai une erreur PDO mais le fichier s'upload bien et il est nommé: img_['id'].jpg

            • Partager sur Facebook
            • Partager sur Twitter
              20 septembre 2019 à 12:35:49

              A quoi corresponds cet "id" que tu souhaites mettre dans la table ?
              • Partager sur Facebook
              • Partager sur Twitter
                20 septembre 2019 à 12:38:38

                Salut,

                une fois l'INSERT réalisé, PDO te fourni une méthode utile:

                lastinsertid()

                https://www.php.net/manual/fr/pdo.lastinsertid.php

                Bon dév

                • Partager sur Facebook
                • Partager sur Twitter
                  20 septembre 2019 à 14:32:58

                  Merci pour votre aide. 

                  Voici le code mis à jour: 

                  if ( isset($_FILES['up_tab']) AND !empty(($_FILES['up_tab']['name'])) )
                           {
                  			 $tailleMax = 2097152; //2mo
                               $extensionValides = array ('jpg', 'jpeg', 'gif', 'tif', 'png');
                  			 if ($_FILES['up_tab']['size'] <= $tailleMax)
                  			 {
                  				 $extensionUpload = strtolower(substr(strrchr($_FILES['up_tab']['name'], '.'), 1));
                  				 if (in_array($extensionUpload, $extensionValides))
                  				 {
                  					 $path = "images/tableaux/"."img_ "."['id']"."." .$extensionUpload;
                  					 $resultat = move_uploaded_file($_FILES['up_tab']['tmp_name'],$path);
                  					 if ($resultat){
                  						 $updatetab = $db->prepare('UPDATE tableaux SET img_tab = :img_tab WHERE id = :id');
                  						 $updatetab->execute([
                  						 'up_tab' => "img_". "." .$extensionUpload,
                  						 'id' => $db->lasInsertId(),
                  						 ]);
                  					 }
                  					 else{
                  						 $msg = "erreur durant l'importation";
                  					 }
                  				 }
                  				 else{
                  					 $msg = "pas le bon format";
                  				 
                  			 }
                  			 }
                  			 else			 {
                  				 $msg = "fichier supérieur à 2mo";
                  			 }
                  			 
                           }

                  et le formulaire:

                  <form enctype="multipart/form-data" action="#" method="POST">
                  							<input type="file" name="up_tab"/>
                  							<input type="hidden" name="id" value=""/>
                  		 <h4 style="margin-bottom:10px;">Le nom :</h4>
                  				<input type="texte" name="name" style="margin-bottom:10px;" value=""/>
                  				<h4 style="margin-bottom:10px;">La description :</h4>
                  				<textarea name="content" style="margin-bottom:10px;"></textarea>
                  				<h4 style="margin-bottom:10px;">Les dimensions :</h4>
                  				<input type="texte" name="size" style="margin-bottom:10px;" value=""/>
                           <input type="submit" value="Envoyer" />
                        </form>

                  j'ai bien l'image qui s'upload, le fichier est toujours nommé: img_['id'].jpg

                  And in result: 

                  "Fatal error: Uncaught Error: Call to undefined method PDO::lasInsertId()" 



                  • Partager sur Facebook
                  • Partager sur Twitter
                    20 septembre 2019 à 14:39:12

                    1) le message est tronqué ;)

                    2) relis tu as fait une coquille PDO::lasInsertId()

                    3) pour le nom, PHP a suivi ce que tu a dév:

                    <?php
                    $path = "images/tableaux/"."img_ "."['id']"."." .$extensionUpload;



                    -
                    Edité par christouphe 20 septembre 2019 à 14:40:32

                    • Partager sur Facebook
                    • Partager sur Twitter
                      20 septembre 2019 à 15:23:02

                      Merci à vous pour votre patience et pour m'avoir mis sur la voie

                      je poste ici le code mis à jour:

                      if ( isset($_FILES['up_tab']) AND !empty(($_FILES['up_tab']['name'])) )
                               {
                      			 $tailleMax = 2097152; //2mo
                                   $extensionValides = array ('jpg', 'jpeg', 'gif', 'tif', 'png');
                      			 $lastid = $db -> lastInsertId();
                      			 if ($_FILES['up_tab']['size'] <= $tailleMax)
                      			 {
                      				 $extensionUpload = strtolower(substr(strrchr($_FILES['up_tab']['name'], '.'), 1));
                      				 if (in_array($extensionUpload, $extensionValides))
                      				 {
                      					 $path = "images/tableaux/"."img_" .$lastid.".".$extensionUpload;
                      					 $resultat = move_uploaded_file($_FILES['up_tab']['tmp_name'],$path);
                      					 if ($resultat){
                      						 $updatetab = $db->prepare('UPDATE tableaux SET img_tab = :img_tab WHERE id = :id');
                      						 //$updatetab->execute([
                      						 //'up_tab' => "img_". "." .$extensionUpload,
                      						 //'id' => $db->lastInsertId(),
                      						 //]);
                      					 }
                      					 else{
                      						 $msg = "erreur durant l'importation";
                      					 }
                      				 }
                      				 else{
                      					 $msg = "pas le bon format";
                      				 
                      			 }
                      			 }
                      			 else			 {
                      				 $msg = "fichier supérieur à 2mo";
                      			 }
                      			 
                               }


                      Désormais l'image s'upload et se renomme correctement !

                      • Partager sur Facebook
                      • Partager sur Twitter

                      Ajouter une image à une base de donnée Mysql

                      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                      • Editeur
                      • Markdown