Associer une image à l'envoie de données d'un formulaire [Résolu]

Messages postés
11
Date d'inscription
samedi 13 mars 2010
Dernière intervention
4 novembre 2012
- - Dernière réponse : djacquin
Messages postés
11
Date d'inscription
samedi 13 mars 2010
Dernière intervention
4 novembre 2012
- 4 mars 2012 à 19:18
Bonjour,
je développe (j'essaye car je débute !!) une interface pour une location saisonnière. J'ai créé un formulaire de recherche ou le visiteur peut choisir une ville de location, une date et un prix max. Lorsque j'effectue ma requête dans la table studio (table qui contient les champs ville, dates, prix et image), j'ai les résultats qui s'affichent (ceux des champs remplis par le formulaire) et je voudrai y associer l'image qui correspond à la ville pour que les gens puissent cliquer dessus. Je sèche sur la manière d'associer les valeurs postés et cette image.
Avec le code suivant, ça me dit que la variable $image n'est pas déclarée, mais quand je la déclare ($image='image' je ne sais pas si c'est ça et où !!), la photo ne s'affiche pas (j'ai un carré blanc).
Le problème vient-il du code, où du contenu du champ image dans la table qui est l'adresse de l'image ?
Cette adresse doit-elle être du type http://localhost/wamp/www/location/images/img1.png ? (je travaille en local pour l'instant).

Merci pour votre aide, voici mon code :
<html>

<?php
// On commence par recuperer les champs
if(isset($_POST['ville'])) $ville=$_POST['ville'];
else $ville="";

if(isset($_POST['dates'])) $dates=$_POST['dates'];
else $dates="";

if(isset($_POST['prix'])) $prix=$_POST['prix'];
else $prix="";

//faut-il déclarer $image ?

