la listeB reste vide

la listeB reste vide - PHP - Programmation

Marsh Posté le 04-05-2006 à 11:51:46    

Voila j'ai deux tables: cat_liens qui contient (id , annee) et liens (mois, annee)
 
Je veut choisir une annee dans listeA et que listeB soit remplie en fonction de ce choix. Mais la listeB reste tout le temps vide.
Pourtant j'ai suivi l'exemple php de la page http://www.asp-php.net/tutorial/as [...] php?page=2
 
Pourquoi la listeB reste tout le temps vide?
 
Voila mon code:
 
<body>
  <?php
 
  $dbhost = "localhost";
  $dbuser = "mbz962";
         $dbpass = "dz3011";
         $dbname = "tatex";
 
         $cnx = mysql_connect($dbhost, $dbuser, $dbpass);
         if ($cnx){
  mysql_select_db($dbname);
         }
   
 
$SQL="SELECT * FROM cat_liens";
$result = mysql_query($SQL);
 
?>
<script language="JavaScript"><!--
   listemois=new Array()
   listemois[0]=new Array("vide !","" )
<?
while ($val = mysql_fetch_array($result)) {
   $SQL2 = "select mois from liens where annee =";
   $SQL2 .= $val["annee"];
   $result2 = mysql_query($SQL2);
?>  listemois[<?echo $val["id"];?>]=new Array(<?
   while ($val2 = mysql_fetch_array($result2))
      echo "\"".$val2["mois"]."\",";
   ?>"" )
<? }
?>
   function changeliste() {
      choix=document.monform.listeA.value
      t="<select name='listeB'>"
      for(i=0;i<listemois[choix].length-1;i++)
         t+="<option>"+listemois[choix][i]+"</option>"
      document.monform.listeB.outerHTML=t+"</select>"
   }
--></script>
<form name="monform">
   <select name="listeA" onchange=changeliste()>
      <option value=0>Choisit une liste</option>
<?
mysql_data_seek($result,0); // movefirst
while ($val = mysql_fetch_array($result)) {
?>      <option value=<?echo $val["id"];?>><?
      echo $val["annee"];?></option>
<? }
mysql_close(); ?>
   </select><select name="listeB">
      <option>vide !</option>
   </select><br><br>
   <input type="Submit" value="Envoyer">
</form>
Puis regardez dans la barre d'adresses !
<BR><BR>

Reply

Marsh Posté le 04-05-2006 à 11:51:46   

Reply

Marsh Posté le 04-05-2006 à 12:11:45    

et pourtant dans la fonction changelist() choix prend bien les bonnes valeurs (celle de id) je ne voit pas pkoi mais je pense que c'est la création des tableaux qui ne marchent pas

Reply

Marsh Posté le 04-05-2006 à 12:16:32    

Est-ce que tu peux nous montrer le code html généré plutot que le php? A priori ton erreur semble être dans le js mais avec ton code tout mélangé s'pas facile de s'y retrouver.
Je trouve quand même que c'est de la bouse vraiment pas terrible de mélanger à ce point la php,html&js. Par exemple la c'est quasi illisible:

Code :
  1. <?
  2. while ($val = mysql_fetch_array($result)) {
  3.    $SQL2 = "select mois from liens where annee =";
  4.    $SQL2 .= $val["annee"];
  5.    $result2 = mysql_query($SQL2);
  6. ?>  listemois[<?echo $val["id"];?>]=new Array(<?
  7.    while ($val2 = mysql_fetch_array($result2))
  8.       echo "\"".$val2["mois"]."\",";
  9.    ?>"" )
  10. <? }
  11. ?>


[:mlc]

Message cité 1 fois
Message édité par anapajari le 04-05-2006 à 12:17:15
Reply

Marsh Posté le 04-05-2006 à 12:18:39    

<body>
  <script language="JavaScript"><!--
   listemois=new Array()
   listemois[0]=new Array("vide !","" )
  listemois[1]=new Array("2","3","" )
  listemois[2]=new Array("4","" )
  listemois[3]=new Array("6","" )
   function changeliste() {
      choix=document.monform.listeA.value
      t="<select name='listeB'>"
      for(i=0;i<listemois[choix].length-1;i++)
         t+="<option>"+listemois[choix][i]+"</option>"
      document.monform.listeB.outerHTML=t+"</select>"
   }
--></script>
<form name="monform">
   <select name="listeA" onchange=changeliste()>
      <option value=0>Choisit une liste</option>
      <option value=1>2006</option>
      <option value=2>2005</option>
      <option value=3>2007</option>
 
   </select><select name="listeB">
      <option>vide !</option>
   </select><br><br>
   <input type="Submit" value="Envoyer">
</form>
Puis regardez dans la barre d'adresses !
<BR><BR>

Reply

Marsh Posté le 04-05-2006 à 12:30:17    

c'est ta fonction changelist qui merdouille ;)
use this instead:

Code :
  1. function changeliste() {
  2.       choix=document.monform.listeA.value;
  3.       for(i=0;i<listemois[choix].length-1;i++)
  4.          t="<option>"+listemois[choix][i]+"</option>";
  5.       document.monform.listeB.innerHTML=t;
  6.    }


Après normalement je devrais te donner 5 conseils genre:

  • les scripts vont dans le head
  • fini tes instructions js par des ;

...
mais la j'ai la flemme :o

Reply

Marsh Posté le 04-05-2006 à 12:56:24    

merci çà marche mais ya un petit problème: dans la listeB il ni a que la dernière valeur du tableau correspondant.
Pour 2006 j'ai deux valeurs qui doivent s'afficher (2 et 3) mais ya que le 3 qui s'affichent. Comment résoudre ce pb?

Reply

Marsh Posté le 04-05-2006 à 13:37:58    

j'ai zappé le plus sans faire exprès dans le code que je t'ai donné:

Code :
  1. t+="<option>"+listemois[choix][i]+"</option>";


 
edit: d'ailleurs tu devrais definir t en dehors de ta boucle for:

Code :
  1. var t='';
  2.      for(i=0;i<listemois[choix].length-1;i++)
  3.         t+="<option>"+listemois[choix][i]+"</option>";
  4.      document.monform.listeB.innerHTML=t;



Message édité par anapajari le 04-05-2006 à 13:39:20
Reply

Marsh Posté le 04-05-2006 à 13:40:52    

Oui j'ai vu et j'ai deja essayé mais avec le plus au lieu de mettre
2
3
 
çà me met dans une seule case 23 (çà les concatenes) dc pas bon

Reply

Marsh Posté le 04-05-2006 à 13:45:55    

Reply

Marsh Posté le 04-05-2006 à 13:51:35    

Pourquoi çà ne marche pas alors?
Moi j'utilise firefox et çà me les mets tous a la suite: 23
pourtant avec la boucle for çà devrait faire  
2
3
Meme en déclarans t en dehors çà ne change pas.

Reply

Marsh Posté le 04-05-2006 à 13:51:35   

Reply

Marsh Posté le 04-05-2006 à 14:11:22    

fais voir ton code et arrête de m'envoyer des MP  :fou:  :fou:  :fou:

Reply

Marsh Posté le 04-05-2006 à 14:12:34    

function changeliste() {
           choix=document.monform.listeA.value;
    var t='';
           for(i=0;i<listemois[choix].length-1;i++) {
              t+="<option>"+listemois[choix][i]+"</option>";
    }
           document.monform.listeB.innerHTML=t;
      }

Reply

Marsh Posté le 04-05-2006 à 14:49:13    

personne ne sait pkoi çà donne ceci?

Reply

Marsh Posté le 04-05-2006 à 14:56:38    

De plus, je ne peut pas sélectionnez une valeur dans la deuxième liste déroulante. Comment çà se fait car c'est a peu près la meme que la première et la je peut modifier mon choix.
 
Voila le code en entier:
 
 <html>
 <title>menu2.php</title>
<head>
<script language="JavaScript"><!--
 
 function changeliste() {
           choix=document.monform.listeA.value;
    var t='';
           for(i=0;i<listemois[choix].length-1;i++) {
              t+="<option>"+listemois[choix][i]+"</option>";
    }
           document.monform.listeB.innerHTML=t;
      }  
 
--></script>
 
</head>
 
<body>
  <?php
 
  $dbhost = "199.89.134.247";
  $dbuser = "mbz962";
         $dbpass = "dz3011";
         $dbname = "tatex";
 
         $cnx = mysql_connect($dbhost, $dbuser, $dbpass);
         if ($cnx){
  mysql_select_db($dbname);
         }
   
 
$SQL="SELECT * FROM cat_liens";
$result = mysql_query($SQL);
 
?>
<script language="JavaScript"><!--
   listemois=new Array()
   listemois[0]=new Array("vide !","" )
<?
while ($val = mysql_fetch_array($result)) {
   $SQL2 = "select mois from liens where ans =";
   $SQL2 .= $val["annee"];
   $result2 = mysql_query($SQL2);
?>  
    listemois[<?echo $val["id"];?>]=new Array(
    <?
    while ($val2 = mysql_fetch_array($result2)){
      echo "\"".$val2["mois"]."\",";
    }
    ?>
    "" )
<?  
   }
?>
   
   
 
   
--></script>
<form name="monform">
   <select name="listeA" onchange=changeliste()>
      <option value=0>Choisit une liste</option>
<?
mysql_data_seek($result,0); // movefirst
 
while ($val = mysql_fetch_array($result)) {
?>      
      <option value=<?echo $val["id"];?>>
<?
      echo $val["annee"];?></option>
<?  
}
mysql_close();  
?>
   </select><select name="listeB">
      <option>vide !</option>
   </select><br><br>
   <select name="Typestat">
    <option>Requete1</option>
    <option>Requete2</option>
    <option>Requete3</option>
    <option>Requete4</option>
    <option>Requete5</option>
   </select>
   <input type="Submit" value="Envoyer">
</form>
Puis regardez dans la barre d'adresses !
<BR><BR>
 
</body>
</html>

Reply

Marsh Posté le 04-05-2006 à 15:03:20    

anapajari a écrit :

Est-ce que tu peux nous montrer le code html généré plutot que le php? A priori ton erreur semble être dans le js mais avec ton code tout mélangé s'pas facile de s'y retrouver.


c'est toujours vrai...  :pfff:  si tu ne fais pas d'effort personne ne va en faire!!!  

Reply

Marsh Posté le 04-05-2006 à 15:05:25    

ok desole
 
<html>
 <title>menu2.php</title>
<head>
<script language="JavaScript"><!--
 
 function changeliste() {
           choix=document.monform.listeA.value;
    var t='';
           for(i=0;i<listemois[choix].length-1;i++) {
              t+="<option value=\"listemois[choix][i]\" >"+listemois[choix][i]+"</option>";
    }
           document.monform.listeB.innerHTML=+t;
      }  
 
--></script>
 
</head>
 
<body>
  <script language="JavaScript"><!--
   listemois=new Array()
   listemois[0]=new Array("vide !","" )
 
    listemois[1]=new Array(
    "2","4",    "" )
 
    listemois[2]=new Array(
    "2","4",    "" )
 
    listemois[3]=new Array(
    "6",    "" )
   
   
 
   
--></script>
<form name="monform">
   <select name="listeA" onchange=changeliste()>
 
      <option value=0>Choisit une liste</option>
       
      <option value=1>
2006</option>
       
      <option value=2>
2005</option>
       
      <option value=3>
2007</option>
   </select><select name="listeB">
 
      <option value=0>vide !</option>
   </select><br><br>
   <select name="Typestat">
    <option>Requete1</option>
    <option>Requete2</option>
    <option>Requete3</option>
    <option>Requete4</option>
 
    <option>Requete5</option>
   </select>
   <input type="Submit" value="Envoyer">
</form>
Puis regardez dans la barre d'adresses !
<BR><BR>
 
</body>
</html>

Reply

Marsh Posté le 04-05-2006 à 15:38:44    

personne n'aurait une idee?  
1- pourquoi çà met 23 au lieu de 2
                                                3
dans la listeB
 
2- Pourquoi je ne peut rien selectionner dans la listeB (meme "vide!" ) çà reste toujours a blanc?

Reply

Marsh Posté le 04-05-2006 à 16:52:38    

est ce que çà ne serait pas du a une mauvaise création du tableau du tableau listemois? En fait sur ma page le premier changement de listeA (je prend par exemple 2005) me met dans listeB : --choisit un mois--24. Le deuxième (je prend 2007) me met 6. Ceci n'est pas normal donc l'erreur vient peut etre de là?
 
Code HTML correspondant:
 
<html>
 <title>menu2.php</title>
<head>
<script language="JavaScript"><!--
 
 function changeliste() {
           choix=document.monform.listeA.value;
    var t='';
           for(i=0;i<listemois[choix].length-1;i++) {
              t+="<option value=\"listemois[choix][i]\" >"+listemois[choix][i]+"</option>";
    }
           document.monform.listeB.innerHTML+=t;
      }  
 
--></script>
 
</head>
 
<body>
  <script language="JavaScript"><!--
   listemois=new Array()
   listemois[0]=new Array("Choisit un mois","" )
 
    listemois[1]=new Array(
    "2","4","" )
 
    listemois[2]=new Array(
    "2","4","" )
 
    listemois[3]=new Array(
    "6","" )
   
   
 
   
--></script>
<center><h2> Index des statistiques </h2></center>
 
<form name="monform" action="traitement.php">
   <table align=center>
   <tr>
   <td align=letf>Annee : </td>
   <td align=left><select name="listeA" onchange=changeliste()>
      <option value=0>--Choisit une annee--</option>
       
      <option value=1>
2006</option>
 
       
      <option value=2>
2005</option>
       
      <option value=3>
2007</option>
   </select>
   </td></tr>
    <tr>
   <td></td>
   <td></td>
 
   </tr>
   <tr>
   <td align=letf>Mois : </td>
   <td align=left><select name="listeB">
      <option>--Choisit un mois--</option>
   </select>
 
   </td></tr>
 
    <tr>
   <td></td>
   <td></td>
   </tr>
   <tr>
   <td align=letf>Type de statistique : </td>
   <td align=left><select name="Typestat">
           <option>--Choisit une requete--</option>
 
    <option>Requete1</option>
    <option>Requete2</option>
    <option>Requete3</option>
    <option>Requete4</option>
    <option>Requete5</option>
   </select>
 
   </td></tr>
   <tr>
   <td></td>
   <td></td>
   </tr>
   <tr>
   <td></td>
   <td align=left><input type="Submit" value="Envoyer"></td>
   </table>
 
</form>
<BR><BR>
 
</body>
</html>

Reply

Sujets relatifs:

Leave a Replay

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