Ce forum est maintenant fermé, seule cette archive statique reste consultable.
  FORUM Rue-Montgallet.com
  Programmation
  Php - Sql

  Comment enregistrer une image dans un base de donnée

Bas de page
Auteur Sujet :

Comment enregistrer une image dans un base de donnée

n°12743
twist85
Profil : Jeune recrue
Posté le 25-04-2005 à 17:35:07  
 

Bonjour à toutes et à tous !
 
Voila je vous expose mon probléme : je dois créer une galerie de musique qui se présente sous forme de tableau ; je m'explique :
 
titre de l'artiste/de l'album - jacquette(image) - production
 
Il s'agit d'une partie administrateur d'un site déjà existant.  
 
J'ai procédé de la sorte :  
 
l'admin peut entrer donc le titre de l'artiste et de l'album et le nom de la production. Ces données vont s'enregistrer dans une base de donnée dans un ordre bien précis : titre-production (je n'ai pas encore traité la partie image (jacquette)
Aprés avoir validé ces données il peut visualiser le contenue enregistré. Pour cela j'ai créé une page PHP qui récupére les données enregistré et ki les affiches ligne par ligne dans un tableau.
 
Pour la partie Image Jackette : j'ai créé un systéme d'upload de fichier en HTML et PHP cela permet donc à l'admin de se connecté de nimporte kel poste et d'exporté ses images de n'importe ou.
 
MAIS voila mon probléme les images sont seulement uploadées dans un dossier qui est stoké sur le serveur. MAIS je souhaite donc enregistrer les images dans la base de donnée pour ensuite procédé de la même maniere que la visalisation des données qui ont été enregistré pour les titres des albums les auteurs et les productions.
Donc pour être plus compréhensible je voudrais grace à mon script PHP récupérer les données enregistrées dans la BDD afin d'avoir dans un tableau chaque ligne qui comprendrait : Le titre de l'album / l'artiste - les jacquettes de l'album - la production.  et bien sur les unes en dessous des autres.
 
J'espere avoir été assez clair afin que vous puissiez m'aider le mieu possible.
 
Je vous remercie

mood
Pub
Posté le 25-04-2005 à 17:35:07  
 

n°12744
darkkat
yonk
Profil : Membre
Posté le 25-04-2005 à 17:57:59  
 

:hello:  
 
si tu tiens absolument a les stockes dans ta bdd, il suffit que tu ai un champ (celui ou tu veux stocker les imgs) ayant comme type BLOB (pour MySQL, les autres je sais pas) ou une de ses alternatives (TINYBLOB, LONGBLOB ...) => ce type de champ peut contenir des objets binaires
 
par contre pour visualiser les images je me demande si il ne faut pas utiliser php. exemple: <img src="page.php?idimage=99" /> et que page.php soit :  

Code :
  1. <?php
  2. //envoi du type mime de ton image: png, jpeg ...
  3. //recherche de l'image dans la bdd et extraction
  4. ?>


 
je te laisse voir pour ca ;)


Message édité par darkkat le 25-04-2005 à 18:02:03
n°12768
twist85
Profil : Jeune recrue
Posté le 26-04-2005 à 11:07:57  
 

Merci pour ces infos mais il m'en faudrait d'avantage stp :) .
 
voila mon code du formulaire HTML qui permet d'uploader mon IMAGE sur le serveur :
 

Code :
  1. <html<html>
  2. <head>
  3. <title>Untitled Document</title>
  4. <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
  5. </head>
  6. <body>
  7. <div align="center"><font size="5"><em>Upload des fichiers Images</em></font></div><br><br><br>
  8. <center><form enctype="multipart/form-data" action="/testimg/recupimg.php" method="post">
  9.             <input type="hidden" name="MAX_FILE_SIZE" value="100000000" />
  10.             Transfèrer le fichier <input type="file" name="monfichier" />
  11.             <input type="submit" />
  12.         </form></center>
  13. </body>
  14. </html>


 
