[js] Insertion dans une bdd du choix dans une liste

Insertion dans une bdd du choix dans une liste [js] - HTML/CSS - Programmation

Marsh Posté le 19-04-2004 à 11:21:35    

Bonjour tout le monde
voila mon petit probleme:
Je voudrais insérer dans une bdd chaque valeur que l'utilisateur aura choisi dans une liste. donc j'utilise un petit 'onchange' et la je balance ma fonction qui utilise du php pour inserer la valeur choisie dans ma bdd. Mais je ne sais pas pkoi (suis pas une star en js :) ) mais ma fonction n'est jamais appelée, j'ai testé en lui demandant de lancer un 'alert' dans ma fonction, et cet 'alert' ne s'ouvre jamais.
Voila mon code :  

Code :
  1. // la fonction que je lance
  2. function EntrerDansTable()
  3. {
  4. code_It = document.frmDemo1.zlItem.selectedIndex;
  5. numcom=document.saisie.numcom.value;
  6. alert ("script lance" );
  7. <?
  8. $sql= "insert into com2cat (numcom, numsscat) values ('".$numcom."' , '".$code_It."' )";
  9. if ( ! $resultat=mysql_query($sql))
  10. echo "ERREUR dans la table sscat : ".mysql_error($resultat);
  11. ?>
  12. }
  13. //et la partie de mon formulaire en php ou la fonction devrait etre lancée
  14. echo "&nbsp;<B>Sous catégories</B>&nbsp;";
  15. echo "&nbsp;<SELECT NAME='zlItem' onChange='EntrerDansTable()'>\n";
  16. for ($cpt = 0; $cpt < $max_lignes; $cpt++)
  17.   echo "<OPTION>".ereg_replace(".", "--", $option_max)."</OPTION>\n";
  18. echo "</SELECT>&nbsp;\n";
  19. if (!isset($zlItem)) $zlItem = -1;
  20. echo "<SCRIPT LANGUAGE='JavaScript'>\n;ModifierListe(".$zlItem." );\n</SCRIPT>\n";


 
Donc si vous voyez d'ou viens mon erreur...
En tout cas, merci de m'avoir lu ;)


Message édité par force_jaune le 19-04-2004 à 11:39:00
Reply

Marsh Posté le 19-04-2004 à 11:21:35   

Reply

Marsh Posté le 19-04-2004 à 11:28:57    

Salut,
 
C'est une idée ou il y a du php dans ta fonction js ???
 
Pierre

Reply

Marsh Posté le 19-04-2004 à 11:34:24    

essaie l'event onclick pour voir

Reply

Marsh Posté le 19-04-2004 à 11:34:36    

heu non, c'est pas une idée, mais à priori ça doit passer, non??? j'ai déjà vu dans des scripts sur le net des fonctions js avec du php dedans, en plus je suis obligé, vu que je dois mettre a jour ma bdd

Reply

Marsh Posté le 19-04-2004 à 11:35:11    

ok jagstang, je vais voir le onclick a la place

Reply

Marsh Posté le 19-04-2004 à 11:36:59    

avec le onclick, ca fais tj pareil, ma fonction se lance pas :( , merci qd meme ;)

Reply

Marsh Posté le 19-04-2004 à 11:38:49    

donne un bout de code généré stp

Reply

Marsh Posté le 19-04-2004 à 11:41:04    

excuse moi, je vois pas ce que tu veux dire par 'bout de code généré', si tu veux les erreurs affichées, en fait je n'ai aucune erreur

Reply

Marsh Posté le 19-04-2004 à 11:43:01    

non, le source html généré par ton code PHP...

Reply

Marsh Posté le 19-04-2004 à 11:43:08    

force_jaune a écrit :

Bonjour tout le monde
voila mon petit probleme:
Je voudrais insérer dans une bdd chaque valeur que l'utilisateur aura choisi dans une liste. donc j'utilise un petit 'onchange' et la je balance ma fonction qui utilise du php pour inserer la valeur choisie dans ma bdd. Mais je ne sais pas pkoi (suis pas une star en js :) ) mais ma fonction n'est jamais appelée, j'ai testé en lui demandant de lancer un 'alert' dans ma fonction, et cet 'alert' ne s'ouvre jamais.
Voila mon code :  

