[Résolu] Remplir un select avec Prototype

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [Résolu] Remplir un select avec Prototype

Re: Remplir un select avec Prototype

par fabulon » 23 déc. 2009, 22:03

J'ai trouvé!
Mon <option> qui affiche les valeurs du 1er select n'a pas de valeur. Donc IE n'en tire rien.
En revanche, firefox se débrouille pour tirer le texte de l'option si l'option n'a pas de value.

Donc voilà la modif pour mon prog:
echo '<option value="'.$i.'">'.$i.'</option>';

voili voilo

Re: Remplir un select avec Prototype

par Nours312 » 23 déc. 2009, 11:55

Salut ... j'ai pas décrypté tout ton post ... mais j'aurais pri, personnellement les choses différemment ... peut etre ça te sera utile !..

1. mise en place d'un écouteur (c'est mieux qu'en dur !)

Code : Tout sélectionner

$('tbl1').observe('change', function(e){ new Ajax.Request('url', { parameters : {'tbl1Value' : $F('tbl1') } onComplete : function(xhr){ xhr.responseText.evalJSON().each(function(el){ $('tbl2').options[$('tbl2').options.length] = new Option(el[0]); }); } } });
avec dans le fichier php appelé par la requête :

Code : Tout sélectionner

echo json_encode($arrayList2[$_POST['tbl1Value']]);
Attention, ce code à été posé en vrac, et il y a surement des erreurs, surtout sur l'incrémentation des options ;) .. et il va peut-etre falloir Hash-er le Json ... mais sinon, l'idée générale est bonne ... fais un test, à mon avis ce serait plus performant !...

[Résolu] Remplir un select avec Prototype

par fabulon » 22 déc. 2009, 11:15

Bonjour,
Ne parvenant pas à me débrouiller avec les requêtes ajax, j'ai essayé de suivre des tutos utilisant la librairie prototype.

Ce que je veux, c'est faire 2 listes liées dynamiquement.
Donc un premier select, qui amène à faire une requete ajax, qui amène sur un fichier php utilisant la valeur du 1er select, et renvoie une valeur à mettre dans le 2nd select.

Voilà ce que ça donne:
http://gambetta.cahors.free.fr/exemple/
C'est à dire pas grand chose!
J'ai l'impression qu'il y a 2 soucis:
- le premier: la valeur choisie dans mon premier select n'est pas transmise dans le fichier .php
- le second: le résultat n'est pas transmis dans le 2nd select.

J'ai fait un paquet des qq fichiers de mon prog:
http://gambetta.cahors.free.fr/exemple/exemple.rar

En voici qq extraits:
Le form dans le fichier principal index.php

Code : Tout sélectionner

<form method = "post" name = "socle" action="socle.php"> <p align = "center"> <select name="tb1" id="tb1" size=1 onchange='requete_ajax();'> <?php for ($nb=0;$nb<$max;$nb++) { $i=mysql_result($res,$nb,$table1_champ1); echo '<option>'.$i.'</option>'; } ?> </select> <select name="eleve" id="emplacement" size=1> </select> </p> <p>&nbsp;</p> <p align="center"><input TYPE="submit" VALUE="Envoyer" ></p> </form>


Ma fonction requete_ajax:

Code : Tout sélectionner

function requete_ajax() { var url = 'remplir2ndselect.php'; var parametres = 'tb1';//Les paramètres que l’on va fournir (par GET ou POST voir plus bas) var myAjax = new Ajax.Updater( //Création d’une requête Ajax toute faite !) 'emplacement', //Le nom du div qui va recevoir les infos de la page php lancée url, //url de la page lancée { method: 'get', //Méthode pour les paramètres (GET ou POST) parameters: parametres //Paramètres rentrés plus haut } ); } //C’est tout !
Et le fichier php pour remplir le 2nd select:

Code : Tout sélectionner

<?php header('Content-type:text/html;charset=ISO-8859-1'); include ('connexion.php'); $table1='classe'; $table2='socle'; $table1_champ1='classe'; $table2_champ1='classe'; $table2_champ2='eleve'; $choix1=$_GET['tb1']; $rch="WHERE $table2_champ1 ='" .$choix1. "'"; $res=mysql_query("SELECT * FROM $table2 ".$rch); $max=@mysql_num_rows($res); $t=""; for ($nb=0;$nb<$max;$nb++) { $i=mysql_result($res,$nb,"$table2_champ2"); $t.="\t".$i; } echo $t; echo 'bonjour'; ?>
Help :priere: