Probleme calcul : conditions

Probleme calcul : conditions - PHP - Programmation

Marsh Posté le 30-06-2009 à 22:50:18    

Bonjour,  
 
je ne sais pas si je suis au meilleur endroit pour cette question mais étant donné que c'est dans du php on va faire ca ici :p
 
J'ai 5 zones de texte où l'utilisateur rentre ses chiffres dans ces zones, puis quand on click sur le bouton "valider" un calcul est généré et il fait une moyenne de ces 5 valeurs :  
 

Code :
  1. <input name="button2" id="button2" value="Calculer" type="submit">
  2. </form>
  3. <br />
  4. <?php
  5. if (isset($_POST['zonetext1']))
  6. {
  7. $r1=$_POST['zonetext1'];
  8. $r2=$_POST['zonetext2'];
  9. $r3=$_POST['zonetext3'];
  10. $r4=$_POST['zonetext4'];
  11. $r5=$_POST['zonetext5'];
  12. $nbr=($r1 + $r2 + $r3 + $r4 + $r5)/5;
  13. echo 'Résultat : '; echo number_format($nbr, 4, ',', ' ')." T/L (10^12/L) ";
  14. }
  15. ?>


(les zones de textes ne sont pas mises dans l'extrait de code ci dessus :p)
 
Maus je souhaiterais que, lorque l'utilisateur n'entre ses valeurs que dans 4 zones de texte sur les 5 par exemple, mon resultat ne soit pas diviser par 5 mais par 4.
 
Donc je pense que le plus simple serait de mettre une condition mais la je n'y arrive pas trop...

Reply

Marsh Posté le 30-06-2009 à 22:50:18   

Reply

Marsh Posté le 30-06-2009 à 23:02:51    

si ton POST contiendra que des "zonetext"
tu peux faire un count($_POST) qui te renverras le nombre de ligne de POST
 
hésites pas à afficher ton POST pour debugger:
print_r($_POST);


---------------
http://petitjonas.blogspot.com/
Reply

Marsh Posté le 01-07-2009 à 00:28:13    

Sinon tu peux faire tes input comme ceci :

Code :
  1. <input type="text" name="valeurs[]" />


 
et tu récupères en $_POST un tableau nommé valeurs :

Code :
  1. $moyenne = array_sum($_POST['valeurs']) / count($_POST['valeurs']);


 
bien entendu, il faut faire plus sémantique dans l'HTML, et vérifier que $_POST['valeurs']soit bien un tableau ... de numériques :)
 


---------------
NewsletTux - outil de mailing list en PHP MySQL
Reply

Marsh Posté le 03-07-2009 à 22:40:29    

J'ai testé la derniere methode proposée car elle me semble la plus simple.
 
Voici comment j'ai codé mes zones de texte :  
 

Code :
  1. <td width="180" height="15"><center>Rectangle 1 :<br /><INPUT TYPE="text" NAME="valeurs[]" SIZE="5" MAXLENGTH="10" VALUE=""></center></td>
  2.   <td width="180" height="15"><center>Rectangle 2 :<br /><INPUT TYPE="text" NAME="valeurs[]" SIZE="5" MAXLENGTH="10" VALUE=""></center></td>


 
Puis voila comment j'ai codé mon php pour le calcul :
 

Code :
  1. <?php
  2. if (isset($_POST['valeur[]']))
  3. {
  4. $moyenne = array_sum($_POST['valeurs[]']) / count($_POST['valeurs[]']);
  5. $nbr=($moyenne * 2)/100;
  6. echo 'Résultat : '; echo number_format($nbr, 4, ',', ' ')." T/L (10^12/L) ";
  7. }
  8. ?>


 
Donc la quand je click sur le bouton pour valider, je n'ai plus aucun resultat qui s'affiche, c'est sans effet :p
J'ai essayé pour $moyenne de faire :

Code :
  1. $moyenne = array_sum($_POST['valeurs']) / count($_POST['valeurs']);


comme précisé precement mais ca ne marchait pas donc j'ai fais comme je l'ai mis ci dessous, avec valeur[] car c'est le nom de mes zones de texte donc je me suis dis que tu as oublié de fermer les crochés (mais comme précis ca ne mrche pas non plus ;o)
 
J'ai besoin d'aide s'il vous plait  :lol:  
 
Merci deja pour l'aide apportée

Reply

Marsh Posté le 04-07-2009 à 01:10:17    

charlelechauve a écrit :


[code]<?php
if (isset($_POST['valeur']))
{

 



Replace les $_POST['valeur[]'] par $_POST['valeur'], ta donnée passée en post est un tableau nommé "valeur", donc $_POST['valeur'] est ton tableau à récuperer ...


Message édité par Alisteroid le 04-07-2009 à 01:12:18
Reply

Marsh Posté le 04-07-2009 à 02:07:37    

Code :
  1. <?php
  2. if (isset($_POST['valeur']))
  3. {
  4. $moyenne = array_sum($_POST['valeurs']) / count($_POST['valeurs']);
  5. $nbr=($moyenne * 2)/100;
  6. echo 'Résultat : '; echo number_format($nbr, 4, ',', ' ')." T/L (10^12/L) ";
  7. }
  8. ?>


 
Toujours aucun résultat qui s'affiche quand je click sur le bouton pour valider  :pt1cable:  
 
si vous voulez voir ma page :  
http://www.compterendutp.webou.net/numerationgr.php

Reply

Marsh Posté le 04-07-2009 à 11:33:21    

Tu fais un isset sur $_POST['valeur'] mais essaie de récupérer $_POST['valeurs']

Message cité 1 fois
Message édité par esox_ch le 04-07-2009 à 11:33:46

---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 06-07-2009 à 22:40:23    

arf en effet, merci, je suis plutot bete de ne pas avoir vu ca, ca saute aux yeux en plus.  
 
J'ai donc fait ca :  
 

Code :
  1. <?php
  2. if (isset($_POST['valeurs']))
  3. {
  4. $moyenne = array_sum($_POST['valeurs']) / count($_POST['valeurs']);
  5. $nbr=($moyenne * 2)/100;
  6. echo 'Résultat : '; echo number_format($nbr, 4, ',', ' ')." T/L (10^12/L) ";
  7. }
  8. ?>


 
Si je met par exemple la valeur 10 dans mes 5 zones de texte, j'obtient comme valeur 0.2 (ce qui est bon).  
Par contre si je met 10 dans les 4 zones de texte seulement, j'obtient 0.16 au lieu d'obtenir 0.2, ce qui veut dire qu'il ne me fait pas la moyenne sur mes 4 valeurs mais sur 5 valeurs....  
 
Je ne comprends pas, la formule parait plutot juste, pourquoi ma zone de texte n°5 à une valeur =0 par défat au lieu de n'avoir aucune valeur...

Reply

Marsh Posté le 07-07-2009 à 09:19:40    

Parce que ton text-field est toujours là, même s'il est vide?
Il faut que tu effaces les "valeurs" vides avant de faire ta moyenne


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 07-07-2009 à 18:21:38    

J'ai beau chercher, je n'arrive pas à trouver comment, ou une fonction, pour supprimer les valeurs vides  :(  
 
Pourriez vous m'orienter ou m'indiquer la démarche à suivre ?  
 
Merci d'avance

Reply

Marsh Posté le 07-07-2009 à 18:21:38   

Reply

Marsh Posté le 07-07-2009 à 18:53:35    

ben ce qu'il veut dire c'est que meme si les champs sont vides ton $valeurs  aura 5 valeurs et non 4
il faudra d'abord passer par une boucle qui teste la valeur des cases et ne récupère que les nombres


---------------
Blablaté par Harko
Reply

Marsh Posté le 07-07-2009 à 19:07:59    

Mais je ne sais absolument pas le faire et absolument pas dans quelle direction me tourner pour y arriver  :sweat:  
Ca fait à peine plus d'un mois que je fais du php et j'ai pas trouvé de tuto ou d'explication la dessus

Reply

Marsh Posté le 07-07-2009 à 20:07:00    

Est ce que ca peut marcher si dans mes zones de texte je met value="0" pour les 5 zones de texte, et mon php je le modifie comme ceci :  
 

Code :
  1. <?php
  2. if (isset($_POST['valeurs']))
  3. {
  4. for ($i >=0; ; $i++) {    echo $i;
  5. $i=$_POST['valeurs'];
  6. $moyenne = array_sum($_POST['valeurs']) / count($_POST['valeurs']);
  7. $nbr=($moyenne * 2)/100;
  8. echo 'Résultat : '; echo number_format($nbr, 4, ',', ' ')." T/L (10^12/L) ";
  9. }
  10. ?>


 
voila, a mon avis j'ai fait n'importe quoi car je n'ai pas trouvé ce que je cherchais dans les tutos pour faire les boucles, mais l'idée est que si ma valeur dans la zone de texte = 0 alors la boucle s'arrete (FALSE) et donc si une des 5 zones de texte n'a pas été remplie elle est egal à 0 et donc mon COUNT = 4
 
Donc je ne sais pas si c'esst possible comme ca, mais si quelqun peut m'aider d'une facon ou d'une autre j''en serais ravie

Reply

Marsh Posté le 07-07-2009 à 21:59:06    

$_POST['valeurs'] = array_filter( $_POST['valeurs']);
 
Voila, tout simplement avec cette fonction ca résolve le probleme sans passer par des boucles ou des choses compliquées.  
 
developpez.net marque un point, attention hardware, faut pas se laisser doubler je vous aime ! :p
 
Merci quand meme pour l'aide apportée
 
Résolu

Reply

Marsh Posté le 08-07-2009 à 07:44:39    

Salut,
Ici on privilégie plutôt le côté "on te met sur la bonne piste et après tu cherches" plutôt que le "on te donne le tout, tout fait". Voir les règles du forum


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 08-07-2009 à 09:23:11    

d'un coté il y a la politique de HFR comme tu le dis esox_ch,
mais comme tu peux le voir, notre ami a cherché de lui même une solution et c'est clair que 1 : on ne l'a pas vraiment aiguillé
2 : nos solutions n'étaient pas très bonne.

 

Mais il faut reconnaitre que charlelechauve, tu étais un peu mal parti dans ton code :D
PS : Merci au fait d'avoir donné la solution que tu as trouvé ici, au moins je me coucherai moins con

Message cité 1 fois
Message édité par gatsu35 le 08-07-2009 à 09:23:34

---------------
Blablaté par Harko
Reply

Marsh Posté le 08-07-2009 à 13:33:54    

esox_ch a écrit :

Tu fais un isset sur $_POST['valeur'] mais essaie de récupérer $_POST['valeurs']


 

esox_ch a écrit :

Parce que ton text-field est toujours là, même s'il est vide?
Il faut que tu effaces les "valeurs" vides avant de faire ta moyenne


 

gatsu35 a écrit :

d'un coté il y a la politique de HFR comme tu le dis esox_ch,  
mais comme tu peux le voir, notre ami a cherché de lui même une solution et c'est clair que 1 : on ne l'a pas vraiment aiguillé
2 : nos solutions n'étaient pas très bonne.
 
Mais il faut reconnaitre que charlelechauve, tu étais un peu mal parti dans ton code :D
PS : Merci au fait d'avoir donné la solution que tu as trouvé ici, au moins je me coucherai moins con


 
En quoi les réponses ne l'aiguillaient pas ou n'étaient pas bonnes? À chaque fois j'ai ciblé précisément le problème et esquissé une solution (de manière plus ou moins marquée).
Après, selon moi aiguiller quelqu'un n'est pas lui donner la bonne fonction et lui laisser pour tâche de trouver l'ordre des arguments. PHP  n'est pas non plus ce langage ultra complexe où on peut perdre des heures en cherchant dans la doc hein :bounce:


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Sujets relatifs:

Leave a Replay

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