Catégoriser : un peu d'aide pour une bonne méthode !

Mammouth du PHP | 545 Messages

15 févr. 2007, 20:17

Bonjour,

Je recherche la façon d'interpréter une catégorie en fonction de l'âge et du sexe d'une personne (ex: -19 & H = EH, -19 & F = ED, [20 -> 39] & H = SE, [20 -> 34] & F = D, etc ...) ... j'ai donc pensé à une fonction JS :

Code : Tout sélectionner

function categorie (age, sexe) { alert ("Sexe du sociètaire " + sexe); alert ("Age du sociètaire " + age); switch (sexe){ case 'h' || 'H': if (age =< 19){ cat = 'EH'; }else if (age > 20 AND age =< 39){ cat = 'SE'; }else if (age > 39 AND age =< 49){ cat = 'V1'; }else if (age > 49 AND age =< 59){ cat = 'V2'; }else if (age > 59 AND age =< 69){ cat = 'V3'; }else if (age > 69 AND age =< 79){ cat = 'V4'; }else if (age > 79 AND age =< 89){ cat = 'V5'; }else{ cat = ' '; }; break; case 'f' || 'F': if (age =< 19){ cat= 'ED'; }else if (age > 19 AND age =< 34){ cat = 'D'; }else if (age > 34 AND age =< 44){ cat = 'A1'; }else if (age > 44 AND age =< 54){ cat = 'A2'; }else if (age > 54 AND age =< 64){ cat = 'A3'; }else if (age > 64 AND age =< 74){ cat = 'A4'; }else if (age > 74 AND age =< 84){ cat = 'A5'; }else{ cat = ' '; }; break; default: cat = '**'; break; } }
Ma fonction est-elle bonne ? N'y a-t-il pas moyen de l'améliorer?

Dans mon code HTML, je récupére la valeur des champs de cette manière :
<input name="sexe" type="hidden" id="sexe" value="<?php echo $sexe;?>" />
<input name="age" type="hidden" id="age" value="<?php echo $age;?>" />
Si ma fonction est correcte et que ma méthode pour récupérer les variables l'est aussi, comment renvoyer la valeur de la fonction en sachant que ce n'est pas dans un formulaire !

Merci
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

16 févr. 2007, 13:13

Ta fonction me parait plutot bonne.. on peut améliorer ici ou là avec un toUpperCase, et retirer les test implicites :
switch (sexe.toUpperCase()) { 
   case 'H' : // test uniquement en majuscule
    if (age =< 19)
        cat = 'EH'; 
    else if (age =< 39) // puisqu'on est dans le else, l'age est forcément supérieur à 19
         cat = 'SE'; 
    else if (age =< 49) // idem, else donc forcément supérieur à 39
         cat = 'V1'; 
    else if (age =< 59) 
         cat = 'V2'; 
    else if (age =< 69) 
         cat = 'V3'; 
    else if (age =< 79)
         cat = 'V4'; 
    else if (age =< 89)
         cat = 'V5'; 
    else
         cat = ' '; 

   break;
...
  return cat; // et tu renvoi la valeur obtenue 
Si ma fonction est correcte et que ma méthode pour récupérer les variables l'est aussi, comment renvoyer la valeur de la fonction en sachant que ce n'est pas dans un formulaire !
Comment ça, ce n'est pas dans un formulaire ? Elle est où cette fonction ? quand est-ce que tu l'appelles ? d'où viennent les arguments si ce n'est pas d'un formulaire ?
Pourquoi ne pas pouvoir faire un input hidden (ou text, ou un span, ou autre selon l'usage) dans lequel tu stockes la valeur retournée par ta fonction pour l'envoyer au serveur ?

Pourquoi ne pas le faire en php ? en js tu n'as aucune certitude sur les données que tu vas récupérer...
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Mammouth du PHP | 545 Messages

16 févr. 2007, 14:52

Merci pour ta réponse.

En attendant une réponse, j'avais fait en php ... comme, tu le sous-entend, c'est mieux, je le laisse ainsi sauf que je vais devoir apporter des modifications dans le 'else if' (celles que tu dis !).

J'ai quand même 2 questions en schant que cela restra en php:
- toUpperCase ... à quoi cela correspond (sert)?
- je dois répeter 3 fois la 'fonction' car c'est dans un tableau comment puis-je faire d'autre pour alléger mon code ?

Merci pour le coup de main
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!

Eléphant du PHP | 445 Messages

16 févr. 2007, 16:30

Bonjour,

toUpperCase() sert à mettre les lettres en majuscule.

Donc dans ce cas :

var1 = 'h';
var2 = 'H';

var1.toUpperCase(); // affiche H
var2.toUpperCase(); // affiche H

Sinon, je ne vois pas vraiment de moyen d'alléger ton code... Tu ne dois pas pouvoir faire beaucoup mieux pour le résultat attendu.
LLDC
Ulti

Mammouth du PHP | 545 Messages

16 févr. 2007, 16:44

Merci pour l'info.

Néanmoins, je vais éditer un nouveau post dans le forum PHP pour savoir comment en faire pour ne pas devoir retaper systhèmatique le test

Merci
Sebe

Pour moi, le PHP est une nouvelle aventure qui a commencée fin octobre 2005 ... c'est plus exitant que le HTML!