Insertion image php/mysql

Résolu
Bonjour,
j'ai un petit soucis, je veux afficher une galerie d'image mais quand j'éxécute mon fichier galerie.php j'ai un tableau sans image, les image ne ce reconstitut pas, quand je clique dessus j'ai un tas de caractère mais je ne sait pas d'ou vient mon erreur alors je vous met le tout:

entree_image.php:

<head>
       <title>Envoyer une image</title>
       <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
	   <style type="text/css">
		label {
			display:block;
			width:150px;
			float:left;
		}
	   </style>
   </head>
   <body>
	
<?php
  if(isset($_POST['validation'])) {
	 
	 //Indique si le fichier a été téléchargé
	 if(!is_uploaded_file($_FILES['image']['tmp_name']))
		echo 'Un problème est survenu durant l opération. Veuillez réessayer !';
	 else {
		//liste des extensions possibles    
		$extensions = array('/png', '/gif', '/jpg', '/jpeg');
		
		//récupère la chaîne à partir du dernier / pour connaître l'extension
		$extension = strrchr($_FILES['image']['type'], '/');
		
		//vérifie si l'extension est dans notre tableau            
		if(!in_array($extension, $extensions))
			echo 'Vous devez uploader un fichier de type png, gif, jpg, jpeg.';
		else {         

			//on définit la taille maximale
			define('MAXSIZE', 300000);        
			if($_FILES['image']['size'] > MAXSIZE)
			   echo 'Votre image est supérieure à la taille maximale de '.MAXSIZE.' octets';
			else {
				//on se connecte (remplacer les paramètres de connexion)
				$connexion = mysql_connect("localhost", "root", "") or exit (mysql_error());
				$database = mysql_select_db("vehicules_neufs") or exit (mysql_error());
				
				//récupération des infos saisies
				$nom = mysql_escape_string($_POST['nom']);
				$description = mysql_escape_string($_POST['description']);
				
				//Lecture du fichier. On doit utiliser la fonction mysql_escape_string car les données binaires contiennent des caractères spéciaux.
				$image = mysql_escape_string(file_get_contents($_FILES['image']['tmp_name']));
				
				//Il ne reste qu'à insérer tout ça dans notre table.
				mysql_query("INSERT INTO images(nom, description, img, extension) VALUES('".$nom."', '".$description."', '".$image."', '".$_FILES['image']['type']."')") or exit (mysql_error());
				mysql_close();
				echo '<h3>L insertion s\'est bien déroulée !</h3>';
			 }
		  }
	  }
  }
?>
	
	<h1>Envoyer une image</h1>
	<form enctype="multipart/form-data" action="entree_nouveau_vehicule.php" method="post">
		<p>
			<label for="nom">Nom : </label><input type="text" name="nom" id="nom" /><br />
			<label for="description">Description : </label><textarea name="description" id="description" rows="10" cols="50"></textarea><br />
			<label for="image">Image : </label><input type="file" name="image" id="image" /><br />
			<label for="validation">Valider : </label><input type="submit" name="validation" id="validation" value="Envoyer" />
		</p>
	</form>
    <form action="galerie.php" method="post">
    <p>
    <input type="submit" name="validation" value="image" />
    </p>
    </form>

</body>


galerie.php
<head>
       <title>Ma galerie d'images</title>
       <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
	   <style type="text/css">
		body {
			width: 95%;
		}
			
		div {
			width: 22%;
			float: left;
			text-align: center;
			border: 1px solid black;
			margin: 5px;
			padding:  5px;
		}
			
		p {
			text-align: left;
		}
			
		a {
			color: #000000;
			text-decoration: none;
		}
	   </style>
   </head>
   <body>
	
	<h1>Ma galerie d'images</h1>
	
	<?php
	    $connexion = mysql_connect("localhost", "root", "") or exit (mysql_error());
	    $database = mysql_select_db("vehicules_neufs") or exit (mysql_error());
	    
	    $affichage = mysql_query("SELECT id_img, nom, description FROM images") or exit (mysql_error());
	    while($result = mysql_fetch_assoc($affichage)) {
	       
		echo '<div>';
		echo '<a href="apercu.php?id_img='.$result['id_img'].'"><img src="apercu.php?id_img='.$result['id_img'].'" alt="'.$result['nom'].'" title="'.$result['nom'].'" /></a>';
		echo '<p>Description : '.$result["description"].'</p>';
		echo '</div>';
	    }
	    mysql_close();
	?>


