Insertion image php/mysql
Résolu
lionel
-
Scienti -
Scienti -
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:
galerie.php
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
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
A voir également:
- Insertion image php/mysql
- Image iso - Guide
- Touche insertion clavier - Guide
- Insertion sommaire word - Guide
- Insertion filigrane word - Guide
- Insertion liste déroulante excel - Guide
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 ?
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 ?
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.
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.
Le tas de caractères que tu as quand tu cliques sur une image, il ne commence pas par un message d'erreur ?
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
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
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 ?
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 ?
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
merci
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é-é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.
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
merci
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
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
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
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
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.
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.
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
merci
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.
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.
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é ?
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é ?
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
merci
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
merci
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 ?
Pour en revenir à ton problème, si tu ne changes pas de méthode de stockage, que donne la manip du messge 10 ?
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
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
Pourriez-vous me donner un code php qui m'aide à le faire?
Merci!