[résolu][PHP/JS] Formulaire avec input name="nom[]"

" [résolu][PHP/JS] Formulaire avec input name="nom[] - HTML/CSS - Programmation

Marsh Posté le 24-05-2005 à 16:57:09    

Bonjour à tous,
 
Je fatigue sur ce problème de d'input avec des noms très proches!
 
Je récupère un nombre en $_POST pour créer autant de lignes dans un tableau avec des

Code :
  1. <input type=text name='nom[<? echo $numero ?>]' id='nom<? echo $numero ?>'>


 
Le fait d'avoir des nom[0], nom[1], nom[2]... est très pratique pour le traitement du submit suivant. Par contre je n'arrive pas à vérifier que ces champs ont été remplis (avant le submit tant qu'à faire). Voici la fonction appelée par le onsubmit=check_form(this, <? echo $nombre_de_ligne ?> ).

Code :
  1. function check_form(form, nb)
  2. {
  3. var retour = false;
  4.   if (form.valider.value == "terminer" )
  5.   {
  6. for (x=0; x<nb; x++) {
  7.  if (document.getElementById('nom'+x).value == "" )
  8.  // aussi essayé au début avec if (form.nom[x].value == "" )
  9.  {
  10.   alert("un champ est vide" );
  11.  }
  12.  // else retour = true;
  13. }
  14. return retour;
  15.   }
  16. }


 
Merci pour votre aide


Message édité par bigben74 le 25-05-2005 à 15:41:12
Reply

Marsh Posté le 24-05-2005 à 16:57:09   

Reply

Marsh Posté le 24-05-2005 à 17:06:38    

edit : j'enleve ma connerie


Message édité par gatsusat le 24-05-2005 à 17:33:00
Reply

Marsh Posté le 24-05-2005 à 17:09:21    

Petite précision: alert("un champ est vide" ) ne s'affiche jamais...  :pfff:  
 
En fait là c bourrin, évidement un seul message si un des champs est vide ça suffit, mais c'est justement pour tester (que ça marche pas).

Reply

Marsh Posté le 24-05-2005 à 17:34:26    

ton erreur vient d'ici :  
 

Code :
  1. <input type=text name='nom[<? echo $numero ?>]' id='nom<? echo $numero ?>'>


 
c'est pas des simple quotes ', mais des doubles quotes " que l'on utilise pour les attribut
 

Code :
  1. <input type="text" name="nom[<? echo $numero ?>]" id="nom<? echo $numero ?>">


 
l'erreur était toute conne et je me suis fais avoir comme un bleu


Message édité par gatsusat le 24-05-2005 à 17:35:07
Reply

Marsh Posté le 24-05-2005 à 19:09:11    

gatsusat a écrit :

ton erreur vient d'ici :  
 

Code :
  1. <input type=text name='nom[<? echo $numero ?>]' id='nom<? echo $numero ?>'>


 
c'est pas des simple quotes ', mais des doubles quotes " que l'on utilise pour les attribut
 

Code :
  1. <input type="text" name="nom[<? echo $numero ?>]" id="nom<? echo $numero ?>">


 
l'erreur était toute conne et je me suis fais avoir comme un bleu


Erreur :o

Citation :

By default, SGML requires that all attribute values be delimited using either double quotation marks (ASCII decimal 34) or single quotation marks (ASCII decimal 39).


;)

Reply

Marsh Posté le 24-05-2005 à 19:10:31    

bigben74 a écrit :

Bonjour à tous,
 
Je fatigue sur ce problème de d'input avec des noms très proches!
[...]
[/cpp]
 
Merci pour votre aide


C'est quoi cette ligne :

if (form.valider.value == "terminer" )(


Vire-ça tout de suite, et utilise des fonctions DOM :D

Reply

Marsh Posté le 24-05-2005 à 19:21:29    

erf oué j'ai oublié de lui poster l'autre partie du script corrigée elle aussi :=)

Reply

Marsh Posté le 25-05-2005 à 09:08:30    

if (form.valider.value == "terminer" )
c'est parce que je poste plusieurs fois mon formulaire et à la fin seulement le nom du bouton submit est "terminer". ça par contre c'est sûr que ça marche nikel ;-)
 
sorry de faire le noob, mais c'est qoi les fonctions DOM?

Reply

Marsh Posté le 25-05-2005 à 09:10:31    

Des trucs genre getElementById. Parce que les document.monFormulaire.monChamp, c'est très bof et très vieux :D

Reply

Marsh Posté le 25-05-2005 à 10:12:01    

J'ai cherché je vois pas vraiment en quoi se différencient les fonctions DOM du JS de base, dans les exemples que j'ai trouvé on a toujours en début de fonction
MaVariable = document.form....;
 
Enfin tant pi j'ai fais un test en page statique:

Code :
  1. <html>
  2. <head>
  3. <script>
  4. function check_form(form, nb)
  5. {
  6. var retour = false;
  7. var nb_vides = 0;
  8.   if (form.valider.value == "terminer" )
  9.   {
  10.     for (x=0; x<nb; x++) { 
  11.         if (document.getElementById('nom'+x).value.length < 2)
  12.         {
  13.          nb_vides++; 
  14.         }
  15.     }
  16. if (nb_vides == 0)
  17.  retour = true;
  18. if (nb_vides == 1)
  19.  alert("1 champ est vide" );
  20. if (nb_vides > 1)
  21.  alert (nb_vides + " champs sont vides" );
  22.     return retour;
  23.   }
  24. }
  25. </script>
  26. </head>
  27. <body>
  28. <form method="get" onSubmit="return check_form(this,4)">
  29. <input type=text name="nom[0]" id="nom0"><br>
  30. <input type=text name="nom[1]" id="nom1"><br>
  31. <input type=text name="nom[2]" id="nom2"><br>
  32. <input type=text name="nom[3]" id="nom3"><br>
  33. <input type="submit" value="terminer" name="valider">
  34. </form>
  35. </body>
  36. </html>


 
Et bien ça, ça marche nikel... (avec " ou ', c'est la même chose)
 
Pourquoi ça ne marcherait pas quand je créé mes input via une boucle php for ???

Reply

Marsh Posté le 25-05-2005 à 10:12:01   

Reply

Marsh Posté le 25-05-2005 à 10:15:06    

bigben74 a écrit :

J'ai cherché je vois pas vraiment en quoi se différencient les fonctions DOM du JS de base, dans les exemples que j'ai trouvé on a toujours en début de fonction
MaVariable = document.form....;


Les truc genre document.monFormulaire n'ont pas un support garantit. Ca se peut très bien qu'un navigateur ne l'implémente pas. Pour accéder aux champs, il faut systématiquement utiliser getElementById.
 

Reply

Marsh Posté le 25-05-2005 à 10:16:50    

Aussi, un document.monFormulaire oblige à utiliser l'attribut name sur le form, mais la recommandation nous dit ça :

Citation :

name = cdata [CI]
    This attribute names the element so that it may be referred to from style sheets or scripts. Note. This attribute has been included for backwards compatibility. Applications should use the id attribute to identify elements.


Donc c'est là juste pour être compatible, et on est encouragé à être plus moderne et à utiliser un id :)

Reply

Marsh Posté le 25-05-2005 à 11:17:58    

bigben74 a écrit :

J'ai cherché je vois pas vraiment en quoi se différencient les fonctions DOM du JS de base, dans les exemples que j'ai trouvé on a toujours en début de fonction
MaVariable = document.form....;
 
Enfin tant pi j'ai fais un test en page statique:

Code :
  1. <html>
  2. <head>
  3. <script>
  4. function check_form(form, nb)
  5. {
  6. var retour = false;
  7. var nb_vides = 0;
  8.   if (form.valider.value == "terminer" )
  9.   {
  10.     for (x=0; x<nb; x++) { 
  11.         if (document.getElementById('nom'+x).value.length < 2)
  12.         {
  13.          nb_vides++; 
  14.         }
  15.     }
  16. if (nb_vides == 0)
  17.  retour = true;
  18. if (nb_vides == 1)
  19.  alert("1 champ est vide" );
  20. if (nb_vides > 1)
  21.  alert (nb_vides + " champs sont vides" );
  22.     return retour;
  23.   }
  24. }
  25. </script>
  26. </head>
  27. <body>
  28. <form method="get" onSubmit="return check_form(this,4)">
  29. <input type=text name="nom[0]" id="nom0"><br>
  30. <input type=text name="nom[1]" id="nom1"><br>
  31. <input type=text name="nom[2]" id="nom2"><br>
  32. <input type=text name="nom[3]" id="nom3"><br>
  33. <input type="submit" value="terminer" name="valider">
  34. </form>
  35. </body>
  36. </html>


 
Et bien ça, ça marche nikel... (avec " ou ', c'est la même chose)
 
Pourquoi ça ne marcherait pas quand je créé mes input via une boucle php for ???


C'est normal que ton form n'ai pas de propriete action ?`
SI ton formulaire est traite par php, alors tu peux utiliser tout betement name="nom[]", pas besoin d'y indiquer les numeros.  
N'oublie pas metre des " pour l'atribut type.

Reply

Marsh Posté le 25-05-2005 à 11:32:09    

pas de panique, ça c'était pour les tests, évidement qu'il y a une propriété action...
pour les numéros de nom[], si on les mets pas ça marche, mais je me suis aperçu par exemple que si tu faisais pareil avec des checkbox

Code :
  1. <input type=text name="nom[]" id="nom0"><input type=checkbox name="box[]">
  2. <input type=text name="nom[]" id="nom1"><input type=checkbox name="box[]">
  3. <input type=text name="nom[]" id="nom2"><input type=checkbox name="box[]">

c'est mort, tu sais pas lesquelles ont été cochées, enfin c'est peut-être juste dans mon cas... Mais résultat vu que j'ai le numéro de la ligne sous la main, je le met et comme ça je suis tranquille.

Reply

Sujets relatifs:

Leave a Replay

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