apercu.php
<?php
//si nous avons une image
if(!empty($_GET['id_img'])) {

//connexion à la base de données
$connexion = mysql_connect("localhost", "root", "") or exit (mysql_error());
$database = mysql_select_db("vehicules_neufs")or exit (mysql_error());

//on sécurise notre donnée
$idImg = intval($_GET['id_img']);

//la requète qui récupère l'image à partir de l'identifiant
$apercu = mysql_query("SELECT extension, img FROM images WHERE id_img = ".$idImg) or exit (mysql_error());

//si le résultat est différent de 1
if(mysql_num_rows($apercu) != 1)
echo 'L image n existe pas !';
else {
//on stocke les données dans un tableau
$reponse = mysql_fetch_assoc($apercu);
//on indique qu'on affiche une image
header ("Content-type: ".$reponse['extension']);
//on affiche l'image en elle même
echo $reponse['img']['extension'];
}
mysql_close();
} else
echo 'Vous n avez pas sélectionné d image !';
?>

j'ai suivis un tutorial et pourtant je pense l'avoir bien suivis mais j'ai du faire une erreur je ne sais où.

Merci d'avance.
Cordialement lionel
Configuration: Windows XP Internet Explorer 7.0

41 réponses

Résumé de la discussion

Le problème porte sur une galerie d'images en PHP qui affiche un tableau sans image et affiche des caractères lorsque l'on clique sur une miniature. Le code d'affichage récupère les images via apercu.php et une erreur existe dans la manière d'envoyer le contenu: il affiche $reponse['img']['extension'] au lieu de l'image brute. La solution recommandée consiste à corriger apercu.php en utilisant header('Content-Type: '.$reponse['extension']) avec l'extension correcte et à afficher directement $reponse['img'] plutôt que $reponse['img']['extension'], afin que les images s'affichent comme prévu.

