Associer une image à l'envoie de données d'un formulaire

Résolu
djacquin Messages postés 10 Date d'inscription samedi 13 mars 2010 Statut Membre Dernière intervention 4 novembre 2012 - 3 mars 2012 à 17:01
djacquin Messages postés 10 Date d'inscription samedi 13 mars 2010 Statut Membre 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

10 réponses

TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
4 mars 2012 à 17:34
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 ?
3
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
3 mars 2012 à 17:56
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'].
0
djacquin Messages postés 10 Date d'inscription samedi 13 mars 2010 Statut Membre Dernière intervention 4 novembre 2012
3 mars 2012 à 18:20
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
0
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
3 mars 2012 à 20:41
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.
0

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

Posez votre question
djacquin Messages postés 10 Date d'inscription samedi 13 mars 2010 Statut Membre Dernière intervention 4 novembre 2012
3 mars 2012 à 21:22
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
0
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
3 mars 2012 à 22:38
Salut,

Peux-tu mettre tout ton code et tout le message d'erreur stp ?
0
djacquin Messages postés 10 Date d'inscription samedi 13 mars 2010 Statut Membre Dernière intervention 4 novembre 2012
3 mars 2012 à 23:24
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
0
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
4 mars 2012 à 06:49
// 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>';
0
djacquin Messages postés 10 Date d'inscription samedi 13 mars 2010 Statut Membre Dernière intervention 4 novembre 2012
4 mars 2012 à 10:03
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
0
djacquin Messages postés 10 Date d'inscription samedi 13 mars 2010 Statut Membre Dernière intervention 4 novembre 2012
4 mars 2012 à 19:18
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
0
Rejoignez-nous