Récupérer des valeurs d'un <input type="image">

Petit nouveau ! | 7 Messages

10 déc. 2007, 22:58

bonjour,

j'aurais besoin de votre aide concernant la récupération de données d'un formulaire avec php.

voici la situation:

ma page accueil.php contient un formulaire avec 2 liste déroulantes contenant les données d'une db mysql et 3 images séparées représentant chacune une ville et qui sont utilisées comme bouton submit (par exemple <input type="image" src="site_images/paris.jpg" name="input_localites" value="paris">, <input type="image" src="site_images/lyon.jpg" name="input_localites" value="lyon"> et <input type="image" src="site_images/bordeaux.jpg" name="input_localites" value="bordeaux">.

Je souhaiterais que lorsque je clique sur l'une des image, ma page me fasse un submit vers une autre page qui affichera uniquement les données qui correspondent à la ville sélectionnée.

Avec Firefox, la valeur est bien transmise et ma page affiche bien les données, mais avec Ie et Opera,je reçoit une erreur de type "Undefined index:...."

Une petite idée d'où vient le sushi?

Merci d'avance

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

10 déc. 2007, 23:08

Salut,
Le plus simple est de vérifier le contenu de $_POST :wink:
<pre>
<?php print_r($_POST); ?>
</pre>

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute

Petit nouveau ! | 7 Messages

11 déc. 2007, 09:33

ce qui est vraiment chelou c'est que cela fonctionne nickel avec Firefox, mais pas avec Ie ou Opera. On dirait que la valeur paris n'est pas envoyée correctement à l'autre page.

voici une partie du code de mes 2 pages:

page avec le formulaire:
----------------------------

Code : Tout sélectionner

<form id="form1" name="form1" method="post" action="<?php echo ANNONCES_LIEN; ?>"> ....... <select class="liste" name="select_biens">.....</select> ....... <select class="liste" name="select_types">.....</select> ....... <input type="image" src="site_images/paris.jpg" name="input_localites" value="paris"> ....... <input type="image" src="site_images/lyon.jpg" name="input_localites" value="lyon"> ....... <input type="image" src="site_images/bordeaux.jpg" name="input_localites" value="bordeaux"> </form>
page qui affiche les données:
----------------------------------
<?php
// on récupère les valeurs dans le lien
$biens = $_POST['select_biens'];
$types = $_POST['select_types'];
$localites = $_POST['input_localites'];

// on affiche le résultat
echo ''.$biens.'<br>'.$types.'<br>'.$localites.'<br>';
.....
?>

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

11 déc. 2007, 11:42

As-tu regardé le contenu de $_POST comme le suggérais Truc ?

Il me semble me souvenir que lorsque l'on clique sur une image, ce sont les coordonnées du pixel cliqué qui sont soumisent via le formulaire (d'où l'effet submit associé), et en aucun cas la valeur éventuellement associée..

Tu dois probablement avoir un $_POST['input_localites.x'] et un $_POST['input_localites.y'] :)


Edit : http://www.w3.org/TR/html4/interact/forms.html#h-17.4.1
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 7 Messages

11 déc. 2007, 12:58

salut,

voici ce que je reçois sous ie:
----------------------------------

Array ( [select_biens] => 1 [select_types] => 1 [input_localites_x] => 10 [input_localites_y] => 38 )
Notice: Undefined index: input_localites in c:\program files\divers\easyphp1-8\www\igloo4c\annonces.php on line 8

Pour info la ligne 8 correspond à cela: $localites = $_POST['input_localites'];

et voici ce que je reçois sour firefox:
------------------------------------------

Array ( [select_biens] => 1 [select_types] => 1 [input_localites_x] => 13 [input_localites_y] => 38 [input_localites] => paris )

Comme tu l'as indiqué plus haut, il s'agit d'un problème avec la position de l'image....

Comment est-il possible de remédier au problème?

Merci d'avance.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

11 déc. 2007, 13:25

bah euh... y a pas trop de solution pour y remédier, t'es pas sensé passer de valeur dans une image, même si firefox le tolère...

donc faut opter pour le choix de ta ville via un menu déroulant, ou opter pour un code javascript qui ira mettre à jour un champ caché lorsque tu cliques sur l'une des images (img du coup, au lieu de input) et soumettre le formulaire...

Code : Tout sélectionner

onClick="document.nom_formulaire.champ_caché.value = 'paris'; document.nom_formulaire.submit();"
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 7 Messages

11 déc. 2007, 13:50

c'est nul, il y a toujours un hic quelque part :shock:

et si j'utilise la methode post pour récupérer les valeurs des listes déroulante et la méthode get pour envoyer la valeur de l'image via un lien, vous pensez que cela est faisable (les 2 méthodes ensemble)?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

11 déc. 2007, 14:58

Tu peux le faire (envoyer des données à la fois en post et à la fois en get), mais pas sous la forme d'un lien. Il faut pour cela modifier l'attribut action de ton formulaire pour y spécifier les paramètres à passer dans l'url :

Code : Tout sélectionner

<form action"index.php?va1=toto" method="post"> <input name="var2" value="titi" /> </form>
Tu recevras ainsi $_GET['var1'] et $_POST['var2'], mais cela t'obligera encore à utiliser l'action onClick sur une iamge et modifier l'action du formulaire avec js, donc un interêt assez limité... autant tout envoyer en post et passer par le champ hidden.

Autre solution sinon, tu donnes 3 noms différents à tes input image, et tu regardes pour lequel les coordonnées ont été envoyés :
if (isSet($_POST['input_localites_paris_x']))
  $input_localites = 'paris';
elseif (isSet($_POST['input_localites_bordeaux_x']))
  $input_localites = 'bordeaux';
...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Petit nouveau ! | 7 Messages

11 déc. 2007, 15:59

Testé et approuvé :D

Tu es trop fort. La 2ème solution fonctionne du tonnerre sur les 3 navigateurs.

Il faut répéter quelque fois les mêmes lignes de codes, mais c'est pas grave :D

Un grand merci.

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

12 déc. 2007, 01:36

Modération :
maximeus, si ta question est résolue, pense à ajouter le tag [Résolu]
pour indiquer aux personnes qui voudront consulter ce sujet qu'il contient une solution.
Tu peux réaliser cette opération en cliquant sur le bouton Image en haut à gauche de ce sujet.

/!\ Avant de poster se documenter et rechercher.
Qui ne sait pas rendre un service n'a pas le droit d'en demander.
MaBrute