Afficher une image stockée dans ma bd

msi79 Messages postés 537 Statut Membre -  
msi79 Messages postés 537 Statut Membre -
salut a tous !
je voudrais que les visiteurs de mon site puisseent enregeistrer leur photo dans la base de donnée et ensuite afficher ses photos .
mais je n'arrive pas.
alors je voudrais une aide svp .
merci de bien vouloir m'aider .

NB:
rien ne s'affiche quand j'execute apercu.php .on me met :Vous n avez pas sélectionné d image !

voici mon code :

------------------------------------------------------------------------------------------

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("go&ga") 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="" 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>
</html>

--------------------------------------------------------------------------------------
apercu.php

-------------------------------------------------------------------------------------------

<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("go&ga")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>

-------------------------------------------------------------------------------------------------
galerie.php
--------------------------------------------------------------------------------------------------

<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("go&ga")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>

22 réponses

Guiver Messages postés 270 Statut Membre 88
 
Salut,

Il y'a trop de chose pour être analyser et vérifié (pour ma part en tout cas).
En revanche, pour le nombre et le contenu de tes commentaires afin de nous faciliter la lecture, je dis GG ;)

En revanche, je vois 4 choses :
-Ce n'est peut être pas possible selon l'avancement du site, mais un passage du mysql au pdo me semble être crucial.
-Je ne comprend pas comment tu souhaites afficher la photo en question et si il peut y'en avoir plusieurs par utilisateurs.
-La variable $_GET['id_img'] vient d'ou ?
-Je trouve ca vraiment complexe comme code pour récupérer et afficher une image stocké dans une BDD. Dans un premier temps, as tu essayer de simplifier le code au maximum et voir si l'image s'affiche ?
0
msi79 Messages postés 537 Statut Membre
 
je suis nouvo en php ! peut tu simplifier pour moi svp ... s'il te plai
0
Guiver Messages postés 270 Statut Membre 88
 
comment sont stockés tes images dans ta bdd ?

Fais un screen (imp. écran) si possible.
0
Dr.W Messages postés 406 Statut Membre 40
 
Ton code est pas DU TOUT securisé...

Pour les upload mieux vaut verifier les header (MIME) plutot que l'extention, et renommer systematiquement.

ensuite les mysql_* c'est deprecated.... Il faut utiliser PDO
0
Luxerails Messages postés 162 Statut Membre 41
 
Non, même dans les headers le type mime peut etre modifié par le visiteur comme il veux, donc le visiteur peut facilement upload un backdoor et le site est fichu. :o
0

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

Posez votre question
msi79 Messages postés 537 Statut Membre
 
faire un screnn(imp.écran) ca veut dire koi . je comprend pas
0
Dr.W Messages postés 406 Statut Membre 40
 
J'imagine qu'il veut un screenshot de PHPmyadmin? lol je comprend pas trop non plus.

Evite de poster ton login pass aussi ^^

Les images sont presentes sur ton serveur? Parcequ' en SQL on ne stock que du text et pas des fichiers, ou alors j'ai raté un truc
0
msi79 Messages postés 537 Statut Membre
 
quelqu'un peut il reecrire mon code pour moi et faire les corrections necessaires.
merci d'avance.
je suis nouvo en php
0
Dr.W Messages postés 406 Statut Membre 40
 
Si tu veux apprend mieux vaut le corriger par toi même ;)
0
Dr.W Messages postés 406 Statut Membre 40
 
Explique moi comment est structurer ton serveur stp. Tu as les images dans un dossier et tu stock le nom d'origine de chaque image dans ta BDD en les associant au nom vertiable de l'image sur le serveur?
0
msi79 Messages postés 537 Statut Membre
 
Dr.W: j'ai stocké les images dans ma bdd
0
Dr.W Messages postés 406 Statut Membre 40
 
Tu peu pas stocker un fichier dans une base de donnée ;) Enfin pas une SQL, le SQL c'est pour le texte ou les nombres, mais au final c'est du texte aussi ^^ ou le texte est nombre plutot... lol dsl je part dans mes delire ^^

mysql_query("INSERT INTO images(nom, description, img, extension) VALUES('".$nom."', '".$description."', '".$image."', '".$_FILES['image']['type']."')") or exit (mysql_error());
mysql_close();

