begin process at 2012 05 29 01:59:02
  Trouver un code source :
 
dans
 
Accueil > Forum > 

PHP

 > 

Base de données

 > 

MySQL

 > 

extraire une image d'un champ blob


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

extraire une image d'un champ blob

lundi 17 mars 2008 à 22:02:36 | extraire une image d'un champ blob

thiebaut35

Dans une base mysql, j'ai des jolies images que je souhaite afficher où je le veux sur des pages html.
Ma base fonctionne bien je peux mettre supprimer ajouter les images que je veux. ça, ça roule !
Là ou çà se complique c'est quand je veux prendre l'image avec l'id=... et que je veux l'afficher dans une page html.
Je viens de galérer avec header qui me donne toujours la maudite .... always send ...  J'ai essayé de remanier mon code, l'image s'affiche mais pas le reste !

<?php
  include("connexion.php");
  $req = "SELECT img_id,img_type,img_blob "." FROM images WHERE img_id = '1'";
$ret = mysql_query($req) or die (mysql_error());
$col = mysql_fetch_row($ret);
header"Content-type:" .$col[1];
echo $col[2];
?>


J'aimerais bien me passer de ce borde.. à c.. de header !!!
Help !
François
mardi 18 mars 2008 à 13:12:57 | Re : extraire une image d'un champ blob

neigedhiver

Salut,

Tu ne peux pas te passer de header() : c'est 999999999% obligatoire.

PHP renvoit des caractères. N'importe lesquels, tout dépend de ton script.
C'est le navigateur qui reçoit ces caractères : lui, ne sait pas quoi en faire. Par défaut, il considère ça comme du texte, sans se soucier réellement du type mime. Si tu souhaites que les caractères envoyés aient une autre signification pour le navigateur, il faut le lui dire : il n'est pas foutu, tout seul, de le deviner (et ça se comprend).
herder() sert à ça.

Je ne vois pas en quoi c'est une contrainte...

Neige
mardi 18 mars 2008 à 21:16:33 | Re : extraire une image d'un champ blob

thiebaut35

Contrainte !
je n'arrive pas à inclure ce header pour afficher l'image voulue dans la page html que j'ai faite. Comment faut il faire et en plus j'ai 2 photos à afficher, entourées de 2 pavés de textes issus d'une base de données.
Et quand je lis toutes les questions qui concernent le blob et les header, ça galère !

Bon comment je peux intérger le code du dessus dans du html sans que j'a le joli message always send.. ?

Un petit coup de main svp

François
mardi 18 mars 2008 à 21:41:47 | Re : extraire une image d'un champ blob

thiebaut35

Bon, n'arrive pas !*
Galère
 voici le bout de code et mes soucis !

<?php
  include("connexion.php");
  $req = "SELECT img_id,img_type,img_blob "." FROM images WHERE img_id = '1'";
$ret = mysql_query($req) or die (mysql_error());
$col = mysql_fetch_row($ret);
"Content-type:" .$col[1];
echo $col[2];