Bobot (l’IA à votre service)
  1. Bonjour,
    J'ai aujourd'hui le même pb que toi lionel.
    Serait-il possible que tu postes la solution à ce pb ce qui permettra d'en faire bénéficier les autres aussi stp.
    Merci
    1. Re Bonjour,
      j'ai réussi à résoudre mon problème
      MAIS j'ai un nouveau problème, je souhaite recuperer toute les photos de mon repertoire qui ont leurs nom qui commencent de la même manière que ma variable que j'ai récupéré
      Exemple :

      ma variable : $nom='elephant'
      Je veux donc récupérer toutes le photos qui ont leur nom qui commence par 'elephant' ('elephant2.jpg' 'elephant1.jpg' 'elephant23.jpg')
      1. Oui j'ai une solution, laisse ton e-mail mais tu veux juste savoir comment les insérer ou aussi pour les afficher
        si tu répond avant 18h je t'envérai sa aujourd'hui
        1. salu,
          Oui si tu veux je te passe la solution que j'ai utilisé, donne moi ton e-mail et je te l'envoie
          1. Ce que je n'ai pas compris moi, c'est pourquoi tu as ajouté plein de trucs sans rien dire jusqu'au message 24 ? La correction que je t'avais donnée ce matin à 9h40 était la bonne.
            1. Je n'avais même pas remarqué depuis le message 25 ...
              Ça n'a AUCUNE chance de marcher.
              Il faut faire comme dans ton premier script : RIEN DU TOUT avant le premier <?php ni après le ?>
              1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
                <html xmlns="http://www.w3.org/1999/xhtml">
                <head>
                <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
                <title>Document sans titre</title>
                </head>

                <body>

                <?php
                //si nous avons une image
                if(!empty($_GET['id_img'])) {

                //connexion à la base de données
                $connexion = mysql_connect("localhost", "root", "") or exit (mysql_error());
                $database = mysql_select_db("vehicules_neufs")or exit (mysql_error());

                //on sécurise notre donnée
                $idImg = intval($_GET['id_img']);

                //la requète qui récupère l'image à partir de l'identifiant
                $apercu = mysql_query("SELECT extension, img FROM images WHERE id_img = ".$idImg) or exit (mysql_error());

                //si le résultat est différent de 1
                if(mysql_num_rows($apercu) != 1)
                echo 'L image n existe pas !';
                else {
                //on stocke les données dans un tableau
                $reponse = mysql_fetch_assoc($apercu);
                //on indique qu'on affiche une image
                header ("Content-Type: ".$reponse['extension']);
                //on affiche l'image en elle même
                echo $reponse['img'];
                }
                mysql_close();
                } else
                echo 'Vous n avez pas sélectionné d image !';
                ?>

                </body>
                </html>
                1. certains éditeurs ajoutent des caractères invisibles au début des fichiers. Et comme ils sont avant le <?php, ils empêchent les headers de marcher. Je ne connais pas dreamweaver
                  Peux-tu ouvrir ton script apercu.php avec le simple bloc-notes du PC puis l'enregistrer en faisant bien attention de l'enregistrer avec le codage ANSI
                  1. je l'ai retirer depuis le début sur le premier copie de apercu je me suis planter de fichier j'ai voulu aller trop vite désolé
                    1. encore des messages qui se croisent ...
                      Mais il ne faut pas le extension, ça c'est sûr
                      1. Franchement, depuis le début je me tue à te répéter que ta ligne echo $reponse['img']['extension']; est incorrecte. Il faut echo $reponse['img'].
                        Je le dis depuis mon premier message, relis-le.
                        1. désolé je l'ai retirer le extension il n'y est plus et sa marche toujours pas

                          <head>
                          <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
                          <title>Document sans titre</title>
                          </head>

                          <body>

                          <?php
                          //si nous avons une image
                          if(!empty($_GET['id_img'])) {

                          //connexion à la base de données
                          $connexion = mysql_connect("localhost", "root", "") or exit (mysql_error());
                          $database = mysql_select_db("vehicules_neufs")or exit (mysql_error());

                          //on sécurise notre donnée
                          $idImg = intval($_GET['id_img']);

                          //la requète qui récupère l'image à partir de l'identifiant
                          $apercu = mysql_query("SELECT extension, img FROM images WHERE id_img = ".$idImg) or exit (mysql_error());

                          //si le résultat est différent de 1
                          if(mysql_num_rows($apercu) != 1)
                          echo 'L image n existe pas !';
                          else {
                          //on stocke les données dans un tableau
                          $reponse = mysql_fetch_assoc($apercu);
                          //on indique qu'on affiche une image
                          header ("Content-type: ".$reponse['extension']);
                          //on affiche l'image en elle même
                          echo $reponse['img'];
                          }
                          mysql_close();
                          } else
                          echo 'Vous n avez pas sélectionné d image !';
                          ?>

                          </body>
                          1. <head>
                            <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
                            <title>Document sans titre</title>
                            </head>

                            <body>

                            <?php
                            //si nous avons une image
                            if(!empty($_GET['id_img'])) {

                            //connexion à la base de données
                            $connexion = mysql_connect("localhost", "root", "") or exit (mysql_error());
                            $database = mysql_select_db("vehicules_neufs")or exit (mysql_error());

                            //on sécurise notre donnée
                            $idImg = intval($_GET['id_img']);

                            //la requète qui récupère l'image à partir de l'identifiant
                            $apercu = mysql_query("SELECT extension, img FROM images WHERE id_img = ".$idImg) or exit (mysql_error());

                            //si le résultat est différent de 1
                            if(mysql_num_rows($apercu) != 1)
                            echo 'L image n existe pas !';
                            else {
                            //on stocke les données dans un tableau
                            $reponse = mysql_fetch_assoc($apercu);
                            //on indique qu'on affiche une image
                            header ("Content-type: ".$reponse['extension']);
                            //on affiche l'image en elle même
                            echo $reponse['img']['extension'];
                            }
                            mysql_close();
                            } else
                            echo 'Vous n avez pas sélectionné d image !';
                            ?>

                            </body>
                            • 1
                            • 2
                            • 3