Ca ca ne fait rien, a par inserer le nom de l'image et le chemin d'acces sur ton serveur.

Avec PHP il faut que tu deplace le fichier dans un dossier et ensuite pour afficher l'image tu met le chemin relatif dans une balise <img> :)
0
Guiver Messages postés 270 Statut Membre 88
 
Je veux savoir comment il stock les infos dans sa bdd et pour moi un screen est plus parlant que du texte ^_^

msi79, désolé mais je n'ai pas le temps de lire, comprendre et réécrire ton code.

Tout ce que je peux faire, c'est te conseiller...
Déja, quitte à apprendre le PHP, abandonne mysql et apprend le PDO

Pour ce faire, le site du zéro est parfait pour les bases voir plus ;)

Bon courage
0
msi79 Messages postés 537 Statut Membre
 
l'utilisateur va charger l'image sur l'ordi . le nom est stocké dan ma bdd
0
msi79 Messages postés 537 Statut Membre
 
Dr.W : oui je vois . je pense que c'est ce que j'ai fais . mais comment faire pour afficher les images
0
Dr.W Messages postés 406 Statut Membre 40
 
Ok une fois que tu a le chemin d'acces de l'image sur ton serveur (en faisant un SELECT sur ta BDD), dison que tes images soit dans: /img

tu fais:

echo '<img src="'.$LE_RESULTAT_DE_TA_REQUETE_SQL_QUI_CONTIENT_LE_CHEMIN_DACCES_AU_FICHIER_SUR_TON_SERVEUR.'"/>'

Où $LE_RESULTAT.... = un truc du genre "/img/lenomdelimage.jpg"
0
msi79 Messages postés 537 Statut Membre
 
Dr.W :: pardon je sais que je demande trop mais peux tu regarder mon code au dessus et rectifier pour moi .
je suis tres debutant donc vraiment je compprend pas
grand chose
0
Dr.W Messages postés 406 Statut Membre 40
 
Bon j'ai aucune idée de ce que renvoi ta requete.... mais bon en supposant que ce soit le chemin d'acces remplace cette ligne:

echo $reponse['img'];

par:

echo '<img src="'.$reponse['img']'."/>;
0
msi79 Messages postés 537 Statut Membre
 
on me dit erreur de syntaxe ligne 25 sur mon dreamweaver
0
Dr.W Messages postés 406 Statut Membre 40
 
ouais j'ai oublier une quote

rajoute ' avant le ;
0
msi79 Messages postés 537 Statut Membre
 
ok plus d'erreur mais toujours : Vous n'avez pas sélectionné d'image !
0
Dr.W Messages postés 406 Statut Membre 40
 
Tu ne rentre pas dans ce if:

if(!empty($_GET['id_img'])) {

Donc t'as un lien foireu et tu recoi jamais le nom de l'image
0
msi79 Messages postés 537 Statut Membre
 
qu'est ce que je fais alors .
0
Dr.W Messages postés 406 Statut Membre 40
 
J'en sais rien dsl... Mais il manque une lien avec galery.php?id_img=lenomdelimage quelque part....
0
msi79 Messages postés 537 Statut Membre
 
merci pour ta disponibilité
0
Dr.W Messages postés 406 Statut Membre 40
 
De rien... Essaye d'aprendre le PHP sur le site du zero, c'est pas tres compliquer et comme ca tu y verra plus clair :)
0
msi79 Messages postés 537 Statut Membre
 
ok
0
msi79 Messages postés 537 Statut Membre
 
quelqu'un d'autre pourrai m'aider svp . merci
0
Dr.W Messages postés 406 Statut Membre 40
 
Heyyy, mais en faite tu execute directement aprecu.php???? Tu passe pas par un lien??
0
msi79 Messages postés 537 Statut Membre
 
non je passe pas par un lien
j"'execute directement
au fait ce sont mes premiers pas en php
0
msi79 Messages postés 537 Statut Membre
 
est ce que je devrai passer par un lien . si oui svp indique moi .
0
Dr.W Messages postés 406 Statut Membre 40
 
Ben oui c'est normal que t'es pas d'image selectionner si tu passe pas par un lien.... Comment tu veut que ton programme sache quel image afficher sinon... :P
0