Page 1 sur 1

Prob recup images dans base mysql !

Posté : 24 mai 2005, 17:20
par nocompromise
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 !

Posté : 24 mai 2005, 21:56
par cyruss
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

Posté : 25 mai 2005, 12:24
par nocompromise
Merci ! ;) jv voir çà !