question sur liste deroulante dependantes ???

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 : question sur liste deroulante dependantes ???

par castelli » 22 juin 2005, 11:14

a daccord :P

par Cyrano » 22 juin 2005, 07:38

Petites explications sur les scripts que j'ai mis dans le forum des développeurs:

Pour la méthode avec JavaScript, ce qu'il faut arriver à comprendre est le schéma suivant: On récupère une liste d'éléments dans un tableau indexé. Pour le moment, on est encore en PHP. Avec PHP, on va écrire la liste obtenue dans un format particulier avec la fonction serialize(). Cette chaine va ensuite être transmise à JavaScript. On utilise quelque chose proche de la programmation objet de JavaScript et la chaine formatée avec serialize() est l'objet qu'on manipule avec le script. Après ça, on utilise un gestionnaire d'évènements onchange() dans la première liste et on appelle la petite fonction JavaScript (le second JavaScript) pour générer la nouvelle liste déroulante.

Ça a l'air complexe, mais en réalité, il faut essayer de suivre pas à pas le fonctionnement pour réaliser que c'est assez simple.

Pour les inconvénients, je l'ai mentionné aussi, c'est mort si JavaScript est désactivé coté client. En revanche c'est beaucoup plus rapide que la méthode 100% PHP à cause des échanges client/serveur à chaque changement sur la première liste puisque là, il faut aller récupérer les informations avec une nouvelle requête.

Le plus difficile à capter avec la méthode JavaScript, c'est le format du tableau et comment le construire à la base en PHP. Mais ce cap passé, on pourrait très bien envisager d'avoir d'autres listes en cascade, la seconde dépendant de la première, la troisième de la seconde, etc...

Voyez dans le dernier numéro de DirectionPHP (juin 2005) un article gratuit (pdf) sur le JSRS intitué "Extrait gratuit JSRS : interaction sans rafraîchissement de la page Daniel Lucazeau"

Ça reprend exactement le même thème.

par ouckileou » 21 juin 2005, 15:25

ce n'est pas du PHP mais du Javascript, car cela gère les actions coté client
la méthode simple, c'est d'appeler le rechargement de la page à chaque changement

tu peux faire un formulaire par liste par exemple

Code : Tout sélectionner

<form name="formulaire1" action="taPage.php" method="POST" onChange="document.getElementById('formulaire1').submit();"> <select> <option>...</option> etc etc </select> </form>
c'est le "onChange" qui va soumettre le formulaire à chaque fois que l'utilisateur change la valeur sélectionnée dans la liste
tu peux donc récupérer la valeur de la variable envoyée et construire la deuxième liste en fonction

Attention : si tu ne fonctionnes qu'avec ça, quelqu'un qui a désactivé Javascript ne pourra plus naviguer !

voilà ;)

par freebug » 21 juin 2005, 15:13

@ouckileou

maintenant j ai reussit a incrementer mes listes automatiquement par rapport a ma base (se fu dur :))

tu m'avais dit qu'apres il y aurais une méthode simple pour faire des listes déroulantes liées de manière simple avec du php qui rafraichi la page en gardant la selection et en mettant a jour l autre liste.

Donc je voulais savoir si tu pouvais m'en dire plus, car j'ai regarde les méthodes données par cyrano qui marche a la perfection dans les exemples mais j y comprend vraiment rien,c'est trop complexe pour moi :(.

par freebug » 21 juin 2005, 11:05

Bon ok c est bon j arrive a incrementer mes liste par rapport a ma base maintenant.
Bon je viens de lire 2* le lien que tu ma donné pour les listes deroulante lié et je vais la relire encore pk je comprend pas grand chose :)

(ps la methode javascript j ai deja abandonne ^^)

par freebug » 21 juin 2005, 10:25

<?php 

//on inclu le fichier connect.php 
include("connect.php"); 
?> 
<form method="post" action="bidule.php3"> 
  <table border=2> 
    <tr> 
      <th align=middle>Sélectionner une option : </th> 
    </tr> 
    <tr> 
      <td align=center> 
       <select name="service"> 
<?php 
         $db = mysql_select_db("ges_imprimante"); 
         $sql="SELECT service FROM service"; 
         $optio=mysql_query($sql,$db) or die(mysql_error()); 
         $a = mysql_num_rows($optio);
         echo "$a";
         while($row = mysql_fetch_array($optio)) 
         { 
          
           print "<option value='".$row['service']."'>".$row['service']."</option>"; 

         }     
?> 
        </select> 
      </td> 
    </tr> 
    <tr> 
      <td align=center><input type="submit" value="Pour choisir."></td> 
    </tr> 
  </table> 
</form>
je suppose que la fonction mysql_num_rows ne doit pas s uyilser comme ca , nan ?

par Cyrano » 21 juin 2005, 09:47

Insère un mysql_num_rows entre la requête et l'affichage de la liste pour voir combien de lignes retourne la requête: si tu as 0, il y a un problème ailleurs

par freebug » 21 juin 2005, 09:29

Il devrait s afficher dans le menu deroulant les services rentre dans ma base de données, et la quand j execute j ai un menu deroulant vide.
pourtant j ai teste ma requete elle marche c est sur.

voila desole pour le manque de precision

par Cyrano » 21 juin 2005, 09:09

"Ça ne marche pas" est un comentaire un peu insuffisant : comment veux-tu qu'on sache quoi te répondre si on ne sait pas au juste ce qui ne fonctionne pas ? Qu'est-ce qui se passe qui ne devrait pas ou encore qu'est-ce qui devrait se passer qui n'arrive pas...?

par freebug » 21 juin 2005, 09:04

La je ne comprend vraiment quand j essais ce code la :
<?php 

//on inclu le fichier connect.php 
include("connect.php"); 
?> 
<form method="post" action="bidule.php3"> 
  <table border=2> 
    <tr> 
      <th align=middle>Sélectionner une option : </th> 
    </tr> 
    <tr> 
      <td align=center> 
       <select name="service"> 
<?php 
         $db = mysql_select_db("ges_imprimante"); 
         $sql="SELECT service FROM service"; 
         $optio=mysql_query($sql,$db) or die(mysql_error()); 

         while($row = mysql_fetch_array($optio)) 
         { 
         
           print "<option value='".$row['service']."'>".$row['service']."</option>"; 

         }    
?> 
        </select> 
      </td> 
    </tr> 
    <tr> 
      <td align=center><input type="submit" value="Pour choisir."></td> 
    </tr> 
  </table> 
</form>  
ca ne marche.

puis un ami ma donné son code que je reutilise et ca marche pas non plus (alors que chez lui je le vois tres bien fonctionner) en plus les deux codes sont tres proche.

<form action="imprimante2.php"  name="form1" target="_self" Method="POST">
<table width="526" border="0">
  <tr>
    <td>
    Bureau :
    <select name="bureau">
   <?php
	$base = "ges_imprimante";
	if ($base != -1 ){
	$link = connect_db($base);
	$requete_util = "select service from service";
	$result_ulil = mysql_query($requete_util) or die("requete base erreur");
	while ($data = mysql_fetch_array($result_util))
	{
		print "<option value='".$data['service']."'>".$data['service'];
        }
   }
   else
   {
       ?>
<div class="erreur">
aucune base n'est activ&eacute;e.
</div>
<br>
<br>
<?php
  }
mysql_close();
?>
</select>
d autre part on utilise tout les deux easyphp 1.8 ddonc c est pas un probleme de code non compatible :(

par Cyrano » 17 juin 2005, 19:24

Liste déroulantes liées ==> Nouveau
Voyez si quelque chose vous aide à résoudre le problème.

par freebug » 17 juin 2005, 17:09

Meme avec ca ca marche toujours un mec viens passer un code qu il a utiliser pour la meme chose et c'est quasiment les meme.

bon il a un mysql_close() a la fin que j ai pas mais c est pas qui empecherai le truc de marcher.

:cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry:

par ouckileou » 17 juin 2005, 15:52

normal tu n'as pas modifié ton code en conséquence après avoir tout mis dans le PHP

essaye ceci
echo "<option value=\"".$row['section']."\">".$row['service']."</option>";

par freebug » 17 juin 2005, 15:41

Donc si ca c est bon ca devrait marcher et pourtant nan.

La connection a ma base je suis sur quelle fonctionne car j'utilise la meme pour toutes les autres pages et ca fonctionne.
Ma requete fonctionne je l ai essaye sous phmyadmin.
apres le formulaire fonctionne puisqu il s affiche :).

Donc ba il reste le php :cry: .

par ouckileou » 17 juin 2005, 14:42

:lol: :lol:

1 et 2, mais pas 3 ;)

c'est ce que je t'ai dit :
- soit tu écris toute ta chaine "<option>....</option>" en PHP => ce que tu viens de poster
- soit tu fais écrire seulement ce qui change (ce que tu mets dans value et le libellé qui va avec), le reste étant du HTML simple => ce que t'avais proposé Cyrano

donc là c'est un choix à faire, fais ce qui te convient le mieux
mais généralement on essaye d'en faire écrire le moins possible au PHP

les boulets ici ce sont ceux qui veulent pas comprendre, pas ceux qui comprennent pas ;)

sinon
il va rien faire car il pris comme du html alors que c'est une fonction php
c'est ça, tu auras simplement écris dans ta page "print"