Rechercher : dans
Par :

Insertion image php/mysql

Dernière réponse le 17 jun 2009 à 17:13:18 lionel, le 7 mai 2009 à 08:40:29 
 Signaler ce message aux modérateurs

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

Meilleures réponses pour « insertion image php/mysql » dans :
PHP - Génération d'images VoirPrérequis PHP permet de créer des images au format GIF à l'aide d'une librairie de fonctions prévue à cet effet. La librairie permettant de créer et manipuler des fichiers graphiques se nomme GD, ainsi, pour pouvoir utiliser ces fonctions il faut...

1

le père, le 7 mai 2009 à 09:40:32

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 ?

Répondre à le père

2

lionel, le 7 mai 2009 à 10:04:14

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.

Répondre à lionel

3

le père, le 7 mai 2009 à 10:05:44

Le tas de caractères que tu as quand tu cliques sur une image, il ne commence pas par un message d'erreur ?

Répondre à le père

4

lionel, le 7 mai 2009 à 10:09:55

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

Répondre à lionel

5

le père, le 7 mai 2009 à 10:13:27

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 ?

Répondre à le père

6

lionel, le 7 mai 2009 à 10:19:39

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

Répondre à lionel

7

le père, le 7 mai 2009 à 10:24:39

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.

Répondre à le père

8

lionel, le 7 mai 2009 à 10:25:32

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

Répondre à lionel

9

lionel, le 7 mai 2009 à 10:31:25

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

Répondre à lionel

10

le père, le 7 mai 2009 à 10:34:44

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

Répondre à le père

11

le père, le 7 mai 2009 à 10:38:11

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.

Répondre à le père

12

lionel, le 7 mai 2009 à 10:39:37

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

Répondre à lionel

13

lionel, le 7 mai 2009 à 10:44:40

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.

Répondre à lionel

14

le père, le 7 mai 2009 à 11:03:35

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.
http://fr.php.net/manual/fr/book.filesystem.php

Deux jours ? Mais où as-tu cherché ?

Répondre à le père

15

lionel, le 7 mai 2009 à 11:06:25

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

Répondre à lionel

17

lionel, le 7 mai 2009 à 11:23:03

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

Répondre à lionel

18

le père, le 7 mai 2009 à 12:16:52

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 ?

Répondre à le père

19

le père, le 7 mai 2009 à 14:02:24

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

Répondre à le père

38

indesign, le 18 mai 2009 à 17:45:06

Salut
j'ai besoin d'insérer des image dans un server via mysql et php,

avez vous une idée ?

merci

Répondre à indesign