Insertion image php/mysql

Résolu/Fermé
lionel - 7 mai 2009 à 08:40
 Scienti - 14 mars 2012 à 14:35
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

41 réponses

Bonjour

Je n'ai pas tout lu dans le détail (c'est assez long) mais vers la fin de apercu.php, il y a une ligne qui est certainement fausse :
echo $reponse['img']['extension'];
devrait être simplement :
echo $reponse['img'];

Mais ça n'explique pas tout. Je pense que le champ 'extension', qui vient de l'information $_FILES['image']['type'], n'est pas renseigné. Peux-tu aller voir dans ta base de données ( avec phpadmin au autre) ce qu'il y a dans ce champ ?
1
Bonjour, J'ai le meme problème que Lionel, j voulais stocker les fichiers images dans la base de données via un formulaire,quand je clique sur <parcourir> et après selectionne le nom de l'image, quand j clique sur le bouton <ajouter> pour mettre dans la table on me dit que le fichier n'existe pas alors que j l'ai bien sélectionné.
Pourriez-vous me donner un code php qui m'aide à le faire?
Merci!
0
rebonjours,
j'ai changer ce que tu ma dit et il y a cela dans ce champs:

id_img nom description img extension
Modifier Effacer 1 III jjyu [BLOB - 53,9 Kio] image/jpeg
Modifier Effacer 2 jytk kyuklyu [BLOB - 53,9 Kio] image/jpeg
Modifier Effacer 3 kiuil omiùmio [BLOB - 53,9 Kio] image/jpeg
Modifier Effacer 4 oi lyolo [BLOB - 64,0 Kio] image/jpeg
Modifier Effacer 5 liom mioupùmpo [BLOB - 64,0 Kio] image/jpeg
Modifier Effacer 6 liolio liolio [BLOB - 64,0 Kio] image/jpeg
Modifier Effacer 7 kè-kl_ll loç [BLOB - 64,0 Kio] image/jpeg

mais toujours le même problème.
merci.
0
Le tas de caractères que tu as quand tu cliques sur une image, il ne commence pas par un message d'erreur ?
0
rebonjours,
non il ne commence pas par un message d'erreur et maintenant que j'ai changer ce que tu ma dit j'ai cela quand je clique sur l'image ("l'image ne s'affiche pas c'est une petite croix rouge"):


http://localhost/tests/apercu.php?id_img=1
merci
0

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

Posez votre question
Merci pour le lien, comme il est en localhost, je ne peux pas le voir ;)
On va piéger l'erreur pas à pas.
Peux tu ajouter
echo 'coucou'; exit;
juste après //si le résultat est différent de 1
dans le script aperçu.php ?
0
En faite je sais que c'est un local host mais ce n'est pas pour aller voir c'est juste que quand je veux lancer l'image c'est ce lien ki s'affiche et ensuite après avoir mis ce que tu ma donner, le lien ne s'affiche pu j'ai coucou à la place.

merci
0
enlève le coucou.

Ré-écrit Content-Type avec une majuscule à Type. C'est écrit comme ça dans la RFC, mais je n'ai pas encore trouvé le paragraphe qui dit si c'est important ou pas de respecter la casse à ce niveau là. Je cois que si.
0
si tu veux mon tableau ce créer avec une description en dessous mais dans le tableau il n'y à pas d'image, c'est juste des rectangle avec le nom des images, et quand je clique j'ai coucou ("avant j'avai le lien en local host qui s'affichai") mais jamais je ne vois l'image.
merci
0
désolé mais le problème n'est pas la vue que cela n'a rien changer.
Serait t'il possible que quand l'on reçoie une image d'un formulaire on puisse la stocker directement dans un fichier et nom dans une base de donnée, et récupérer sont nom seulement qui sera stocker dans la base donnée ainsi on aurait juste à faire cela pour afficher l'image:

<img src="../images/"nom avec extension" width="120" />

