Problème affichage fichier de type blob

Benorito -  
milicy Messages postés 7 Statut Membre -
Bonjour,

J'ai un gros problème depuis plusieurs jours, je réalise actuellement un intranet et ayant peut de fichiers a stocker j'ai choisi d'enregistrer mais fichier en type blob. L'insertion se passe très bien mais j'ai un souci pour les ouvrir, voici le code :

liste.php
<?php 
// On démarre la session
session_start();

include ("config.php"); 
if ($_SESSION['role'] == "admin") 
{
?>
<html>
<head><title>Stock d'images</title></head>
<body>
<?php
$connexion= mysql_connect($MyServeur,$MyLogin,$MyPass) or die ("Erreur, connexion à la base de données impossible");
mysql_select_db($MyBase,$connexion);

//echo '<pre>', print_r($GLOBALS), '</pre>'; 

$req = "SELECT nom, id, description, taille, type ".
"FROM documents ORDER BY nom";
$ret = mysql_query ($req) or die (mysql_error ());
while ( $col = mysql_fetch_row ($ret) )
{
echo "<a href=\"apercu.php?id=".$col[1].
"\">".$col[0]."</a><br />";
}
?>
</body>
</html>
<?php
}
else 
{
header('Location: ../../connection.php');
}
?>


Le second : apercu.php

<?php 
// On démarre la session
session_start();

include ("config.php"); 
if ($_SESSION['role'] == "admin") 
{
?>

<?php
if ( isset($_GET['id']) )
{
$id = intval ($_GET['id']);

//echo '<pre>', print_r($GLOBALS), '</pre>'; 

$connexion= mysql_connect($MyServeur,$MyLogin,$MyPass) or die ("Erreur, connexion à la base de données impossible");
mysql_select_db($MyBase,$connexion);


$req = "SELECT id, type, fichier ".
"FROM documents WHERE id = ".$id;
$ret = mysql_query ($req) or die (mysql_error ());
$col = mysql_fetch_row ($ret);
if ( !$col[0] )
{
echo "Id d'image inconnu";
}
else
{
header ("Content-type: ".$col[1]);
print $col[2];
}
}
else
{
echo "Mauvais id d'image";
}
?>
<?php
}
else 
{
header('Location: ../../connection.php');
}
?>


Voila la variable se transmet bien pourtant dans le get, mai le ficchier ne s'affiche pas le code du blob selement et un erreur sur le header Content Type. Je vous donne la structure de ma table :
CREATE TABLE `documents` (
  `id` int(11) NOT NULL auto_increment,
  `nom` varchar(50) NOT NULL default '',
  `description` varchar(100) NOT NULL default '',
  `taille` varchar(10000) NOT NULL,
  `type` varchar(30) NOT NULL default '',
  `fichier` longblob NOT NULL,
  `date` varchar(20) NOT NULL,
  `chemin` varchar(200) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=61 ;


Merci d'éclairer ma lanterne, merci d'avance.
A voir également:

7 réponses

vlmath Messages postés 833 Statut Contributeur 160
 
Salut,

Il y a un ou deux petits détails à corriger ....

Premièrement, tu dois mettre un exit(); juste après le print d'information.
Pour le premier header, qu'est-ce qui est stocké dans la BD ? image/jpeg par exemple ?
Comme dans les bases de données le consepte d'ordre n'existe pas (il n'y a pas une colonne avant une autre, et de même avec les lignes), je te conseil de changer les $col[1] par des $col[type] ; ça te permet en plus de relire plus facilement ton code, et de mieux voir les erreurs.

@Bientôt
0
Benorito
 
Bonjour,

Je suis toujours ôtant perdu, j'ai changer les les $col[1] par des $col[type] etc et et mis le exit et le résultat est maintenant différent, il m'afficher "Id d'image inconnu" du 1er If. Pourtant la variable passe dans l'adresse : "http://localhost/Proto1/Admin/Documents/apercu.php?id=60". Je te remet mon code, si tu peu m'aiguiller encore un peut se serait cool :

<?php 
// On démarre la session
session_start();

include ("config.php"); 
if ($_SESSION['role'] == "admin") 
{
?>

<?php
if ( isset($_GET['id']) )
{
$id = intval ($_GET['id']);

//echo '<pre>', print_r($GLOBALS), '</pre>'; 

$connexion= mysql_connect($MyServeur,$MyLogin,$MyPass) or die ("Erreur, connexion à la base de données impossible");
mysql_select_db($MyBase,$connexion);


$req = "SELECT id, type, fichier ".
"FROM documents WHERE id = ".$id;
$ret = mysql_query ($req) or die (mysql_error ());
$col = mysql_fetch_row ($ret);
if ( !$col['id'] )
{
echo "Id d'image inconnu";
}
else
{
header ("Content-type: ".$col['type']);
print $col['fichier'];
exit(); 
}
}
else
{
echo "Mauvais id d'image";
}
?>
<?php
}
else 
{
header('Location: ../../connection.php');
}
?>


Merci d'avance
0
vlmath Messages postés 833 Statut Contributeur 160
 
Je crois que j'ai oublié de contrôler un truc ....

Pour que ça marche, tu dois faire un mysql_fetch_array et non mysql_fetch_row ... désolé
0
Benorito
 
Bonjour,

J'ai essayé ta proposition et non aucun résultat, le code blob s'affiche en indiquant toujours une erreur sur le header content type :/, si vous avez d'autre solution pour m'éclairer je suis preneur. Merci d'avance.

Ben
0
vlmath Messages postés 833 Statut Contributeur 160
 
c'est quoi exactement l'erreur ?
0
Benorito
 
Bonjour,

Alors le message qui s'affiche est le suivant :
"Warning: Cannot modify header information - headers already sent by (output started at C:\wamp\www\Proto1\Admin\Documents\apercu.php:10) in C:\wamp\www\Proto1\Admin\Documents\apercu.php on line 31", la ligne 31 étant celle ci : "header ("Content-type: ".$col['type']);".Ensuite s'affiche le code du blob exemples :

"ÿØÿà�JFIF���d�d��ÿþ�Adobe ImageReadyÿì�Ducky�����.��ÿî�Adobe�dÀ���ÿÛ�„�      )))))//////////     ((&((//////////ÿÀ��Ô"�ÿÄ�ª�������������������������������!1AQaq"‘¡2±ÁBÑáR#ðñbr’3‚¢ÂST5�������!1AqQa‘"2¡ÁÑBR±rCðáñ3b‚Â#$ÿÚ� ��?�çlŠ-’.iWY¤Ñ)iîJÀ$'{TN p9(G"¶<ÄE¸ã¼{ÕæÌ’䥺º@ïÔ,;MQÈ,;©€ï%U\�ªÕßn?²OÁT[A':­ÍäŒ 3Zäi€E6µ¼J‰?‰Ç¨*ÛçûÒìÁZq6n[˜»&»#ZÒªªíoKÅ]q¤ÜŒéµ >gù+MÆê0ß«5ûÒo+¸2ÕFþwP›“ÿ�õûù?5ÉÚô–î»YF7!(L‹„ãl{»Õkj¹#ÝYXÞÃoj6¡j“Ô­†ª*òÕ¦:¿';Ø1‘³†Àqc)\spø-óÊÜÊPî뺹< ίŠßÅiïaXÜòN»s¤]¦ª=œQÅ'´Ü(Tmš)KŽÙYp«U¨Éc·ÿ�r>*ã÷»–mlÊ¦Ì ®”q[ê}›œ¨H­2U׌kœÝÍ¥s[½Üÿ�ZqßîGê%­L“u/ÔÔ{Ô3_C{‚ޏ'1õÄ–<£õD…XýÐÅk¡ÜÁ¢[ ¤¹þ@‰ÎsêÀø'[`ð›8¬eT·ÉJ5ø¤I² s‚Ò³RË<}NæÝw0;^5½YòÐðÇcBTwºDÄsbÉj;÷V[ûb.|@*±¿É/.pÚQÍãjzPÅF® n¬*«¶ö» î¢tC"sQÚme¹ŸH¨«¨@[ˆ„CE"wx–ŠÕÎÏ‹^¥ 8«`ú¦JË;l2'©%ne‚Ž>*HŠ1ò…^뉏ÎîÌ(löШ¶<ê¤vÛi>«Q?%“䥕ínT......

Merci encore et toujours d'avance
0
vlmath Messages postés 833 Statut Contributeur 160
 
La première erreur implique le fait que t'as dme erreur ...
Qu'est-ce qui est exactement stocké dans ton champ 'type' ?
0
milicy Messages postés 7 Statut Membre
 
Bonjours,

Déja merci beaucoup de me répondre excuse pour mon retard pour te répondre, le champ type est complété
avec ceci :

image/jpeg

ou encore

application/pdf
...

Ceci afin de spécifié le type de fichier comme expliqué dans les tuto pourtant ils n'ont pas l'air d'être pris en compte, merci de ton aide et merci d'avance.
0

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

Posez votre question
vlmath Messages postés 833 Statut Contributeur 160
 
Est-ce que je pourrais voir la source de toute la page ? j'ai peut-être une idée ....
0
milicy Messages postés 7 Statut Membre
 
Excuse moi mais je vois pas trop de qu'elle source tu parle :/ le chemin de ma page tu veut dire ? Car la j'ai donné tout mon code plus haut ... Merci d'avance
0
vlmath Messages postés 833 Statut Contributeur 160
 
a .... c'est bisard ....

Essaye de mettre uniquement les lignes qui font apparaître l'image, et rien d'autre. Si ça marche, t'ajoute peu à peu les informations, pour voir où ça cloche ...

Essaye aussi de mettre le header en première ligne (après la balise <? biensur ... ;D)
0
milicy Messages postés 7 Statut Membre
 
Rien ne se passe toujours le même résultat le code du blob s'affiche mais l'image toujours pas :/
0