Code :
  1. // la fonction que je lance
  2. function EntrerDansTable()
  3. {
  4. code_It = document.frmDemo1.zlItem.selectedIndex;
  5. numcom=document.saisie.numcom.value;
  6. <?
  7. $sql= "insert into com2cat (numcom, numsscat) values ('".$numcom."' , '".$code_It."' )";
  8. if ( ! $resultat=mysql_query($sql))
  9. echo "ERREUR dans la table sscat : ".mysql_error($resultat);
  10. ?>
  11. }
  12. //et la partie de mon formulaire ou la fonction devrait etre lancée
  13. echo "&nbsp;<B>Sous catégories</B>&nbsp;";
  14. echo "&nbsp;<SELECT NAME='zlItem' onChange='EntrerDansTable()'>\n";
  15. for ($cpt = 0; $cpt < $max_lignes; $cpt++)
  16.   echo "<OPTION>".ereg_replace(".", "--", $option_max)."</OPTION>\n";
  17. echo "</SELECT>&nbsp;\n";
  18. if (!isset($zlItem)) $zlItem = -1;
  19. echo "<SCRIPT LANGUAGE='JavaScript'>\n;ModifierListe(".$zlItem." );\n</SCRIPT>\n";


 
Donc si vous voyez d'ou viens mon erreur...
En tout cas, merci de m'avoir lu ;)


decidement, on en revient tj au meme point : le JS = langage cote client, le php, cote serveur. Tu dois faire 1 formulaire qui appele une page php pour faire les insert, tu ne peux pas le faire cote client.
ton code est bon, mais il faut lancer 1 nouvelle page asp avec un document.saisie.submit() à la place de ton code php et mettre ton code php dans le script 'action' de ton formulaire (apres avoir recupere les valeurs postees) d'ailleurs, remplace ton echo php par un alert et tu verra que ta fonction est bien appelee sur le onChange, mettre 1 onClick ne changera strictement rien.


Message édité par fred777888999 le 19-04-2004 à 11:44:50
Reply

Marsh Posté le 19-04-2004 à 11:43:08   

Reply

Marsh Posté le 19-04-2004 à 12:04:56    

Jagstang>> heu, en fait le html généré par mon php, est assez enorme, vu que j'ai une trentaine de catégories et une dizaien de sous categories par categorie, donc en gros j'ai 1400 lignes.Et par contre bizarrement, je ne trouve pas le code de ma fonction 'EntrerDansLaTable' dans le source alors que j'ai une autre fonction js 'ModifierListe'qui s'affiche.  
 
fred777888999>> En fait j'ai eu beaucoup de mal à décider de la structure de mon code, sachant que j'ai un gros formulaire qui fait appel régulièrement à ma bdd. C'est un formulaire qui permet de rentrer des nouveaux clients et leurs options ds une bdd. Il y a beaucoup d'informations à entrer et plusieurs tables qui sont modifiées à chaque fois. Mon commanditaire préfère avoir tout le formulaire sur la même page. Donc si je peux le faire, c'est mieux comme ça. En plus, j'ai du javascript qui me produit des tableaux, et je ne sais pas comment faire passer ces tableaux entre plusieurs pages. Donc j'ai décidé de faire une structure comme suit :  

Code :
  1. <html>
  2. <head>
  3. </head>
  4. <body>
  5. <?php
  6. $echec="";
  7. if ($validation)
  8. {
  9. // tests de saisie et eventuellement, remplissage de 'echec'
  10. }
  11. if($echec=="" ) {
  12. //code a executer sur les saisies si pas d'erreur de saisies
  13. }
  14. if(!$validation || $echec != "" ) { ?>
  15. <!-- formulaire -->
  16. <?php
  17. }
  18. ?>
  19. </body>
  20. </html>