Donc voila en fait le script HTML qui permet donc à l'administrateur d'uploader le fichier désiré et de l'envoyer sur le serveur.
 
Quant au script PHP :
 

Code :
  1. <?php
  2. // récupération des données du formulaires
  3. $url = $_POST['monfichier'];
  4. // connexion à votre base de donnée
  5. $connexion = mysql_connect("localhost","root","" );
  6. mysql_select_db("Prod",$connexion);
  7. // on créer la requête SQL, pour ensuite l'envoyer
  8. $requete = ("insert into img values('$url')" );
  9. mysql_query ($requete);
  10. echo "L'url de l'image a été enregistrées !";
  11. // fermeture de la connexion vers Mysql
  12. mysql_close();
  13.     $repertoireDestination = "img/";
  14.     $nomDestination        = $_FILES["monfichier"]["name"];
  15.    
  16.     if (is_uploaded_file($_FILES["monfichier"]["tmp_name"])) {
  17.         if (rename($_FILES["monfichier"]["tmp_name"],
  18.                    $repertoireDestination.$nomDestination)) {
  19.       echo "<br>";
  20.     echo "<b>";
  21.             echo "Le fichier temporaire ".$_FILES["monfichier"]["tmp_name"].
  22.                  " a été déplacé vers ".$repertoireDestination.$nomDestination;
  23.         } else {
  24.     echo "<br>";
  25.     echo "<b>";
  26.             echo "Le déplacement du fichier temporaire a échoué".
  27.                  ", le fichier est déjà uploadé dans le dossier ".$repertoireDestination;
  28.        }         
  29.     } else {
  30.     echo "<br>";
  31.     echo "<b>";
  32.        echo "Le fichier n'a pas été uploadé (trop gros ou inexistant)";
  33.     }
  34. ?>


 
Le voici  :) si vous pouvez les copier et les essayer avec easyphp en créant vite fait une tite base de donnée à 1 champ pour que vous puissiez voir l'erreur qui aparait.
 
Je n'ai pas trop compris le system concernant l'envoie du Type Mime de l'image si tu pourrais m'expliquer ou me donner un exemple. Pour la 2éme partie du sript php concernant la recherche de l'image et l'extraction de celle-ci de la base de donnée il n'y a pas de pb .
 
Merci pour tout a tt de suite :)

n°12777
darkkat
yonk
Profil : Membre
Posté le 26-04-2005 à 15:31:57  
 

je vois pas l'interet de deplacer le fichier ;)
il suffirait de l'uploader (ok), de le recuperer avec php, de faire des tests (si il y en a a faire, par exemple: c'est bien une image, taille < un poids ...) puis de la mettre dans la bdd parceque la on peut vite avoir des erreurs ;)
 
 
 
EDIT: en fait en y reflechissant un peu, c'est quand meme plus simple et ca prend moins de place de le mettre sous forme de fichier, en plus t'as presque deja tout le code  :sol:


Message édité par darkkat le 26-04-2005 à 16:01:49
n°12779
lukefab
meuh
Profil : Habitué
Posté le 26-04-2005 à 16:27:39  
 

Il est fortement recommandé de ne pas stocker le fichier binaire dans la BDD mais simplement le chemin d'accès au fichier qui se trouve dans un répertoire.
D'abord pour question de performance évidemment, il y a une différence entre une centaine de caractères du chemin et la centaine de Ko d'une image.
Deuxièment, plus terre à terre, lors d'un dump de la base, c'est le bordel parce qu'on a des données binaires dans du fichier texte.


---------------
Opera 8.51 pour Windows, Linux, FreeBSD, Solaris, Mac OS X.
www.opera.com , c'est bon et sans morceau de pub dedans, mangez-en.
Un pingouin aux pommes ?
n°12782
darkkat
yonk
Profil : Membre
Posté le 26-04-2005 à 18:11:01  
 

ben ouais :)

n°12806
twist85
Profil : Jeune recrue
Posté le 27-04-2005 à 13:10:16  
 

