rafraichissement d'un sélect

rafraichissement d'un sélect - PHP - Programmation

Marsh Posté le 16-02-2008 à 13:56:44    

Bonjour,
 
J'ai deux sélect qui fonctionnent ensemble, c'est-à-dire que le 2e dépend du choix effectué au premier sélect. Ça fonctionne plus ou moins bien à date.
 
1) quand je clique sur ok, le premier sélect (type) se réinitialise; je voudrais conserver le choix de l'usager  
 
2) Quand je fais un choix dans le premier sélect (type), je voudrais que le 2e sélect (an) soit mis à jour sans cliquer sur ok.
 
Voici le code des mes deux sélect.
 
Merci!
 

Code :
  1. // Sélection du statut
  2. echo '<tr>';
  3. echo '<th width="20%" align="right" height="35">Liste</th>';
  4. echo '<td>';
  5.  $type=$_POST['type'];
  6.  require("../../config.inc.php" );
  7.  $r_type = "SELECT distinct(type),TB_statut.description FROM `ATS_statut`
  8.       left join TB_statut on ATS_statut.type=TB_statut.code order by TB_statut.description";
  9.  $res = mysql_query($r_type);
  10.  echo '<select name="type">';
  11.  while($val=mysql_fetch_array($res)) {
  12.   echo "<option value=".$val["type"].">".$val["description"]."</option>\n";
  13.   if($type == $val["type"]) {echo ' selected="selected"';}
  14.  }
  15.  echo '</select>';
  16.  echo $type;
  17. echo '</td>';
  18. echo '</tr>';
  19. // Sélection de l'année
  20. echo '<tr>';
  21. echo '<th align="right" height="35">Année</th>';
  22. echo '<td>';
  23.  $r_an="SELECT distinct(an) FROM `ATS_statut` WHERE type='$type' order by an";
  24.  $res = mysql_query($r_an);
  25.  echo '<select name="an">';
  26.  while($val=mysql_fetch_array($res)) {
  27.   echo "<option value=>".$val["an"]."</option>\n";
  28.   if($an == $val["an"]) {echo ' selected="selected"';}
  29.  }
  30.  echo '</select>';
  31.  echo $an;
  32. echo '</td>';
  33. echo '</tr>';

Reply

Marsh Posté le 16-02-2008 à 13:56:44   

Reply

Marsh Posté le 16-02-2008 à 14:24:40    

fourniey a écrit :

Bonjour,
 
J'ai deux sélect qui fonctionnent ensemble, c'est-à-dire que le 2e dépend du choix effectué au premier sélect. Ça fonctionne plus ou moins bien à date.
 
1) quand je clique sur ok, le premier sélect (type) se réinitialise; je voudrais conserver le choix de l'usager  


 
quand tu veux selectionner une valeur par defaut d'un select il faut utiliser l'atribut selected="selected"
http://www.w3schools.com/html/tryi [...] ml_select3
http://www.w3schools.com/html/html_forms.asp
 
oupsss, j'avais pas vu que tu as eu l'idée de faire ceci. Tu as bien commencé mais tu t'es trompé dans la syntaxe. L'atribut selected="selected" est dans la balise option. <option select="selected">toto</option>
 
 

Citation :

2) Quand je fais un choix dans le premier sélect (type), je voudrais que le 2e sélect (an) soit mis à jour sans cliquer sur ok.


plusieurs possibilité pour faire ceci :
- passer par de l'ajax
Au moment ou tu selectionne ton premier select, tu appelles une fonction JS avec l'événement onChange  
- qui créé le 2ème select en DOM
- qui fait un submit (rafraichissement de toute la page)

Reply

Marsh Posté le 16-02-2008 à 14:53:54    

J'ai changé le selected et j'obtiens une erreur.
 

Code :
  1. echo '<select name="type">';
  2.  while($val=mysql_fetch_array($res)) {
  3.  $selected="";
  4.   if($type == $val["type"]) {
  5.    $selected=" selected=\"selected\"";
  6.   }
  7.   echo '<option value='.$val["type"].$selected.'>'.$val["description"] '</option>\n';
  8.  }
  9.  echo '</select>';


Message édité par fourniey le 16-02-2008 à 15:09:22
Reply

Marsh Posté le 16-02-2008 à 15:16:38    

De cette façon, mon premier sélect est ok.
 
   $selected="";
   if($type == $val["type"]) {$selected=" selected=\"selected\"";}  
   echo '<option value='.$val["type"].$selected.'>'.$val["description"].'</option>\n';

Reply

Marsh Posté le 17-02-2008 à 14:50:51    

voila très bien en effet ...
 
Apres, utilises l'évenement onChange sur ton 1er select :
 
echo '<select name="type" onChange="fsubmit()" >';
 
et créé toi une fonction JS ou tu submit ton formulaire (par exemple) :

<script>
function fsubmit ()
{
//tu submit ton formulaire
 
}
</script>


Message édité par weed le 17-02-2008 à 14:51:23
Reply

Marsh Posté le 17-02-2008 à 15:20:16    

je ne suis pas assez famillier pour faire cela.
 
Je suis entrain d'étudier les listes déroulantes liées entre elles en ajax pour voir ce que je peux faire.

Reply

Marsh Posté le 17-02-2008 à 20:56:30    

fourniey a écrit :

je ne suis pas assez famillier pour faire cela.
 
Je suis entrain d'étudier les listes déroulantes liées entre elles en ajax pour voir ce que je peux faire.


 
Idéallement c'est bien sur de le faire en Ajax mais seulement dans un premier temps pour te simplifier la tache, il te suffit de submiter la page des qu'il y a un changement lorsque tu change ton premier select.
 
Donc pour reprendre mon exemple, dans la fonction select, tu fais un truc du genre :
 

<script>
function fsubmit ()
{
document.monformulaire.submit();
 
}
</script>


 
et par contre il te faut bien nommer ton formulaire par "monformulaire"
 
 

<form name="monformulaire">
 
//Tu mets tes selects entre les balises form
 
</form>


Message édité par weed le 17-02-2008 à 20:59:02
Reply

Marsh Posté le 17-02-2008 à 21:00:52    

Je suis tout mêlé et ça ne fonctionne pas vraiment.

Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml">
  3. <head>
  4.  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5.  <title>ATS-Liste</title>
  6.  <link href="http://www.ats3r.org/ats.css" rel="stylesheet" media="screen">
  7. </head>
  8. <body>
  9.  <div class="conteneur">
  10.  <div class="header"><p class="top"><a href="http://www.ats3r.org"><img src="../../site/images/accueil.gif" border="0" alt="Accueil"></img></a></p></div>
  11.  <div class="frame">
  12.  <?php
  13.   echo '<br><br><br><br><br><br><br><br>';
  14.   echo '<table align="center" border="15" bgcolor="#AC9F8C" width="40%">';
  15.   echo '<tr>';
  16.   echo '<th colspan="2"><h2>Liste disponible</h2></th>';
  17.   echo '</tr>';
  18.   // Sélection du statut
  19.   echo '<tr>';
  20.   echo '<th width="20%" align="right" height="35" cellpadding="5">Liste</th>';
  21.   echo '<td>';
  22.    $liste=$_POST['liste'];
  23.    require("../../config.inc.php" );
  24.    $requete1="SELECT distinct(type),TB_statut.description FROM `ATS_statut`
  25.         left join TB_statut on ATS_statut.type=TB_statut.code order by TB_statut.description";
  26.    $resultat1=mysql_query($requete1) or die ("Exécution de la requête impossible" );
  27.    echo '<form method="POST" action="">';
  28.    echo '<select name="liste" onchange="this.form.submit();">';
  29.    echo '<option></option>';
  30.     while($val=mysql_fetch_array($resultat1)) {
  31.      $selected="";
  32.      if($liste == $val["type"]) {$selected=" selected=\"selected\"";}
  33.       echo '<option value='.$val["type"].$selected.'>'.$val["description"].'</option>\n';
  34.     }
  35.     echo "</select>\n";
  36.    echo "</form>";
  37.  echo '</td></tr>';
  38.  echo '<form method="GET" action="l_voir.php">';
  39.  if (isset($_POST['liste'])) {
  40.   require("../../config.inc.php" );
  41.   $requete2="SELECT distinct(an) FROM `ATS_statut` WHERE type='$liste' order by an"; 
  42.   $resultat2=mysql_query($requete2) or die ("Exécution de la requête impossible" );
  43.  }
  44.  echo '<th align="right" height="35">Année</th>';
  45.  //Création d'un formulaire contentant une liste de sélection
  46.  echo '<td>';
  47.  echo '<select name="an">';
  48.   while($val=mysql_fetch_array($resultat2)) {
  49.    echo "<option value=>".$val["an"]."</option>\n";
  50.   }
  51.   echo "</select>\n";
  52.  echo '</td></tr>';
  53.  echo '<tr>';
  54.  echo '<th align="right" height="35">Type</th>';
  55.  echo '<td>';
  56.  echo '<select name="type">';
  57.  echo '<option value="liste_tel">Liste téléphonique</option>';
  58.  echo '<option value="Liste_adr">Liste d\'adresse</option>';
  59.  echo '</select>';
  60.  echo '</td>';
  61.  echo '</tr>';
  62.  echo '<tr>';
  63.  echo '<td colspan="2" align="center" height="40">';
  64.     //echo '<input type="hidden" name="liste" value='.$liste.'>';
  65.  //echo '<input type="hidden" name="annee" value='.$an.'>';
  66.  //echo '<input type="hidden" name="type" value='.$type.'>';  
  67.  echo '<input type="submit" value="Visualiser la liste"></td>';
  68.  echo '</tr>';
  69.  echo '</form>';
  70. echo '</table>';
  71. echo '</div>';
  72. echo '<div class="footer"></div>';
  73. echo '</div>';
  74. echo '</tr>';
  75. ?>
  76. </body>
  77. </html


Message édité par fourniey le 17-02-2008 à 21:01:22
Reply

Marsh Posté le 17-02-2008 à 21:17:19    

