Prob recup images dans base mysql !

Petit nouveau ! | 2 Messages

24 mai 2005, 17:20

Bonjour,

J'aimerais insérer des images dans ma base de données, j'ai donc trouvé un tuto, donnant les explications permettant d'insérer les images et de les récupérer.
ce tuto est :

Il nous faut créer une base (nous l'appellerons "essai") et une table (nous l'appellerons "images_binaires") qui comprendra les champs suivants: id (un entier), donnees_binaires (type MySQL LONGBLOB), nom_fichier (une chaîne), taille_fichier (une chaîne), type_fichier (une chaîne), et, éventuellement, un champ description (une chaîne). On n'oubliera pas de préciser "auto_increment" pour l'identifiant. Nous allons insérer les images dans la base à l'aide, par exemple, d'un formulaire HTML. Il ressemblera à:



Code:
<form method="post" action="inserer_image.php" enctype="multipart/form-data">
Nom du fichier:&<input type="file" name="image" size="40">
<br><input type="submit" name="ok">
</form>



Jusqu'à la pas de problème ? je continue alors :

Notre programme inserer_image.php sera alors le suivant:

Code:
<?php
mysql_connect("","root","");
mysql_select_db("essai");
$donnees = addslashes(fread(fopen($image, "r"), filesize($image)));
$result=mysql_query("INSERT INTO images_binaires (donnees_binaires,nom_fichier,taille_fichier,type_fichier) VALUES ('$donnees','$image_name','$image_size','$image_type')");
$id= mysql_insert_id();
print "<br>Indentifiant du fichier dans la base: $id<br>";
mysql_close();
?>





Bon pas grand chose à expliquer ici non plus a par peut-être la fonction addslashes() qui ajoute des antislashs devant les caractères (',",\,NUL). et pour fread() et fopen() revoir les cours sur la gestion des fichiers.

Un petit programme php, afficher_image.php, va permettre de récupérer l'image dans la base:


Code:
<?php
mysql_connect("","root","");
mysql_select_db("essai");
$requete = "SELECT donnees_binaires,type_fichier FROM images_binaires WHERE id=$id";
$resultat = mysql_query($requete);
$donnees = mysql_result($resultat,images_binaires.donnees_binaires);
$type = mysql_result($resultat,0,images_binaires.type_fichier);
header( "content-type: $type");
echo $donnees;
?>



La non plus rien de spécial, et puis voila c'est fini !


On appellera ce programme avec une instruction HTML du type:
Code:
<img src="afficher_image.php"?id=identifiant>


où l'on précisera l'identifiant correspondant.

Voilà !!!!!!
J'ai fais exactement comme cité ci-dessus. Les images sont bien enregistrées dans ma base mysql , pour les récupérer, je remplace "identifiant" par le numéro d'incrémentation généré (exemple: 4), je lance ma page où j'ai mis dans le body "]<img src="afficher_image.php"?id=4>

Et là, rien !!! pas d'image, juste une croix ...
La connection est bien faite pourtant ...

Que faire svp ??? help !
mici !

Administrateur PHPfrance
Administrateur PHPfrance | 658 Messages

24 mai 2005, 21:56

Grumph
Stocker une image dans la base de données est générallement une tres mauvaise solution. Cela charge inutilement ta base.
Imagine que tu fasses un select * d'une table contenant 100 images ? Ca te fait un process à 1Mo ...

La solution conseillée consiste à stocker l'image dans un repertoire et a conserver son nom dans la base.

La solution que j'utiliser perso c'est de renommer l'image apres un enregistrement dans la base en lui donnant comme nom la clef primaire de l'enregistrement inséré (mysql_insert_id()).

J'ai vu passer un thread a ce sujet dernièrement :
http://www.phpteam.net/forum/read.php?2,4085

++

cyruss
Co-auteur du livre PHP 7 avancé
Co-auteur du livre Performances PHP : Audit et optimisation LAMP
Co-fondateur de l'Association Française des Utilisateurs de PHP http://www.afup.org
Formateur PHP pour Openska

Petit nouveau ! | 2 Messages

25 mai 2005, 12:24

Merci ! ;) jv voir çà !