peut-être une meilleur solution mais je voulais que la personne qui rentre les image puisse les supprimer aussi depuis une page web et ce serai plus simple si elle était dans la base de donnée ainsi il suffit de ce connecter et de supprimer la ligne.
merci
0
J'avais bien compris.
C'est pour ça que je te propose de faire marcher le script apercu.php, car c'est lui qui affiche les images.
Aprsè avoir supprimé le coucou précédent, peux-tu le remettre juste avant header ("Content-type: ".$reponse['extension']);
et appeler directement la page
http://localhost/tests/apercu.php?id_img=1
0
nos posts se sont croisés.
Oui c'est possible de ne stocker que le nom de fichier dans la base et de ranger le fichier ailleurs. C'est même le procédé généralement recommandé, mais ça n'était pas ta question. Ta méthode devrait pouvoir marcher aussi.
0
j'ai encore juste un coucou et quand je l'appele directement j'ai juste une page vierges avec simplement l'adresse que j'appelle ("http://localhost/tests/apercu.php?id_img=1") écrire sur le font blanc.

merci
0
et ci je faisait ainsi, je stocke sur un fichier.
Y a t'il un script en php qui supprimerai des fichiers et comment récupérer le nom de l'image, par exemple loh123456.jpg sans récupérer tout le chemin.

enfin je pose la question car cela fait déjà deux jours que je cherche pour résoudre ce problème et que je nage totalement

merci.

désolé d'avoir poster plusieurs fois, je ne suis encore pas membres je ne peut modifier.
0
move_uploaded_file pour stocker les fichiers reçus via formulaire
path_info pour décomposer un nom de fichier en ses éléments
unlink pour effacer un fichier

Toutes ces fonctions sont dans le même chapitre (celui sur les fichiers) du manuel de référence PHP.
https://www.php.net/manual/fr/book.filesystem.php

Deux jours ? Mais où as-tu cherché ?
0
j'ai cherché sur beaucoup de forum et de tuto mais je post pour la première fois aujourd'hui mais même ainsi je n'arrive toujours pas à stocker et récupérer mon image dans la base de donnée.

merci
0
j'aimerais savoir si quelqu'un à déjà réussi à faire ce que je veux faire, et si quelqu'un trouverai mon erreur car j'ai toujours la solution de stocké les images ailleurs mais sa ne me dit pas vraiment.

merci
0
J'ai cherché sur beaucoup de forum et de tuto C'est bien là le problème. Il faut toujours commencer par chercher dans les manuels de référence.
Pour en revenir à ton problème, si tu ne changes pas de méthode de stockage, que donne la manip du messge 10 ?
0
J'ai repris tes scripts de départ. J'ai changé le minimum (connexion à la base. et renommé le script entree_image.php en entree_nouveau_vehicule.php.)
j'ai recréé ta base de données (type LONGBLOB pour les images)
J'ai constaté le même problème que toi
j'ai corrigé comme dit dans ma réponse 1
echo $reponse['img']['extension']; ->echo $reponse['img'];


Alors avant de continuer à courir, j'aimerais que tu me confirmes qu'après cette modification, et celle-là seulement, par rapport aux scripts de ta demande initiale, tu ne réussis pas à afficher une image que tu viens d'uploader
0
salut
j'ai besoin d'insérer des image dans un server via mysql et php,

avez vous une idée ?

merci
0
bonjour . moi aussi j'ai besoin d'insérer des image dans un server via mysql et php,

avez vous une idée ?
merci
0
Précision que je croyais avoir écrite : ça marche avec cette seule modif.
0
moi sa ne marchai pas mais j'étai en blob seulement, est-ce que cela change quelqque chose???
merci de chercher
0
je doit avoir un problême car j'ai aussi tout repris et l'image ne s'affiche pas et maintenan je n'est plus tout les caractère mais j'ai le lien pour la page apercu.php qui s'affiche comme je te l'ai dit précédement.
merci
0