Si je mets ça, l'image s'affiche mais c'est tout , tout le dessous rien, aucun affichage, une page blanche et c'est tout!

 $idConnexion = mysql_connect()
  //if ($idConnexion) echo "Connexion au serveur réussie<BR>";
  //else echo "Connexion au serveur ratée";

  $connexionReussie = mysql_select_db(°
  //if ($connexionReussie) echo "Connexion à la base réussie <BR>";
  //else echo "Connexion à la base ratée";

// variable du samedi 29 texte 1

$rq = "SELECT lestextes FROM textes WHERE id='16'";
  $res = mysql_query($rq) or die("Loupé");
$ligne=mysql_fetch_array($res);
  extract ($ligne);
$samedi1=$lestextes;je mets le texte N°1 du samedi dans la variable $samedi1

// Variable du samedi 29 texte 2

$rq = "SELECT lestextes FROM textes WHERE id='17'";
  $res = mysql_query($rq) or die("Loupé");
$ligne=mysql_fetch_array($res);
  extract ($ligne);
$samedi2=$lestextes;idem pour ce texte


mysql_close();  // on ferme la connexion

?>

La partei html pour la mise en page, mais en jaune ça marche pas !!!!!
<html>
<head>

<p>samedi 29 mars</p>

<p align="right"><font size="2"><a href="accueil.htm">Accueil</a></font></p>
<table border="1" width="100%" id="table1">
 <tr>
  <td><?php;echo $col[2];?></td>
 </tr>
 <tr>
  <td><?php; echo addslashes($col[2]); ?></td>
  <td><?php echo "$samedi2"; ?></td>
 </tr>
</table>

</head>
</html>


Sur ce coup j'ai besoin d'aide !

mardi 18 mars 2008 à 23:34:29 | Re : extraire une image d'un champ blob

neigedhiver

Salut,

Bon... Faut reposer quelques bases...

Un script qui génère une image va envoyer un header pour cette image. Donc : il ne va générer que cette image. Oui, il FAUT (c'est obligatoire, c'est pas facultatif) un script qui ne fait QUE ça, et rien d'autre. T'as pas le choix, c'est imposé.
Pour inclure ton image dans le code html, il faut appeler le script, comme tu le ferais avec une image :

<img src="ton_script.php?image_id=12345" alt="image custom de la bdd" />

Tu ne peux pas balancer dans le code html le contenu de l'image, ça n'a aucun sens.
Dans cette ligne, ton_script.php est le script qui va générer l'image, et rien d'autre.
Entendons-nous bien... Le script, suivant les arguments que tu lui passes, peux faire autre chose. Mais s'il envoit une image, il ne peut rien envoyer d'autre.
Comme un script qui renvoit du HTML, il ne renverra pas d'image, pas de XML, pas de pdf, etc.


Neige
mercredi 19 mars 2008 à 18:28:54 | Re : extraire une image d'un champ blob

thiebaut35

Pas compris !
en fait un petit peu !
Dans le script que tu me donnes, c'est quoi "ton_script.php?image_id=12345"

image_id = ça j'ai compris, c'est le N° id qui correspond à mon image que je veux afficher.
mais ton_script.php?, c'est quoi ?


alt="image custom de la bdd"
pour moi, c'est le nom de l'image qui est dans la bdd, mais c'est le blob ? ou le nom complet ?

Encore merci pour ton aide.

 

François

mercredi 19 mars 2008 à 18:55:23 | Re : extraire une image d'un champ blob

thiebaut35

est ce que ce serait qq chose comme cela ?

td>
  <img src=<?php "header"Content-type:" .$col[1];img_id=1" alt="$col[2]";?>>
  </td>

parce que ça ne marche pas
François
mercredi 19 mars 2008 à 19:11:29 | Re : extraire une image d'un champ blob

thiebaut35

Je viens de lire pas mal de trucs...

voila ce que j'ai fait est ce que je suis sur la bonne voie ?

j'ai crée une page
affichage.php
avec le code suivant:
<?php
  include("connexion.php");
  $req = "SELECT img_id,img_type,img_blob "." FROM images WHERE img_id = '1'";
$ret = mysql_query($req) or die (mysql_error());
$col = mysql_fetch_row($ret);
header"Content-type:" .$col[1];
echo $col[2];
?>

puis j'ai écris la balise html suivante, comme tu me l'a écrit:

 <img src="affichage.php?img_id=1" alt=$col[2] />

Et j'obtiens à l'écran un rectangle une croix rouge et $col2 noté dedans
C'est où mon zerreur ?
François
mercredi 19 mars 2008 à 19:36:48 | Re : extraire une image d'un champ blob

neigedhiver

Hum...

Je peux difficilement faire plus clair que ce que j'ai déjà dit :

Un script qui génère une image va envoyer un header pour cette image. Donc : il ne va générer que cette image. Oui, il FAUT (c'est obligatoire, c'est pas facultatif) un script qui ne fait QUE ça, et rien d'autre. T'as pas le choix, c'est imposé.
Pour inclure ton image dans le code html, il faut appeler le script, comme tu le ferais avec une image :

<img src="ton_script.php?image_id=12345" alt="image custom de la bdd" />
Dans l'exemple, ton_script.php est le script qui renvoit l'image, et QUI NE FAIT QUE CA.
image_id, c'est un paramètre fantaisiste de mon invention pour un script tout autant imaginaire, histoire que le script sache quand même quelle image renvoyer, donc quelle ligne de la table aller chercher dans la base de données...

Je crois que tu as du mal à bien comprendre comment fonctionne PHP. Alors on va reprendre... Depuis le début.

PHP est un interpréteur de scripts.
Apache est un serveur HTTP (un logiciel).
Le navigateur est le client.
Le serveur désigne généralement la machine, mais aussi un logiciel qui "sert" des données en réponse à des requêtes bien précises.

Tu tapes une adresse dans la barre d'adresse de ton navigateur. Tu valides. Le navigateur va chercher où se trouve le serveur hébergeant le domaine demandé et va lui envoyer la requête, qui est celle que tu as entrée dans la barre d'adresse de ton navigateur.
Le serveur HTTP va recevoir cette requête. Si on lui demande un fichier html ou du texte (ou du XML ou n'importe quoi dans le genre) il va se contenter de lire le fichier que tu demandes et renvoyer son contenu au navigateur, qui va ensuite l'analyser et l'afficher avec la mise en forme qui convient.
Si on lui demande un fichier PHP, Apache sait qu'il doit d'abord envoyer la requête à PHP, qui va se charger d'exécuter le script demandé, en prenant en compte la requête (l'URL), qui peut contenir des paramètres pour le script. PHP, une fois le script interprété, va renvoyer à Apache le résultat de ce traitement, sous forme de texte brut (a priori). Texte qu'Apache va renvoyer à ton navigateur qui va l'afficher avec la bonne mise en forme.

Mais. PHP peut ne pas renvoyer de texte, mais une image, un fichier PDF, ou n'importe quoi, tant qu'il envoie les bons entetes à Apache pour qu'il sache quoi dire au client (je commande le plat du jour, est-ce que j'aurai une salade verte ou un magret aux pommes ?). Ca, c'est le rôle de la fonction header() : envoyer les entetes au serveur HTTP pour qu'ils puisse les transmettre au client, qui saura ainsi ce qu'on lui donne à manger : du texte, du pdf, une image jpeg, gif, png...