Dans mon formulaire je dois faire appel souvent  à du php, pour générer des listes notamment.  
Et je pense que avec ma structure, ça peut marcher, vu que ma génération de listes dynamiques (affichage d'une liste de sous categories en fonction de la categorie selectionnée dans une premiere liste (PHP + JS)) fonctionne tres bien, donc je ne vois pas pourquoi ca ne marcherai pas... Mais bon si vraiment tu penses que ce n'est pas possible, je découperai le formulaire en plusieurs pages.  
 
J'ai rajouté dans le code de mon premier message le 'alert' qui ne s'affiche toujours pas.
 

Reply

Marsh Posté le 19-04-2004 à 12:11:09    

Ce qui nous dérange c'est que tu as mis du code php ( executé coté serveur) à l'interieur de ton code javascript ( executé coté client).
 
Donc ce qui se produit sur ta page, c'est que le parseur php, parse la page, execute le code php, et ensuite envoie le tout au client.
 
Donc, tes requetes de modification présentes dans la focntion EntrerDansBase ne sont pas là, donc ta fonction ne fait rien.
 
Pour que cela marche, il faut que lors de l'appel de la fonction, tu appel une page sur ton serveur pour faire les modifications.

Reply

Marsh Posté le 19-04-2004 à 12:12:43    

Tu dis que la focntion entrerdanslatable n'est pas présente dans la source de la page, ce qui tendrait à dire que tu as un autre souci, car la fonction n'existe pas....

Reply

Marsh Posté le 19-04-2004 à 12:17:08    

ok, je viens de capter :) dsl, c dur les debuts de semaine :), je vais essayer de voir comment je pourrai faire, merci de m'avoir désembué le cerveau :D
 
En fait, apres une petite reflexion, y a tj un truc que je capte pas, j'ai fait exactement pareil pour afficher ma seconde liste en fonctions du choix de ma première liste, et ca marche tres bien, voici le code :

Code :
  1. $sql = "SELECT numero, intitule FROM catgencom ORDER BY intitule";
  2. $resultat = mysql_query($sql);
  3. echo "<FORM METHOD=POST NAME='frmDemo1'>";
  4. echo "<BR>&nbsp;<B>Catégorie</B>&nbsp;";
  5. echo "&nbsp;<SELECT NAME='zlRubrique' onChange='MettreAJourListe(-1)'>\n";
  6. while ($enr = mysql_fetch_array($resultat)) {
  7.   echo "<OPTION VALUE='".$enr[0]."'";
  8.   if ($zlRubrique == $enr[0]) echo " SELECTED";
  9.   echo ">".htmlspecialchars($enr[1])."</OPTION>\n";
  10. }
  11. echo "</SELECT>&nbsp;\n";


Dans ce code, la fonction MettreAJourListe est bien appelée à chaque clic de l'utilisateur.
Donc en fait je comprends bien pourquoi ca marche pas ma seconde liste, mais je comprends plus pourquoi mon affichage de seconde liste marche :D


Message édité par force_jaune le 19-04-2004 à 12:18:36
Reply

Marsh Posté le 19-04-2004 à 12:19:27    

Y aurait-il moyen de voir le code la fonction MettreAJourListe ?

Reply

Marsh Posté le 19-04-2004 à 12:23:36    

Bien sur :)  

