Probleme d'affichage photo

gwendoline -  
 chouchou123 -
bonsoir!
j'ai inserer des photo dans une table de ma base de donné mysql.jusque la tout vas bien!
mais je voudrais les extraire et les afficher, alors j'ai ecrit un petit programme:

<?
$host="localhost";
$base="sortirensemble";
$user="root";
$pass=831200;
$connexion=mysql_connect ($host, $user ,$pass) or die (mysql_error());
$db=mysql_select_db ($base) or die (mysql_error());
$req="select img_type, img_blob from images";
$result=mysql_query($req) or die (mysql_error());
while($ligne=mysql_fetch_row($result))
{header ("Content-type:$ligne[0]");
echo $ligne[1];echo"<br>";
}
?>

mais ca m'affiche le message d'erreur suivant:Warning: Cannot modify header information - headers already sent et s'a m'affiche plein de singe bizarre.

comment resoudre ce probleme et afficher mes photo?
A voir également:

5 réponses

BoOst
 
salut

php ne veut pas executer ton instruction "header" car il y a déja des données texte qui ont été affichées dans la page, il y a certainement des espaces avant le début de la balise php (<?) ou après la finale (?>)

Sinon le reste de ton code a l'air bon, et si tu a des caratères bizarres c'est que tu tu voit en "texte" le contenu de l'image (à cause de l'erreu du header)
0
BoOst
 
Encore moi, j'avais mal lu ton code.

en utilisant la fontion "header" tu ne peut mettre qu'une image dans ta page,
puisque la page générée sera en fait un image dans ce cas,
tu peut donc pas utilisr ca dans une boucle while
(mais si tu n'a qu'un resultat ca devrai marcher)

le plus simple je pense :
tu fait une page avec ton bout de code dedans que tu apelle "imgsql.php" par exemple,
que tu rajoute dans ta requete sql afin qu'elle ne renvoie qu'une seule image
en fonction d'un paramètre que tu passera a la page :

...
$req="select img_type, img_blob from images where id=".$_REQUEST["ID"];
$result=mysql_query($req) or die (mysql_error());
if ($ligne=mysql_fetch_row($result)) {
header ("Content-type:$ligne[0]");
echo $ligne[1];
}


(en considérant que tu a un ID dans ta table, a toi de voir)

ensuite tu apelle directement l'image dans un code html :
<img src="imgsql.php?ID=1"><br>
<img src="imgsql.php?ID=2"><br>
...


A chaque apel, ta page générera l'image que le navigateur va afficher
0
gwendoline
 
merci beaucoup pour vos reponses, mais le programmes me dit toujours :Cannot modify header information - headers already sent.....
ET pourtant j'ai bien fait attention a ce que la fonction header soit avant tout envoie de texte au navigateur, mais rien a faire, toujours le meme probleme!
0
BoOst
 
désolé de ne revenir que maintenant, je n'avais plus de net.
a tu avancé sur le sujet ?

sinon fournir explique moi exactement le contenu des tes pages,
et eventuellement la strucure de la table dans ta base de données,
que je puisse t'aider.

dans ta table, il faut q'uen plus des champs "type" et "blob" tu ai un nom ou un identificateur quelquonque, sinon quand tu voudra afficher tes images tu sera obligée de tout afficher..

voici donc comment procéder :
(je n'ai pas de quoi tester donc y'a surement des erreurs !
place les fichiers dans le meme reprtoire pour que ca marche)

1) rajoute un champ dans ta table pour identifier tes images,
par exemple un nom, en rajoutant un champ "name" de type varchar(64).
(dans mon exemple je vais supposer que tu a une image avec un nom "cheval")

2) crée une page "config.php" pour mettre tes identifiants mysql sans les repeter a chaque fois :

[config.php]
<?
$host="localhost";
$base="sortirensemble";
$user="root";
$pass=831200;
?>

3) crée une page "imagesql.php" que tu appelera quand tu voudra afficher une image (par son nom)

[imagesql.php]
<?
// on charge les identifiants de connexion
include("config.php");

// connexion a la base
$connexion=mysql_connect ($host, $user ,$pass) or die (mysql_error());
$db=mysql_select_db ($base) or die (mysql_error());

// on cherche les infos sur l'image dont le nom est passé dans les paramètres de la page (name=...)
// ex : imagesql.php?name=cheval
$req="select img_type, img_blob from images where (name=".addslashes($_REQUEST["name"]).")";
$result=mysql_query($req) or die (mysql_error());

// l'image existe, on envie les données au navigateur
if ($ligne=mysql_fetch_row($result)) {
header ("Content-type:$ligne[0]");
echo $ligne[1];echo"<br>";
}
?>

4) finalement, crée une page pour tester l'affichage des images :
[test.php]
<html>
<body>
<?
// on charge les identifiants de connexion
include("config.php");

// connexion a la base
$connexion=mysql_connect ($host, $user ,$pass) or die (mysql_error());
$db=mysql_select_db ($base) or die (mysql_error());

// on fait une requete pour lister toutes les images, trié par nom
$req="select name, img_type, img_blob from images order by name";
$result=mysql_query($req) or die (mysql_error());
while ($ligne=mysql_fetch_row($result)) {
// pour chaque image on affiche le code html qui appelle notre page "imagesql" pour afficher l'image
echo $ligne[name]." : <img src=imagesql.php?name=".$ligne[name]."><br>";
}
?>
</body>
</html>

Voila j'espere que ca t'aidera.
Ce qu'il faut bien comprendre c'est que la page "imagesql" n'affiche qu'une seule image,
tu l'apelle en html avec un truc comme <img src="imagesql.php?name=nom_image">
(Si tu veut en afficher plusieurs, tu fait comme dans la page TEST, tu fait un boucle et tu appelle donc plusieurs fois la page imagesql)

Si ca fonctionne pas, commence par tenter d'afficher la page imagesql.php?name=cheval
(avec un nom d'image qui existe)
cette page doit te renvoyer l'image, si ca marche pas il faut déja essayer de regler les problemes dans cette page avant d'essayer de l'utiliser dans tes scripts. (sinon tu aura une croix rouge: pas d'image)

bon courage ;)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
chouchou123
 
bonjour
j'ai un base de donneé (tout les identifiant d'un étudian) et je veu a chaque foi affiche le photo d'un étudian préci.merci d'avance
0