Controle saisie input text

Signaler
Messages postés
17
Date d'inscription
jeudi 21 février 2008
Statut
Membre
Dernière intervention
30 avril 2009
-
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
-
Bonjour,

Je n'arrive pas à faire marcher mon contrôle de saisie sur un input text.

Mon formulaire affiche la liste des commandes à valider à partir d'une requête en base, donc autant d'input type"text" que de commandes à valider
j'ai extrait de mon script juste ce qui me pose problème pour ne pas alourdir le post :

Mon contrôle de saisie :

<script language="JavaScript" type="text/javascript">
function Verif_order_valide(){
for(i=0;i<document.forms[0].confirm_order.length;i++)
   {
   if (document.forms[0].confirm_order[i].value!="")
       {
        return true;
       }
   }
   alert ("Indiquez un N° de commande");
   return false;
}


</script>

L'input dans le formulaire :
<form method="POST" action="traitement_manager_order.php" onSubmit="return Verif_order_valide()">
<?php
while( $data=mysql_fetch_array($req) ){
echo '';
}
?>

</form>

Ce que j'ai compris c'est que "confirm_order.length" ne me permet pas de tester l'input vu que je génère un numéro pour chacun des input.
Par contre je ne trouve pas comment faire.

9 réponses

Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
11
Bonjour,

les noms générés doivent être  confirm_order['1'], confirm_order['2'],... confirm_order['n']
ou tu testes confirm_order, donc : inconnu
met le même name, et comme je suppose que ça va retourner au php, met des []
fais : ...echo '';...
met un name au formulaire, ça évite d'obliger à ce que ce soit le 1er

<form method="POST"
         name="frm"
         action="traitement_manager_order.php"
         onSubmit="return Verif_order_valide()">
dans le script :
<script type="text/javascript">
function Verif_order_valide(){
for( i=0; i<document.frm["confirm_order[]"].length; i++ )
   {   if (document.frm["confirm_order[]"][i].value!="")
       {   return true;  }
   }
   alert ("Indiquez un N° de commande");
   return false;
}

là il suffit que l'un des champs soit renseigné, on est bien d'accord...

je ne vois pas pourquoi générer n champs de saisie, sans value,
et n'en faire remplir qu'1.... avec quoi?

si c'est un choix à faire, il vadrait mieux mettre un select ?
ou des radio associé aux input text en readonly,
ou...
mais je n'ai peut-être pas percuté.....

Cordialement [mon Site] [M'écrire] Bul
Messages postés
17
Date d'inscription
jeudi 21 février 2008
Statut
Membre
Dernière intervention
30 avril 2009

Merci pour les conseils; je vais tester dès que possible.
Quelques précisions sur mon script :
Mon formulaire affiche la liste des commandes à valider à partir d'une requête en base, donc autant d'input type"text" que de commandes à valider. C'est pourquoi j'ai n champs de saisie dans lesquelles j'attendes un N° de commande à compléter.
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
11
>>j'ai n champs de saisie dans lesquelles j'attend un N° de commande à compléter.
ben oui.... c'est bien la ma question !
n champs pour un n° de commande à saisir qu'on trouve où ?
Messages postés
17
Date d'inscription
jeudi 21 février 2008
Statut
Membre
Dernière intervention
30 avril 2009

C'est une personne qui gère les commandes qui saisie le N° dans le champ :

$data['order_id'] est l'id (index de ma table commande en base) de la commande en cours mais pas encore validée par la création d'un N° de commande.
C'est pour un intranet, c'est donc pa évident de montrer un exemple pour que ce soit plus clair.
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
11
certes.. ce que tu m'expliques, ce que tu veux faire je comprend...
je te demande comment veux-tu réaliser cela tel que te le fais ?
( et intranet ou pas, ça génère du html ! )
ce que tu fais au fond, c'est ( simplifions ):




bon, l'utilisateur voit 3 champs de saisie, rien d'autre...
comment tu fais pour qu'il sache quel n° de commande saisir ?
et toi, tu compte récupérer quoi coté serveur ?
Messages postés
17
Date d'inscription
jeudi 21 février 2008
Statut
Membre
Dernière intervention
30 avril 2009

C'est l'utilisateur qui donne le N° de commande, c'est fonction d'un certain nombre de paramètres que je ne connais pas précisement, mois, jour et N° dans le jour il me semble. Pour ma part je sais que c'est numérique et sur au maximum 11 chiffres.


Je récupère dans ma base un order_at_number qui correspond au confirm_order['.$data['order_id'].'].
Dans mon traitement je change aussi l'état de la commande pour quelle n'apparaisse plus dans les commandes à valider.
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
11
>>C'est l'utilisateur qui donne le N° de commande
oui, ça aussi j'ai compris.....
mais alors  pourquoi plusieurs champs de saisie ?
il peut en saisir plusieurs ?
et dans ce cas, tu dois tous les récupérer sur le serveur je suppose.
mettre un  nom significatif est impossible à gérer !
puisque c'est avec le name qu'on récupère les saisies,
et sans le connaitre.... comment faire ?
coté serveur, en php, par exemple on récupère les saisies avec
$_POST['name du champ dans le formulaire'] ou $_GET
alors, si tu ne le connais pas...
Messages postés
17
Date d'inscription
jeudi 21 février 2008
Statut
Membre
Dernière intervention
30 avril 2009

Je comprends mieux les difficultés à comprendre mon problème, j'ai trop voulu simplifier.


En fait mon formulaire est formé par n ligne de commandes de produits et à chaque ligne il faut donner un N° de commande pour la valider.
J'aurais dû mettre, pour être plus précis :
<form method="POST" action="traitement_manager_order.php" onSubmit="return Verif_order_valide()">
<?php
 while( $data=mysql_fetch_array($req) ){
 echo    '<tr class="order_complet">
   <td width="35">' . $data['quantity']. '</td>
   <td width="50">' . $data['product']. '</td>
   <td width="50">' . $data['date']. '</td>
   <td width="70">' . $data['address']. '</td>
   <td width="40"></td>
    </tr>';
}
?>

</form>

Ce qui est plus proche de la vérité.


Est-ce plus clair ?


J'espère car en fait le problème est plus complexe. Il n'y a pas que le champ confirm_order qui est à compléter et contrôler mais aussi la date (de livraison) et la quantité. Ce qui donne :

<form method="POST" action="traitement_manager_order.php" onSubmit="return Verif_order_valide()">
<?php
 while( $data=mysql_fetch_array($req) ){
 echo    '<tr class="order_complet">
   <td width="35">' . $data['quantity']. '</td>
   <td width="50">' . $data['product']. '</td>
   <td width="50">' . $data['date']. '</td>
   <td width="70">' . $data['address']. '</td>
   <td width="40"></td>
    </tr>';
}
?>

</form>
Messages postés
4933
Date d'inscription
samedi 1 juillet 2006
Statut
Membre
Dernière intervention
2 février 2015
11
bien entendu, c'est ce qu'on pouvait soupçonner....
mais, ça ne change rien à ce que je disais....