Code :
  1. function MettreAJourListe(code_item) {
  2.  
  3.   lg = document.frmDemo1.zlItem.length;
  4.  
  5.   // On vide la liste
  6.   for (i = lg - 1; i >= 0; i--) {
  7.     document.frmDemo1.zlItem.options[i] = null;
  8.   }
  9.    
  10.   code_rub = document.frmDemo1.zlRubrique.selectedIndex;
  11. <?php
  12. // Génération des Items par Rubriques
  13. $sql = "SELECT numero FROM catgencom ORDER BY numero";
  14. $resultat = mysql_query($sql);
  15. $max_lignes = 0;
  16. $option_max = '';
  17. while ($enr = mysql_fetch_array($resultat)) {
  18.  
  19.   $sql  = "SELECT numero,intitule ";
  20.   $sql .= "FROM sscatcom ";
  21.   $sql .= "WHERE categorie='".$enr[0]."'";
  22.   $sql .= "ORDER BY intitule";
  23.   $resultat2 = mysql_query($sql);
  24.   echo "  if (document.frmDemo1.zlRubrique.options[code_rub].value == ".$enr[0]." ) {\n";
  25.   echo "    document.frmDemo1.zlItem.length = ".(mysql_num_rows($resultat2)).";\n";
  26.   $cpt = 0;
  27.   while ($enr2 = mysql_fetch_array($resultat2)) {
  28.     echo "    document.frmDemo1.zlItem.options[".$cpt."].value = ".$enr2[0].";\n";
  29.     echo "    document.frmDemo1.zlItem.options[".$cpt."].text  = \"".$enr2[1]."\";\n";
  30.     echo "    if (code_item == ".$enr2[0]." ) document.frmDemo1.zlItem.options[".$cpt."].selected = true;\n";
  31.     $cpt++;
  32.     if ($cpt > $max_lignes) $max_lignes = $cpt;
  33.     if (strlen($enr2[1]) > strlen($option_max)) $option_max = $enr2[1];
  34.   }
  35.   echo "  }\n";
  36. }
  37. ?>
  38.      
  39. }


en fait je viens de voir que cette fonction est la meme que modifierListe, ds mon premier post, c'est juste que j'ai changé le nom entre temps
sinon, je suis bien conscient que mon code est crade et que je melange sans arret php et js, mais bon je debute, je voyais aps trop comment faire autrement


Message édité par force_jaune le 19-04-2004 à 12:25:43
Reply

Marsh Posté le 19-04-2004 à 12:31:39    

D'après le code que je semble entreapercevoir au travers de ces lignes, il semblerait que tu gènére tous les cas possibles , pour ensuite les tester grâce à la fonction JS.
 
Je ne serait pas étonné que le poids de la page soit énorme.
 
A mon avis, il y a moyen de faire bien plus simple. Il faudra bien sur faire des rechargmenets de pages, ou alors coder les données en JS via des tableaux ce qui permettra de ne faire qu'une seule petite fonction de test.

Reply

Marsh Posté le 19-04-2004 à 14:22:00    

oui, c'est ça, je génère tous les cas possibles (que je retrouve dans le source de la page). C'est vrai que la page fait a peu pres 85ko sans les images :D C'est fait pour marcher en localhost principalement, donc ce n'est pas un réel probleme en soi, mais c'est clair qu'il doit y avoir moyen d'optimiser tout ça.
 
Mais je comprends par contre toujours pas pourquoi le code de ma fonction MettreAJourListe est executé à chaque clic de l'utilisateur, alors que le 'alert' de ma fonction EntrerDansTable ne peut pas être executé à chaque clic.

Reply

Marsh Posté le 19-04-2004 à 16:03:19    

Bon en fait, c'est important que je fasse ce formulaire sur une seule page, donc je continue dans ma voie (qui a dit têtu?? :D ).
Et en fait ça a l'air de bien marcher, j'ai juste quelques petits problèmes de syntaxes en js, vu que je débute, mais mes fonctions js s'executent correctement lorsque l'utilisateur clique sur mes listes.
J'ai seulement un problème de passage de variables entre mon js et mon php, mais en cherchant un peu je devrai trouver

Reply

Marsh Posté le 19-04-2004 à 16:09:37    

passer des valeurs
 
PHP --> JS (pas de problème)
JS --> PHP (pas possible sans recharger la page (GET ou POST))
 
Tétu oui, mais pas trop tout de même...

Reply

Marsh Posté le 19-04-2004 à 16:35:23    

et c'est meme pas possible en ajoutant un petit formulaire avec des champs "hidden" dans ma fonction js??? histoire de recuperer avec un post ensuite sans recharger la page.
Parce que franchement mon formulaire fais 700 lignes et g pas trop envie maintenant de changer de stratégie et tout recommencer en plusieurs pages :(

Reply

Marsh Posté le 19-04-2004 à 17:19:49    

c'est de la bidouille mais c'est faisable. Bon courage

Reply

Marsh Posté le 19-04-2004 à 17:51:59    

ok merci, ca me donne un peu de courage si tu me dis que c'est faisable, je continue...

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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