Mais ce n'est pas tout... Taper l'adresse dans son navigateur est la manière la plus simple pour un humain d'envoyer une requête au serveur HTTP. Mais ce n'est pas la seule.
Les images présentes dans le code HTML ne sont pas à proprement parler des images : ce sont des URI (Uniform Resource Indicator) qui informent le serveur de quelle image on veut. C'est là encore une requête HTTP qui est envoyée au serveur Apache. Donc là encore, Apache va traiter cette requête, en plus des autres (l'adresse, mais aussi les feuilles de styles, etc).

Grosso modo, toutes les balises qui font appel à un fichier (image, feuille de style, etc) ne sont pas le fichier demandé, mais uniquement son adresse. Il y a pour chaque fichier de ce genre une requête HTTP faite au serveur.

Donc. Si sur ta page, tu souhaites afficher une image dynamiquement, au lieu de lui indiquer l'adresse d'un fichier, tu vas lui indiquer l'adresse d'un script PHP qui va renvoyer une image. Pour Apache, c'est kiffkiff : qu'il lise un fichier ou qu'il récupère un contenu d'image de la part de PHP, pour lui, c'est du pareil au même : il renvoit ça, c'est une image.
Mais Apache, et donc le client également, ne sait pas que ce qu'on lui renvoit c'est une image : le navigateur affiche ce qu'on lui dit là où on lui dit, il ne s'occupe pas de savoir si c'est effectivement une image, un pdf, ou autre... Il fait de son mieux. C'est là que header() intervient. Le script PHP qui va renvoyer l'image va utiliser header() pour dire qu'il s'agit d'une image jpg, png, gif, tiff, pict, aiff, ou autre. Le serveur va renvoyer ça au client, qui saura que là, il a bien une image, peu importe le contenu : il se comporte comme si c'était une image. Si le contenu est effectivement le contenu d'une image, ça marche. Sinon, pas d'image.

Donc. Dans ton code HTML, au lieu de mettre l'adresse d'une image, tu vas mettre l'adresse d'un script qui renverra l'image. Ce script, pour bien faire son travail ne doit renvoyer qu'une image (sinon c'est le dawa). et ne doit pas pouvoir renvoyer autre chose.

J'espère que c'est plus clair...

Je sens que je vais faire un vrai tuto complet sur le sujet, parce que manifestement, tout les développeurs n'ont pas forcément les bases...





Neige
mercredi 19 mars 2008 à 20:44:36 | Re : extraire une image d'un champ blob

thiebaut35

Merci bien ,mais je suis pratico pratique.

J'ai donc crée un script affichage.php

est-il correct pour afficher ou retirer une image ?

Que dois je modifier ?

 

dans la balise
<img src="affichage.php?img_id=1" alt=$col[2] />
je fais appel à ce script, je prends img_id =1 car c'est l'image avec id =1 que je veux afficher

Que dois-je modifier ?
Merci encore
François


1 2

Cette discussion est classée dans : images, mysql, image, img, blob


Répondre à ce message

Sujets en rapport avec ce message

Insertion image blob dans mysql [ par amewole ] Je procède à l'upload d'images que j'insère dans ma base de données qui se passe bien sauf que la colonne qui contient l'image de type blob ( img_blob mysql et image, img dans ... [ par goldziko9 ] Salut tous le mode, j'ai un probleme avec mysql, bon :j'ai un serveur apache local et mysql, je veux envoyer des image dans sql, je veux dire je enreg Probleme de changement de format image pour PHPeCard [ par kiki_cosmonaute ] Bonjour,je suis nouveau sur le forum et également dans le php,Voilà, j'ai télécharger le script PHPeCard (mais je sais pu où) et je voulais savoir si Affichage d'images depuis base MySQL [ par klerdesign ] Bonjour,Au commencement j'utilisai une simple interface d'admin sans insertion d'images. Mais j'ai du adapter pour pouvoir insérer des images.Comment insertion d'image [ par vinz78 ] salut je viens de créer diverse fichier php me permettant d'insérer mes images dans une base de données mysql tout fonctionne sauf pour le script d'ap MySQL et images [ par Marneus Calgar ] SalutJ'aimerais savoir s'il est possible de stocker des images dans une table MySQL et d'y accéder depuis une page PHP. En fait, je voudrais faire un MySQL et images [ par Marneus Calgar ] SalutJ'aimerais savoir s'il est possible de stocker des images dans une table MySQL et d'y accéder depuis une page PHP. En fait, je voudrais faire un MySql, image et tableau [ par BirD ] Hello tout le monde, g un ptit problème:j'ai une base de donnée mysql qui contient le chemin de mon image sur le site, et depuis ma page, j'aimerais a MySQL et la gestion des images avec les BLOB ou dans PHP ? [ par osscour ] Salut,on se pose de ces questions dans la vie... :) je lis parfois qu'on peut gérer les images d'un site dans MySQL en mettant le chemin de parcours php/mysql et album photo sécurisé [ par pumbaa ] Salut!!   J’ai crée un album d’image avec php/MySQL. Les images ce trouvent


Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,513 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales