contenu dynamique d'un formulaire suivant une BDD

contenu dynamique d'un formulaire suivant une BDD - PHP - Programmation

Marsh Posté le 28-12-2005 à 10:47:58    

Bonjour,  
j'ai un petit soucis avec un formulaire.
en fait, il possède 2 cahmps. LE 1er représente une catégorie et le 2eme, représente le contenu de cette catégorie.
Je voudrai, que le 2eme champ affiche le contenu correspondant à la catégorie. Pour faire simple, ce formulaire sert à supprimer un mot d'une catégorie. Je voudrai que le 2eme champ m'affiche la liste de smots contenu dans la BD suivant la valeur du 1er champ qui est la catégorie. j'ia fait un script qui m'affiche bine le contenu des catégorie dans le 1er champ mais le 2eme champ ne marche pas:
 

Code :
  1. supprimer un mot<br>
  2. <form method="get" action="<?$PHP_SELF?>" name="editMot">
  3.   <table>
  4.    <tr>
  5.     <td>theme: </td>
  6.     <td>
  7.      <select name=\"theme\">
  8.     <?
  9.     //connexion à la base de données
  10.     include_once("../medias/connexion.inc" );
  11.     //requêtes permettant de selectionner les champs de la table score, à savoir le nom de l'utilisateur et le score qui lui est associé
  12.     $sql = "SELECT DISTINCT theme FROM mot"; 
  13.     $result = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
  14.     //permet de boucler l'action echo tant qu'une ligne de tableau existe, fetch arry récupère les données sous forme d'un tableau d'une ligne et deux colonnes
  15.     while ($ligne = mysql_fetch_array($result)) {
  16.      $theme = $ligne['0'];
  17.      echo "
  18.       <option value=$theme>$theme</option>";
  19.     }
  20.     //deconnexion
  21.     /*include_once("../medias/deconnexion.inc" );
  22.     echo "<script langage='javascript'>\n";
  23.     echo "setTimeout(\"location = 'formSupprMot.php'\",1000);";//on recharge la page au bout d'1 seconde
  24.     echo "</script>";*/
  25.     ?>
  26.      </select>
  27.     </td>
  28.     <td>mot à supprimer: </td>
  29.     <td>
  30.      <select name=\"nom\">
  31.     <?
  32.     //connexion à la base de données
  33.     include_once("../medias/connexion.inc" );
  34.     //requêtes permettant de selectionner les champs de la table score, à savoir le nom de l'utilisateur et le score qui lui est associé
  35.     $sql = "SELECT nom FROM mot WHERE theme=\"$theme\""; 
  36.     $result = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
  37.     //permet de boucler l'action echo tant qu'une ligne de tableau existe, fetch arry récupère les données sous forme d'un tableau d'une ligne et deux colonnes
  38.     while ($ligne = mysql_fetch_array($result)) {
  39.      $nom = $ligne['0'];
  40.      echo "
  41.       <option value=$nom>$nom</option>";
  42.     }
  43.     //deconnexion
  44.     include_once("../medias/deconnexion.inc" );
  45.     ?>
  46.      </select>
  47.     </td>
  48.     <td><input type="submit" name="valider" value="Valider"></td>
  49.    </tr>
  50.   </table>
  51.  </form>


pour l'instant, le script qui va supprimer le mot n'est pas encore fait. Je cherche just epour l'instant à afficher les mots correspondant à la catégorie choisi dans le 1er champ.
MERci de votre aide


Message édité par ephagor le 28-12-2005 à 10:48:28
Reply

Marsh Posté le 28-12-2005 à 10:47:58   

Reply

Marsh Posté le 28-12-2005 à 10:55:08    

auto-réponse: j'ia trouv" une premiere erreur.
elle se trouvait dans le nom de mes champs.

Code :
  1. <select name="nom">


Code :
  1. <select name="theme">


 
le 2eme champ indique maintenant le contenu mais il ne s'agit pas du bon. Dans ma BD j'ai 2 catégories ('informatique' et 'internet'). le 1er m'affiche bien ces 2 catégories. dans le 2eme champ j'ai bien tous le smots correspondant mais uniquement pour la catégorie 'internet'. Lorsque je choisi la catégorie, 'informatique', il ne m'affiche pas la liste correspondante.

Reply

Marsh Posté le 28-12-2005 à 23:18:40    

Bonjour,
 
Si j'ai bien compris la logique de ton script, tu recharges la page toutes les secondes pour mettre à jour le deuxième champ?
Si c'est bien ça, il faut éviter cette méthode : quitte à utiliser du javascript, il vaut mieux programmer un évènement onChange dans le premier select.
 
Et pour le problème de mauvaise catégorie, c'est parce que dans ta requête de sélection des mots, tu utilises le contenu de la variable $theme. Or à la ligne 18, on voit que comment est affectée cette variable. Et comme il n'y a pas de changement après, $theme garde la dernière valeur qu'on lui a donné, dans ce cas c'est "internet".

Reply

Marsh Posté le 29-12-2005 à 10:37:13    

Xtina a raison: recharger la page toutes les secondes, c'est très sale. Il vaut mieux utiliser l'évenement OnChange.
 
Pour la deuxième requête, utilise plutôt "document.editMot.theme.value" que $theme.

Reply

Marsh Posté le 29-12-2005 à 16:56:49    

ok merci je vais tester tout ça. le rechargement d epage était just eune solution temporaire pour voir déjà si le contenu de mon 2e champ évolue en fonction du 1er mais je ne conaissais pas le onchange donc je vais tester cette fonction.
merci
 
EDIt: j'ai compris le pb de $theme. en fait , il ne vaut que 'internet', puisque c'est la seule variable ou on affecte les vlaeur de theme. donc $theme='informatique', n'existe plus. Il fuat que je trouve un moyen pour affecter à $theme, toutes les valeurs sans les perdre. Mais dans ce cas, comment réaffecter une valeur à $theme en fonction du choix ?, c'est à dire, comment je peux changer la valeur de $theme, lorsque je choisi mon theme ?


Message édité par ephagor le 29-12-2005 à 17:07:30
Reply

Marsh Posté le 29-12-2005 à 17:27:08    

don j'ai fait quelques modifications concernant la valeur de $theme.

Code :
  1. <select name="theme">
  2.     <?
  3.     //connexion à la base de données
  4.     include_once("../medias/connexion.inc" );
  5.     //requêtes permettant de selectionner les champs de la table score, à savoir le nom de l'utilisateur et le score qui lui est associé
  6.     $sql = "SELECT DISTINCT theme FROM mot"; 
  7.     $result = mysql_query($sql) or die('Erreur SQL !'.$sql.'<br>'.mysql_error());
  8.     $theme=array();
  9.     $i=0;
  10.     //permet de boucler l'action echo tant qu'une ligne de tableau existe, fetch arry récupère les données sous forme d'un tableau d'une ligne et deux colonnes
  11.     while ($ligne = mysql_fetch_array($result)) {
  12.      $theme[$i] = $ligne['0'];
  13.      echo "
  14.       <option value=$theme|$i]>$theme[$i]</option>";
  15.      $i++;
  16.     }
  17.     //deconnexion
  18.     include_once("../medias/deconnexion.inc" );*/
  19.     ?>
  20.      </select>


ainsi $theme devient un tableau dont chaque indice prend les valeurs des différents themes. c'est à partir d elà que je peux faire intervenir le onchange je pense mais je sais pas vraiment comment faire. en fait, à chaque changement de la valeur du 1er champs, je veux la stocker dans une nouvelle variable (appelons-là $tmp). Ainsi, mon 2eme champ afficherai tous le smots correspondant à la valeur de cette variable $tmp.

Reply

Marsh Posté le 29-12-2005 à 21:08:19    

Ton premier select, change-le comme ceci:
 

Citation :

<select name="theme" onChange="javascript:this.form.submit()" >


 
Ensuite pour ta deuxième requête, affecte ta variable $theme comme ceci:
 

Citation :

if(isset($_GET["theme"])) $theme=$_GET["theme"];


 
En faisant cela, à chaque fois que tu sélectionnes un nouveau thème dans ta liste, la page se rechargera en envoyant ton formulaire (via un GET comme tu as défini) et la variable $theme de la seconde requete devrait correspondre au champs selectionné. Donc, inutile de créer un array $theme[]. Par rapport à ton premier code, il n'y a pas grand chose à changer.


Message édité par remi-san le 29-12-2005 à 21:09:32
Reply

Marsh Posté le 30-12-2005 à 00:38:27    

ok merci beaucoup.
j'essaye ça demain et je vous tient au courant.

Reply

Sujets relatifs:

Leave a Replay

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