Merci j'ai réussi mais il me reste encore un pb :( snif snif :(.
 
En fait voila mes titres prod et commentaire aparaisse ainsi que la jaquette sur une même ligne mais ce qu'il se passe c'est lorsque j'enregistre une nouvelle production donc il y a une 2éme ligne qui apparait avec le nom des artist prod et commentaire mais l'image retourne a la ligne j'ai bien verifier la tructure de mon tableau et je pense qu'il y a un pb avec mon echo "</table>"; mais je ne c pas ou si vous pouvez essayer de comprendre mon pb dans ce quelquels lignes svp :
 

Code :
  1. // on se connecte à notre base
  2. $connexion = mysql_connect("localhost","root","" );
  3. mysql_select_db("Prod",$connexion);
  4. // lancement de la requête (on impose aucune condition puisque l'on désire obtenir la liste complète des propriétaires
  5. $sql = ("SELECT * FROM nom_prod" );
  6. // on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)
  7. $requete = mysql_query($sql);
  8. echo "<table><tr><td><center><h1>&nbsp;&nbsp;&nbsp; Artiste  </center></td><td><center><h1>&nbsp;&nbsp;&nbsp;  Production  </center></td><td><center><h1>&nbsp;&nbsp;&nbsp;  Commentaire  </center>
  9. </td><td><center><h1>&nbsp;&nbsp;&nbsp;  Jacquette</center></td></tr></h>";
  10. // on va scanner tous les tuples un par un
  11. while ($row = mysql_fetch_array($requete))
  12. {
  13. // on affiche les résultats
  14. echo "<tr><td><center>";
  15. echo $row["artist"];
  16. echo "</td></center>";
  17. echo "<td><center>";
  18. echo $row["production"];
  19. echo "</td></center>";
  20. echo "<td><center>";
  21. echo $row["comment"];
  22. echo "</td></center>";
  23. }
  24. // lancement de la requête (on impose aucune condition puisque l'on désire obtenir la liste complète des propriétaires
  25. $sql1 = ("SELECT * FROM img" );
  26. // on lance la requête (mysql_query) et on impose un message d'erreur si la requête ne se passe pas bien (or die)
  27. $requete1 = mysql_query($sql1);
  28. // on va scanner tous les tuples un par un
  29. while ($row = mysql_fetch_array($requete1))
  30. {
  31. // on affiche les résultats
  32. echo "<td><center>";
  33. echo "<img src=";
  34. echo '"images/';
  35. echo $row["repimage"];
  36. echo '">';
  37. echo "</img>";
  38. echo "</center></tr>";
  39. }
  40. echo "</table>";
  41. mysql_close ();
  42. ?>


 
Je suis encore novice dans ce langage et j'ai du mal à voir ce qu'il se passe j'espere que vous avez compris mon probléme je récapitule : le 1er enregistrement tout ce passe bien mais au second l'image n'est pas alignée avec le reste de la ligne en effet elle retourne à la ligne.
 
Merci de trouver une réponse à mon probléme ^^

n°12808
darkkat
yonk
Profil : Membre
Posté le 27-04-2005 à 13:41:50  
 

Code :
  1. <?php
  2. echo "<table>\n<tr>\n<td align='center'><h1>&nbsp;&nbsp;&nbsp; Artiste  </h1></td>\n<td align='center'><h1>&nbsp;&nbsp;&nbsp;  Production  </h1></td>\n<td align='center'><h1>&nbsp;&nbsp;&nbsp;  Commentaire  </h1></td>\n<td align='center'><h1>&nbsp;&nbsp;&nbsp;  Jacquette </h1></td>\n</tr>";
  3. //connexion a la bdd ...
  4. //requete pour tout
  5. $sql = ("SELECT * FROM `nomprod`,`img`" );
  6. $requete = mysql_query($sql);
  7. //traitement du resultat
  8. while ($row = mysql_fetch_array($requete))
  9. {
  10. // affichage des resultats
  11. echo "\n",
  12. '<tr><td align="center">',$row["artist"],'</td>',
  13. '<tr><td align="center">',$row["production"],'</td>',
  14. '<tr><td align="center">',$row["comment"],'</td>',
  15. '<tr><td align="center"><img src="images/',$row["repimage"],'" /></td>',
  16. "\n</tr>";
  17. }
  18. echo "\n</table>";
  19. ?>


 
EDIT:
commentaire: les images se mettent dans des balises auto-fermantes, c'est a dire comme ca "<img />" c'est comme les retour a la ligne "<br />" ;)


Message édité par darkkat le 27-04-2005 à 13:42:56
n°12809
twist85
Profil : Jeune recrue
Posté le 27-04-2005 à 14:09:02  
 

Merci c super simpa c carrement plus clair par contre il y a une erreur que je ne comprend pas :
 
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\program files\easyphp1-8\www\padminprod\lookprod.php on line 29
 
tu pourrais me donner d'avantage de détails sur cette erreur stp ?

n°12810
darkkat
yonk
Profil : Membre
Posté le 27-04-2005 à 14:57:00  
 

essaye ca alors pour la requete
 
$sql = ("SELECT artist.nomprod, production.nomprod, comment.nomprod, repimage.img FROM `nomprod`,`img`" );

n°12811
twist85
Profil : Jeune recrue
Posté le 27-04-2005 à 15:12:20  
 

arf ct bien tenté héhé mé oué c tjs la même erreur mais je comprend vraiment pas d'ou sa vien. arf chui dégouté si pré du bute et sa me met tjs la même erreur.
 
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in c:\program files\easyphp1-8\www\padminprod\lookprod.php on line 29

n°12812
twist85
Profil : Jeune recrue
Posté le 27-04-2005 à 15:32:51  
 

En fait c bon g trouvé le pb mais ce qui se passe maintenant ^^ (hé oui encore dé pb c'est qu'il m'affiche a partir du 3éme enregistrement il m'affiche 2 fois les 3 1er engregistrement j'ai donc 6 lignes au lieu de 3.  
 
On y est presque mais pk c'est doubles ?

n°12813
darkkat
yonk
Profil : Membre
Posté le 27-04-2005 à 16:27:20  
 

va voir dans ta bdd ;)

n°12814
darkkat
yonk
Profil : Membre
Posté le 27-04-2005 à 16:27:46  
 

sinon passe le code de ta nouvelle page et la bdd avec

n°12816
twist85
Profil : Jeune recrue
Posté le 27-04-2005 à 16:52:33  
 


 
Dans ma base de donnée il n'y a pas de doubles ce que je comprend pas c'est que les doubles viennent dés que j'ai plus de  production d'enregistré.
 
 
Voici le code de mon formulaire nomée "pprod.html":  

Code :
  1. <html>
  2. <head>
  3. <title>Page Admin Production</title>
  4. </head>
  5. <body>
  6. <div align="center">
  7.   <p><font size="5">Insérer une nouvelle production </font></p>
  8.   <div align="left">
  9.     <form action="/padminprod/transdone.php" method="post">
  10.       <table width="103%" border="0">
  11.         <tr>
  12.           <td><strong><font size="4">- Information production et </font></strong></td>
  13.           <td><strong><font size="4">artiste -</font></strong></td>
  14.           <td>&nbsp;</td>
  15.           <td>&nbsp;</td>
  16.         </tr>
  17.         <tr>
  18.           <td width="22%">Nom de la production</td>
  19.           <td width="36%"><p>&nbsp; </p>
  20.             <p>
  21.               <input type="text" name="prod" size=30 maxlength=40>
  22.             </p>
  23.             <p>&nbsp;</p></td>
  24.           <td width="13%">&nbsp;</td>
  25.           <td width="29%">&nbsp;</td>
  26.         </tr>
  27.         <tr>
  28.           <td>Nom de l'artiste</td>
  29.           <td><p>&nbsp; </p>
  30.             <p>
  31.               <input type="text" name="artist" size=30 maxlength=40>
  32.             </p>
  33.             <p>&nbsp;</p></td>
  34.           <td>&nbsp;</td>
  35.           <td>&nbsp;</td>
  36.         </tr>
  37.         <tr>
  38.           <td>Commentaires</td>
  39.           <td><textarea name="comm" cols=31 rows=4></textarea> </td>
  40.           <td>&nbsp;</td>
  41.           <td>&nbsp;</td>
  42.         </tr>
  43.         <tr>
  44.           <td>&nbsp;</td>
  45.           <td>&nbsp;</td>
  46.           <td>&nbsp;</td>
  47.           <td>&nbsp;</td>
  48.         </tr>
  49.         <tr>
  50.           <td><div align="left"></div></td>
  51.           <td><div align="center">
  52.               <input name="submit" type="submit" value="Envoyer">
  53.             </div></td>
  54.           <td><input name="reset" type="reset" value="Recommencer"></td>
  55.           <td>&nbsp;</td>
  56.         </tr>
  57.       </table>
  58.     </form>
  59. <p><strong><font size="4">- Uploader les Jacquettes - </font></strong></p>
  60.         <form enctype="multipart/form-data" action="/padminprod/transjac.php" method="post">
  61.             <input type="hidden" name="MAX_FILE_SIZE" value="100000000" />
  62.             Transfère le fichier <input type="file" name="fichier" />
  63.             <input type="submit" />
  64.         </form>
  65. <p><strong><font size="4">- Regarder les productions existantes - </font></strong></p>
  66. <p align="center"> <a href="lookprod.php">
  67.   <input type="submit" value="Regarder"/>
  68.   </a> </p>
  69. </body>
  70. </html>


 
 
 
Voici le code de ma page qui affiche le contenue de ma table nomée lookprod.php:  
 

Code :
  1. <?php
  2. echo "<table>\n<tr>\n<td align='center'><h1>&nbsp;&nbsp;&nbsp; Artiste
  3.    </h1></td>\n<td align='center'><h1>&nbsp;&nbsp;&nbsp;  Production
  4.    </h1></td>\n<td align='center'><h1>&nbsp;&nbsp;&nbsp;  Commentaire
  5.    </h1></td>\n<td align='center'><h1>&nbsp;&nbsp;&nbsp;  Jacquette
  6.    </h1></td>\n</tr>";
  7. // on se connecte à notre base
  8. $connexion = mysql_connect("localhost","root","" );
  9. mysql_select_db("Prod",$connexion);
  10. //requete pour tout  
  11. $sql = ("SELECT * FROM `nom_prod`,`img`" );
  12. $requete = mysql_query($sql);
  13. //traitement du resultat  
  14. while ($row = mysql_fetch_array($requete))
  15. {
  16. // affichage des resultats  
  17. echo "\n",
  18. '<tr><td align="center">',$row["artist"],'</td>',
  19. '<td align="center">',$row["production"],'</td>',
  20. '<td align="center">',$row["comment"],'</td>',
  21. '<td align="center"><img src="images/',$row["repimage"],'" /></td>',
  22. "\n</tr>";
  23. }
  24. echo "\n</table>";
  25. mysql_close();
  26. ?>


 
Mon code de la page pour uploader les jacquettes nomée transjac.php:
 

Code :
  1. <?php
  2.     $repertoireDestination = "images/";
  3.     $nomDestination        = $_FILES["fichier"]["name"];
  4.    
  5.     if (is_uploaded_file($_FILES["fichier"]["tmp_name"])) {
  6.         if (rename($_FILES["fichier"]["tmp_name"],
  7.                    $repertoireDestination.$nomDestination)) {
  8.             echo "Le fichier a été déplacé vers ".$repertoireDestination.$nomDestination;
  9.         } else {
  10.             echo "Le déplacement du fichier temporaire a échoué".
  11.                  " vérifiez l'existence du répertoire ".$repertoireDestination;
  12.        }         
  13.     } else {
  14.        echo "Le fichier n'a pas été uploadé (trop gros ?)";
  15.     }
  16. echo "<br><br>";
  17.   //nom du fichier choisi:
  18.      $nomFichier = $_FILES["fichier"]["name"] ;
  19.  //nom temporaire sur le serveur:
  20.  $nomTemporaire = $_FILES["fichier"]["tmp_name"] ;
  21.  //type du fichier choisi:
  22.  $typeFichier = $_FILES["fichier"]["type"] ;
  23.  //poids en octets du fichier choisit:
  24.  $poidsFichier = $_FILES["fichier"]["size"] ;
  25.  //code de l'erreur si jamais il y en a une:
  26.  $codeErreur = $_FILES["fichier"]["error"] ;
  27.  // Test
  28. //echo "<br>";
  29. //echo "$nomFichier      *****/*****      $typeFichier      *****/*****      $poidsFichier";
  30. // connexion à votre base de donnée
  31. $connexion = mysql_connect("localhost","root","" );
  32. mysql_select_db("Prod",$connexion);
  33. // on créer la requête SQL, pour ensuite l'envoyer
  34. $requete = ("insert into img values('$nomFichier')" );
  35. mysql_query ($requete);
  36. echo "Vos données ont été enregistrées !";
  37. ?>


 
et mon code pour enregistrer les donnée des artites prod et commentaire nomé transdone.php :
 

Code :
  1. <?php
  2. // récupération des données du formulaires
  3. $prod = $_POST['prod'];
  4. $artist = $_POST['artist'];
  5. $comm = $_POST['comm'];
  6. // connexion à votre base de donnée
  7. $connexion = mysql_connect("localhost","root","" );
  8. mysql_select_db("Prod",$connexion);
  9. // on créer la requête SQL, pour ensuite l'envoyer
  10. $requete = ("insert into nom_prod values('$prod','$artist','$comm')" );
  11. mysql_query ($requete);
  12. echo "Vos données ont été envoyées !";
  13. // fermeture de la connexion vers Mysql
  14. mysql_close();
  15. ?>


 
Par contre comment je peux t'envoyer ma bdd ? Merci bcp pour toute ton aide

n°12817
darkkat
yonk
Profil : Membre
Posté le 27-04-2005 à 20:14:13  
 

tu fais un export et tu copie ce qu'il y dans nomprod et img

n°12832
twist85
Profil : Jeune recrue
Posté le 28-04-2005 à 11:13:24  
 

Heu chui dsl mé je ne trouve pas la commande d'export et je ne pe pas copier ce kil y

n°12834
twist85
Profil : Jeune recrue
Posté le 28-04-2005 à 11:14:27  
 

Oups pb de commande dsl oué je n'arrive pas a copier le contenue de nom_prod et img tu pe m'expliquer stp ?

n°19224
AsTrOnuX
Profil : Jeune recrue
Posté le 03-04-2008 à 21:25:21  
 

merci beacoup pour le script mais j'ai un petit probleme je sais pas quel " Type " il faut faire sur la base de donnes  (varchar) ou (blob) ou (Text)
 
merci :)

n°19226
Winny #29
Breizh Atao!!
Profil : Fossile
Posté le 04-04-2008 à 00:09:41  
 

Joli déterrage :wam:
 
Ca dépend du SGBD, mais il faut un champ de type BLOB (sous Oracle en tout cas, les autres SGBD je sais pas)


---------------
SE300B & DIY Speakers powered :sol:  DIYeur hifi en algues :pt1cable:  
Multi-Activé :love:
Guinness is good for You!!
Member of the Cool Team, du Team de la mer, et du Team des vieux.
  FORUM Rue-Montgallet.com
  Programmation
  Php - Sql

  Comment enregistrer une image dans un base de donnée

© 2000-2018 Forum.rue-montgallet.com - Tous droits réservés