Pourquoi mon image ne s'affiche pas

Signaler
Messages postés
229
Date d'inscription
lundi 2 août 2010
Statut
Membre
Dernière intervention
25 juillet 2013
-
cod57
Messages postés
1654
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
-
bonjour a tous et à touts .
j'ai pris un code sur le net que l'essaie d'adapter à mon cas mais il trouve que l'image ne s'affiche pas.

voici le message d'erreur :
L'image"http://localhost/TUTO/apercu.php?id=1" ne peut être affichée car elle contient des erreurs.

voici mes différents code :
<html>
<head>
<title>Stock d'images</title>
</head>
<body>
<?php
include ("fonc.php");
if ( isset($_FILES['fic']) )
{
transfert();
}
?>
<h3>Envoi d'une image</h3>
<form enctype="multipart/form-data" action="#" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="1000000" />
<input type="file" name="fic" size=50 />
<input type="submit" value="Envoyer" />
</form>
<p><a href="liste.php">Liste</a></p>
</body>
</html>


fonc.php
<?php
function transfert ()
{
$ret = false;
$img_blob = '';
$img_taille = 0;
$img_type = '';
$img_nom = '';
$taille_max = 1000000;

$ret = is_uploaded_file ($_FILES['fic']['tmp_name']);
if ( !$ret )
{
echo "Problème de transfert";
return false;

}
else
{

// Le fichier a bien été reçu
$img_taille = $_FILES['fic']['size'];
if ( $img_taille > $taille_max )
{
echo "Trop gros !";
return false;
}
$img_type = $_FILES['fic']['type'];
$img_nom =  $_FILES['fic']['name'];

include ("connexion.php");

$img_blob = file_get_contents ($_FILES['fic']['tmp_name']);

$req = "INSERT INTO images (".
"img_nom, img_taille, img_type, img_blob ".
") VALUES (".
"'".$img_nom."', ".
"'".$img_taille."', ".
"'".$img_type."', ".
// N'oublions pas d'échapper le contenu binaire
"'".addslashes ($img_blob)."') ";

$ret = mysql_query ($req) or die (mysql_error ());
return true;
}
}
?>


liste.php
<html>
<head><title>Stock d'images</title></head>
<body>
<?php
include ("connexion.php");
$req = "SELECT img_nom, img_id ".
"FROM images ORDER BY img_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>


apercu.php
<?php
if ( isset($_GET['id']) )
{
$id = intval($_GET['id']);
echo $id;
include ("connexion.php");

$req "SELECT img_id, img_type, img_blob ". "FROM images WHERE img_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]);
   echo $col[2];
  }
}
else
{
   echo "Mauvais id d'image";
}
?>


connexion.php
<?php

$hote = '----';
$base = '----';
$user = '----';
$pass = '';

$cnx = mysql_connect ($hote, $user, $pass) or die (mysql_error ());

$ret = mysql_select_db ($base) or die (mysql_error ());

?>

2 réponses

Messages postés
1654
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
10
Bonsoir
il faut faire attention à être connecté dans la fonction transfert

en deux fichiers testé sans securité

la table
CREATE TABLE IF NOT EXISTS `images` (
`img_id` int(11) NOT NULL AUTO_INCREMENT,
`img_nom` varchar(50) NOT NULL,
`img_taille` varchar(20) NOT NULL,
`img_type` varchar(20) NOT NULL,
`img_blob` blob NOT NULL,
PRIMARY KEY (`img_id`)
)

index.php
<?php
function connectmoi(){
$hote = 'localhost';
$base = 'msi';
$user = 'root';
$pass = '';
$cnx = mysql_connect ($hote, $user, $pass) or die (mysql_error ());
$ret = mysql_select_db ($base) or die (mysql_error ());
}

function transfert ()
{
$ret = false;
$img_blob = '';
$img_taille = 0;
$img_type = '';
$img_nom = '';
$taille_max = 1000000;

$ret = is_uploaded_file ($_FILES['fic']['tmp_name']);
if ( !$ret ){
echo "Problème de transfert";
return false;
}else{

// Le fichier a bien été reçu
$img_taille = $_FILES['fic']['size'];
if ( $img_taille > $taille_max )
{
echo "Trop gros !";
return false;
}
$img_type = $_FILES['fic']['type'];
$img_nom =  $_FILES['fic']['name'];

$img_blob = file_get_contents ($_FILES['fic']['tmp_name']);

connectmoi();

$req = "INSERT INTO images (".
"img_nom, img_taille, img_type, img_blob ".
") VALUES (".
"'".$img_nom."', ".
"'".$img_taille."', ".
"'".$img_type."', ".
// N'oublions pas d'échapper le contenu binaire
"'".addslashes ($img_blob)."') ";

$ret = mysql_query ($req) or die (mysql_error ());
return true;
}
}

if ( isset($_FILES['fic']) )
{
transfert();
}

?>

<h3>Envoi d'une image</h3>
<form enctype="multipart/form-data" action="#" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="1000000" />
<input type="file" name="fic" size=50 />
<input type="submit" value="Envoyer" />
</form>


<h1>Liste des images en stock</h1>

<?php
connectmoi();
$req = "SELECT img_nom, img_id ".
"FROM images ORDER BY img_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>


apercu.php
<?php
function connectmoi(){
$hote = 'localhost';
$base = 'msi';
$user = 'root';
$pass = '';
$cnx = mysql_connect ($hote, $user, $pass) or die (mysql_error ());
$ret = mysql_select_db ($base) or die (mysql_error ());
}


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

//echo $id;

connectmoi();

$req "SELECT img_id, img_type, img_blob ". "FROM images WHERE img_id ".$id;

$ret = mysql_query ($req) or die (mysql_error ());
$col = mysql_fetch_array ($ret);

if ( !$col[0] )
{
echo "Id d'image inconnu";
}
else
{
   header ("Content-type: ".$col['img_type']);
   echo $col['img_blob'];
  }
}
else
{
   echo "Mauvais id d'image";
}
?>



Bonne programmation !
Messages postés
1654
Date d'inscription
dimanche 7 septembre 2008
Statut
Membre
Dernière intervention
11 septembre 2013
10
if ( !$col[0] ) bon il faut mettre
if ( isset($col['id'])
)

Bonne programmation !