try
{
// On se connecte a MySQL
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=location', 'root', '', $pdo_options);

$req $bdd->prepare('SELECT ville, dates,prix FROM studio WHERE ville :ville AND dates = :dates AND prix<=:prix'); //faut-il rajouter image avant FROM ?
$req->execute(array('ville' => $_POST['ville'], 'dates' => $_POST['dates'],'prix'=>$_POST['prix'])); //faut-il rajouter $image après ['prix'] ?
echo '';
while ($donnees = $req->fetch())
{
echo '<li>' . $donnees['ville'] . ' ' . $donnees['dates'] . ' '.$donnees['prix'].'</li>';

}
echo '';

$req->closeCursor();
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
?>

</html



ironman
Afficher la suite 

Votre réponse

10 réponses

Meilleure réponse
Messages postés
1310
Date d'inscription
samedi 31 janvier 2009
Dernière intervention
5 juin 2013
13
3
Merci
Salut,

Pourquoi de ton point de vue, cette pratique est-elle mauvaise ?

1. Ça n'apporte rien.
2. Ça prend de la place, le code est alourdis.
2. Tu dupliques certains éléments d'une variable pour rien, tu double donc ton utilisation de la mémoire pour rien (ok, on fais du php, globalement on s'en fiche m'enfin juste pour le principe...).
3. Tu perd du sens (on parle de sémantique là) : garder $_GET, $_POST etc indique clairement que le contenu provient de l'utilisateur et est donc potentiellement malveillant. En utilisant des variables "perso", tu peux avoir tendance à oublier ceci et, par mégarde, faire confiance au contenu de la variable. C'est donc mauvais car sujet à des confusions qui peuvent engendrer de graves failles de sécurité.
4. Les tableaux c'est le bien, casser un tableau pour utiliser une ribambelle de variables c'est naze.
J'ajouterais que, dans ton cas, tu créé les variables pour ensuite ne pas les utiliser... donc ça ne sert vraiment à rien.

Mes images sont dans le dossier c:/wamp/www/location/images
Si je ne dois pas générer de balise img comment faire pour afficher cette foutue image !! ??

On s'en fiche du chemin sur le disque, mais complètement. La seule chose qui nous intéresse c'est le chemin depuis le dossier racine du site. Tu utilises quoi comme url pour accéder à ton site ?

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 121 internautes nous ont dit merci ce mois-ci

Commenter la réponse de TychoBrahe
Messages postés
1310
Date d'inscription
samedi 31 janvier 2009
Dernière intervention
5 juin 2013
13
0
Merci
Salut,

Cette adresse doit-elle être du type http://localhost/wamp/www/location/images/img1.png ? (je travaille en local pour l'instant).

Non.

// On commence par recuperer les champs
if(isset($_POST['ville'])) $ville=$_POST['ville'];
else $ville="";

if(isset($_POST['dates'])) $dates=$_POST['dates'];
else $dates="";

if(isset($_POST['prix'])) $prix=$_POST['prix'];
else $prix="";

Ceci est totalement inutile, tu peux le supprimer. J'ajouterais que ce genre de "technique" est particulièrement mauvaise.

$req $bdd->prepare('SELECT ville, dates,prix FROM studio WHERE ville :ville AND dates = :dates AND prix<=:prix'); //faut-il rajouter image avant FROM ?

Attention, tu as oublié de sélectionner le champ image.

echo '<li>' . $donnees['ville'] . ' ' . $donnees['dates'] . ' '.$donnees['prix'].'</li>';

Attention, c'est $donnees['image'] que tu veux utiliser et non $image['image'].
Commenter la réponse de TychoBrahe
Messages postés
11
Date d'inscription
samedi 13 mars 2010
Dernière intervention
4 novembre 2012
0
Merci
Merci pour toutes ces infos !! et la correction de mes erreurs de "débutant". Je vais essayer de faire les modifs. Juste une question : comment dois-je rentrer l'adresse de l'image dans ma table si c'est pas localhost/www/... ?
Merci encore


ironman
Commenter la réponse de djacquin
Messages postés
1310
Date d'inscription
samedi 31 janvier 2009
Dernière intervention
5 juin 2013
13
0
Merci
comment dois-je rentrer l'adresse de l'image dans ma table si c'est pas localhost/www/... ?

Deux solution : le chemin absolu ou le chemin relatif. Attention, la racine commence au DocumentRoot.
Commenter la réponse de TychoBrahe
Messages postés
11
Date d'inscription
samedi 13 mars 2010
Dernière intervention
4 novembre 2012
0
Merci
Bonsoir,

j'ai essayé de faire les modifs préconisées par TychoBrahe :
$req $bdd->prepare('SELECT ville, dates,prix, image FROM studio WHERE ville :ville AND dates = :dates AND prix<=:prix');

echo '<li>' . $donnees['ville'] . ' ' . $donnees['dates'] . ' '.$donnees['prix'].'</li>';

mais j'ai en retour : Undefined variable : image in C:\wamp\location......

Merci pour votre aide...


ironman
Commenter la réponse de djacquin
Messages postés
1310
Date d'inscription
samedi 31 janvier 2009
Dernière intervention
5 juin 2013
13
0
Merci
Salut,

Peux-tu mettre tout ton code et tout le message d'erreur stp ?
Commenter la réponse de TychoBrahe
Messages postés
11
Date d'inscription
samedi 13 mars 2010
Dernière intervention
4 novembre 2012
0
Merci
Tout d'abord encore merci pour le temps accordé, j'espère être un jour capable d'aider les autres.

Petit rectificatif, avec le code ci-dessous je n'ai pas de message d'erreur (je me suis trompé en enregistrant mon fichier ailleurs que dans le www de wampserver), mais je n'ai toujours pas d'image qui s'affiche (carré blanc).

Quand je regarde le code source généré, ça me laisse penser à une erreur dans la manière de mettre l'adresse de l'image dans le champ image de la table (donner moi un exemple en absolu ou relatif svp).
Voici le code généré (mon ficher est enregistré au même niveau que le dossier "images" qui contient les images, certaines entrées n'ont pas encore d'image c'est normal):
<html xmlns="http://www.w3.org/1999/xhtml"><head/>
<li>Saint-Raphael du 09 au 16 juillet 500</li><li>Saint-Raphael du 09 au 16 juillet 0</li><li>Saint-Raphael du 09 au 16 juillet 0</li><li>Saint-Raphael du 09 au 16 juillet 200</li>
</html>

Alors voici mon code en entier :

<html>

<?php
// On commence par recuperer les champs
if(isset($_POST['ville'])) $ville=$_POST['ville'];
else $ville="";

if(isset($_POST['dates'])) $dates=$_POST['dates'];
else $dates="";

if(isset($_POST['prix'])) $prix=$_POST['prix'];
else $prix="";


try
{
// On se connecte a  MySQL
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost;dbname=location', 'root', '', $pdo_options);

$req $bdd->prepare('SELECT ville, dates,prix,image FROM studio WHERE ville :ville AND dates = :dates AND prix<=:prix');
$req->execute(array('ville' => $_POST['ville'], 'dates' => $_POST['dates'],'prix'=>$_POST['prix']));
echo '';
while ($donnees = $req->fetch())
{
echo '<li>' . $donnees['ville'] . ' ' . $donnees['dates'] . ' '.$donnees['prix'].'</li>';

}
echo '';

$req->closeCursor();
}
catch(Exception $e)
{
die('Erreur : '.$e->getMessage());
}
?>

</html>

ironman
Commenter la réponse de djacquin
Messages postés
1310
Date d'inscription
samedi 31 janvier 2009
Dernière intervention
5 juin 2013
13
0
Merci
// On commence par recuperer les champs
if(isset($_POST['ville'])) $ville=$_POST['ville'];
else $ville="";

if(isset($_POST['dates'])) $dates=$_POST['dates'];
else $dates="";

if(isset($_POST['prix'])) $prix=$_POST['prix'];
else $prix="";

Comme je te l'ai déjà dit, ceci ne sert à rien et, en plus est une pratique que je trouve mauvaise. Tu devrais vraiment l'enlever, ça n'a strictement rien à faire ici.

Sinon, tu ne devrais pas générer de balise img s'il n'y a pas d'image ainsi que ne pas oublier l'attribut alt :
if (!empty($donnees['image']))
   echo '<li>' . $donnees['ville'] . ' ' . $donnees['dates'] . ' ' . $donnees['prix'] . '</li>'; 
else
   echo '<li>' . $donnees['ville'] . ' ' . $donnees['dates'] . ' ' . $donnees['prix'] . '</li>';
Commenter la réponse de TychoBrahe
Messages postés
11
Date d'inscription
samedi 13 mars 2010
Dernière intervention
4 novembre 2012
0
Merci
Bonjour,

tu avais raison (j'avais peur que plus rien ne fonctionne), sans la partie du code qui sert à récupérer les champs, ça fonctionne. Pourquoi de ton point de vue, cette pratique est-elle mauvaise ?
D'autre part, j'ai rajouté l'attribut alt (que j'ai rempli avec pas image), et j'ai comme affichage "pas image" quand le champ de la table est rempli! Le pb vient donc de la manière d'entrer l'adresse dans la table. Mes images sont dans le dossier c:/wamp/www/location/images
Si je ne dois pas générer de balise img comment faire pour afficher cette foutue image !! ??
Merci pour ton aide


ironman
Commenter la réponse de djacquin
Messages postés
11
Date d'inscription
samedi 13 mars 2010
Dernière intervention
4 novembre 2012
0
Merci
ALLELUIA !!
C'était un problème de chemin relatif par rapport à la position de ma bdd via phpmyadmin.
UN GRAND MERCI pour ta patience, je vais poursuivre mon apprentissage. Il faut maintenant que je mette en forme mes résultats en html et css car c'est moche.
Félicitations.

ironman
Commenter la réponse de djacquin

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.