fourniey, tu n'as pas voulu m'ecouter et en faire qu'a ta tete ^^, je te conseillé de passer par une fonction javascript pour etre sur de la syntaxe et tu t'es planté :)
 
echo '<select name="liste" onchange="this.form.submit();">';
 
à remplacer par :
 
echo '<select name="liste" onChange="javascript:this.form.submit();" >';
 
J'ai trouvé ton erreur en faisant une recherche google sur l'expression : this.form.submit
Regarde le 2ème lien comme exemple :
http://www.google.fr/search?client [...] che+Google
 
essaie cela. Maintenant les valeurs doivent etre envoyé lorsque tu fais un changement de ton premier select ...

Reply

Marsh Posté le 17-02-2008 à 21:22:52    

Ben non, je ne connais pas le javascript. Pour ça, je l'évite.
 
Le select de liste fonctionne très bien.


Message édité par fourniey le 17-02-2008 à 21:24:23
Reply

Marsh Posté le 17-02-2008 à 21:22:52   

Reply

Marsh Posté le 17-02-2008 à 21:40:18    

Au départ, j'ai essayé de le faire AJAX mais je n'y arrivais pas alors, j'ai essayé autre chose.
 
cette ligne n'Est pas exécutée: <select size="1" name="type" OnChange="sendData('id='+this.value,'lire_an.php')" onKeyUp="sendData('id='+this.value,'lire_an.php')">
 
 

Code :
  1. <html xmlns="http://www.w3.org/1999/xhtml">
  2. <head>
  3. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  4. <title>ATS-Liste</title>
  5. <link href="http://www.ats3r.org/ats.css" rel="stylesheet" media="screen">
  6. <script type="text/javascript">
  7.  /** Permet d'envoyer des données en GET ou POST en utilisant les XmlHttpRequest */
  8.  function sendData(param, page)
  9.  {
  10.   if(document.all)
  11.   {
  12.    //Internet Explorer
  13.    var XhrObj = new ActiveXObject("Microsoft.XMLHTTP" ) ;
  14.   }//fin if
  15.   else
  16.   {
  17.       //Mozilla
  18.    var XhrObj = new XMLHttpRequest();
  19.   }//fin else
  20.   //définition de l'endroit d'affichage:
  21.   var content = document.getElementById("contenu" );
  22.   XhrObj.open("POST", page);
  23.   //Ok pour la page cible
  24.   XhrObj.onreadystatechange = function()
  25.   {
  26.    if (XhrObj.readyState == 4 && XhrObj.status == 200)
  27.     content.innerHTML = XhrObj.responseText ;
  28.   }
  29.   XhrObj.setRequestHeader('Content-Type','application/x-www-form-urlencoded');
  30.   XhrObj.send(param);
  31.  }
  32.  //fin fonction SendData
  33. </script>
  34. </head>
  35. <body>
  36. <div class="conteneur">
  37. <div class="header"><p class="top"><a href="http://www.ats3r.org"><img src="../../site/images/accueil.gif" border="0" alt="Accueil"></img></a></p></div>
  38. <?php
  39. echo '<div class="frame">';
  40. echo '<form method="POST" action="ME_liste.php">';
  41. echo '<br><br><br><br><br><br><br><br>';
  42. echo '<table align="center" border="15" bgcolor="#AC9F8C" width="40%">';
  43. echo '<tr>';
  44. echo '<th colspan="2"><h2>Liste disponible</h2></th>';
  45. echo '</tr>';
  46. // Sélection du statut
  47. echo '<tr>';
  48. echo '<th width="20%" align="right" height="35">Liste</th>';
  49. echo '<td>';
  50.  $type=$_POST['type'];
  51.  require("../../config.inc.php" );
  52.  $r_type = "SELECT distinct(type),TB_statut.description FROM `ATS_statut`
  53.       left join TB_statut on ATS_statut.type=TB_statut.code order by TB_statut.description";
  54.  $res = mysql_query($r_type);
  55.  ?>
  56.  <select size="1" name="type" OnChange="sendData('id='+this.value,'lire_an.php')" onKeyUp="sendData('id='+this.value,'lire_an.php')">
  57.  <?php
  58.  while($val=mysql_fetch_array($res)) {
  59.   $selected="";
  60.   if($type == $val["type"]) {$selected=" selected=\"selected\"";}
  61.   echo '<option value='.$val["type"].$selected.'>'.$val["description"].'</option>\n';
  62.  }
  63.  echo '</select>';
  64. echo '</td>';
  65. echo '</tr>';
  66. //include_once('lire_an.php');  
  67. echo '<th align="right" height="35">Type</th>';
  68. echo '</tr>';
  69. echo '<tr>';
  70. echo '<th align="right" height="35">Tri</th>';
  71. echo '</tr>';
  72. echo '<tr>';
  73. echo '<td colspan="2" align="center" height="40"><input type="submit" value="Visualiser la liste"></td>';
  74. echo '</tr>';
  75. echo '</table>';
  76. echo '</form>';
  77. echo '</div>';
  78. echo '<div class="footer"></div>';
  79. echo '</div>';
  80. ?>
  81. </body>
  82. </html


Message édité par fourniey le 17-02-2008 à 21:41:11
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed