|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité de passage
![]() Inscription : février 2011 Messages : 4 ![]() |
Bonjour,
Je développe un formulaire en php et pour expliquer simple : sur mon formulaire j'ai 4 champs de saisie pour 4 nombres et le but est chaque fois qu'on sort d'un champ, il fait le calcul des 4 champs dans le dernier. Jusque là pas de problème, j'appelle depuis mon champ la fonction qui me fait le calcul. Ou sa se corse, c'est que si je fais champ5 = champ1 + champ2 + champ3 + champ4 alors si un des champ est vide, le total verra apparaître NaN. Donc j'ai essayé de contourner le problème en faisant des conditions que si par exemple le champ2 est vide, il faut pas le prendre dans le total. Je vous montre le code (dans cet exemple si les 3 premiers champs sont vides, alors il calcule que le dernier : Code :
Là ça fait des jours que je cherche et je trouve pas. Merci à vous pour votre aide précieuse. Guy. |
||
|
|
00
|
|
|
#2 | ||
|
Membre Expert
![]() Tlouye Ci Inscription : mars 2004 Messages : 1 450 ![]() |
Apparement l'erreur n'est pas dans le code que t'as posté (en tout cas j'en vois pas). Faudrait en donner plus...
Par contre tu peux tester comme ça : Code :
|
||
|
|
00
|
|
|
#3 |
|
Expert Confirmé Sénior
![]() Romain VALERIPOOête Inscription : avril 2008 Messages : 2 572 ![]() |
L'extrait que tu montres est "théorique" pour nous expliquer le problème ou bien tiré directement de ta page ?
Montre nous la fonction de vérification en entier s'il te plait
__________________
...pour les linguistes et les curieux >>> générateur de phrases aléatoires __________________ |
|
|
00
|
|
|
#4 | ||
|
Invité de passage
![]() Inscription : février 2011 Messages : 4 ![]() |
Merci déjà pour vos réponses, j'ai testé la première réponse et il ne se passe rien.
Oui, c'était théorique mais quand même tiré de mon code et j'avais apuré un peu pour faire moins long. Mon formulaire est en fait composé de : du champ prix_libre1 //ici l'utilisateur insère ce qu'il veut du champ prix_libre2 //ici l'utilisateur insère ce qu'il veut du champ prix_libre3 //ici l'utilisateur insère ce qu'il veut du champ prix_libre4 //ici l'utilisateur insère ce qu'il veut du champ montant_ht //ce champ va totaliser les 4 champs du dessus du champ montant_tva //ce champ va calculer le montant_ht * 19.6% du champ total_final //cd champ va additionner le montant_ht + la TVA Voilà ceci est placé en réel. Là je dois préciser que si je n'ai pas besoin de tester mes champs et que je saisis dans l'ordre le champ 1, 2, 3 et 4 pour la saisie, tout est OK, mais le problème survient si j'efface par exemple une valeur du champ 2 ou si je commence à saisir le prix_libre2 et que je n'ai rien sur le prix_libre1. Donc je vais vous mettre le code exact : Ceci est l'insertion du champ et l'appel de la fonction (ca j'ai testé, ca fonctionne) L'insertion du champ se passe ainsi : Code :
echo $this->Form->input('prix_libre3', array('id'=>'prix_libre3','onChange'=>'calcul()')); Code :
Guy. |
||
|
|
00
|
|
|
#5 | ||
![]() ![]() Inscription : janvier 2011 Messages : 2 930 ![]() |
pour moi cela ne semble pas la bonne méthode.
Attention à la valeur retournée par isNaN, il suffit de tester Code :
|
||
|
|
00
|
|
|
#6 |
|
Expert Confirmé Sénior
![]() Romain VALERIPOOête Inscription : avril 2008 Messages : 2 572 ![]() |
Y'a quand même plusieurs choses étranges
![]() Pourquoi ce test ? Code javascript :
if ((isNaN(champ1))&&(isNaN(champ2))&&(isNaN(champ4))) ![]() Et aussi : pourquoi le champ3 a-t-il un statut particulier ? Qu'est-ce qui se passe si ce champ qui est vide aussi (genre champs 1 et 2 renseignés seulement) ? Reprends la logique de vérification sur papier simple pour t'y retrouver, et une fois que tout est clair tu peux attaquer la transcription en code. En tout cas à vue de nez je dirais que tu devrais plutôt vérifier les champs séparément, parce que si tu dois écrire un if en dur pour chaque combinaison de champs vides/non vides.... ça va faire un paquet de lignes ![]() Sépare les tests : vérifie d'abord si le champ est vide ou pas, ensuite si son contenu est un nombre valide. Après les tests de chaque champ tu sais si tu as quatre montants valides ou pas ^^ Mais c'est toi qui détient les règles métier à appliquer ici : "0" est-il un montant valide ? un montant négatif est-il valide ? etc.
__________________
...pour les linguistes et les curieux >>> générateur de phrases aléatoires __________________ |
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Inscription : février 2011 Messages : 4 ![]() |
Merci à vous tous,
J'ai tout bien regardé et cet après-midi j'étais pas assez attentif. En fait, la solution de Loceka est parfaite, j'avais mal interprété. Merci encore et à bientot. |
|
|
00
|
|
|
#8 | |
|
Expert Confirmé Sénior
![]() Romain VALERIPOOête Inscription : avril 2008 Messages : 2 572 ![]() |
Citation:
__________________
...pour les linguistes et les curieux >>> générateur de phrases aléatoires __________________ |
|
|
|
00
|
|
|
#9 |
|
Invité de passage
![]() Inscription : février 2011 Messages : 4 ![]() |
effectivement si je mets coucou, j'ai NaN dans mes totaux.
Oui, c'est vrai, il faudrait encore que je teste le champ et que le programme ne laisse pas sortir du champ tant que ce n'est pas vide ou un chiffre. Est-ce bien ça? |
|
|
00
|
|
|
#10 | ||
![]() ![]() Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Analyste Programmeur Inscription : mars 2002 Messages : 30 007 ![]() |
sinon je peux vous la faire en torturé des méninges ?
Code :
__________________
Ma page Developpez Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts) Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir... Votre post est résolu ? Alors n'oubliez pas le Tag ![]() ![]() réalisations :www.planet-languages.com|www.saftair.com| www.ouestisol.fr | www.sebemex.fr | www.extramiante.fr | www.sistac-alizay.fr | www.acoustishop.fr | www.litt.fr | www.ouestventil.fr |
||
|
|
00
|
|
|
#11 | |
|
Membre Expert
![]() Tlouye Ci Inscription : mars 2004 Messages : 1 450 ![]() |
Citation:
Après il faut avoir testé au préalable que l'utilisateur n'a pas rentré des aberrations parce que, dans un tel cas, il est préférable de le remettre à sa place (à coup d'alert ou de messages d'erreur) plutôt que de considérer qu'un champs mal rempli vaut une valeur par défaut (0 ou 1 selon l'élément neutre de l'opération utilisée). La vérification peut simplement se faire avec une regex : Code :
<input type="text" onkeyup = "return this.value = this.value.match(/[+-]?(?:[0-9]+(?:\.[0-9]*)?)?/);"/> |
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com