IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

fonction if imbriqués


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 105
    Points : 56
    Points
    56
    Par défaut fonction if imbriqués
    bonjour
    j'essaye en vain de faire une fonction imbriquée
    mon but est de connaitre la "caf" d'une famille suivant le nombre d'enfant de moins de 16 ans:
    1 enfant = 0
    2 enfants=124
    3 enfants=275
    4 enfants=433
    5 enfants=590
    les variables $AgeEnfant ont par defaut 17 ans et commence par $AgeEnfant0
    j'ai donc écris

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    function cafok {
    $AllocFam_ok =0;
     
    	// bnp
     
    if ($bank=='bnp1' or $bank=='bnp2' ')
    		{
    		if ($AgeEnfant1<16)
    				{
    				if ($AgeEnfant2<16)
     
    					{if ($AgeEnfant3<16)
     
    						{if ($AgeEnfant4<16)
     
    						{$AllocFam_ok=590;}
    						}
    						else{$AllocFam_ok=433;}
    						}
    					else{$AllocFam_ok=275;}
    					}
    				else{$AllocFam_ok=124;}
    				}
     
    		}
     return $AllocFam_ok;
     
    }
    la réponse est erronnée (590 dans ts les cas)
    il y a évidement une erreur mais le débutant que je suis ne la trouve pas!
    merci de votre aide

  2. #2
    Membre averti
    Avatar de antoinev2
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 177
    Points : 376
    Points
    376
    Par défaut
    Bonjour,

    si je peux me permettre, c'est un peu "fouillis", prends l'habitude de respecter l'indentation : ton code sera plus clair et donc, plus facile à débugger : tu dois avoir fait une petite erreur qui apparaîtra clairement.

    un exemple d'indentation respectée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if (condition1) {
        instruction1 ;
    } elseif (condition2) {
        instruction2 ;
    } else {
        instruction3 ;
    }
    (copié de la faq)

    Accessoirement, je dirais qu'il y a un guillemet simple de trop dans ce test :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if ($bank=='bnp1' or $bank=='bnp2' ')

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 105
    Points : 56
    Points
    56
    Par défaut fonction if imbriqué
    bjr
    merci pour votre reponse mais j'ai due mal m'expliquer
    concernant le guillemet, c'est parce que j'ai tronqué la condition qui était trop longue et j'

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 105
    Points : 56
    Points
    56
    Par défaut fonction if imbriqué
    désolé erreur de manip!!!
    je repete donc
    bjr
    merci pour votre reponse mais j'ai due mal m'expliquer
    concernant le guillemet, c'est parce que j'ai tronqué la condition qui était trop longue et j' ai laissé ce guillemet par erreur
    l'erreur est apres;
    actuellement j'utilise bien elseif mais je dois tester tous les cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    if ($NbEnfant=="2") 
    {
    // bnp hypo /sygma hypo conso GE
     
    	if (($AgeEnfant0<16 and $AgeEnfant1<16) and ($bank=='bnp1' or $bank=='bnp2' or $bank=='bnp3' or $bank=='bnp4' or $bank=='sygmahypo' or $bank=='sygmaconso' or $bank=='GEPLUS' or $bank=='GERAC' or $bank=='GEPREM' or $bank=='GE1'or $bank=='GE2'or $bank=='GE3'))
     
    {$AllocFam_ok=124;}
    elseif ($NbEnfant=="3") 
    {
     
    elseif (($AgeEnfant0<16 and $AgeEnfant1<16 and $AgeEnfant2<16) and ($bank=='bnp1' or $bank=='bnp2' or $bank=='bnp3' or $bank=='bnp4' or $bank=='sygmahypo' or $bank=='sygmaconso' or $bank=='GEPLUS' or $bank=='GERAC' or $bank=='GEPREM' or $bank=='GE1'or $bank=='GE2'or $bank=='GE3'))
     
    {$AllocFam_ok=275;}
     
    	elseif (($AgeEnfant0<16 and $AgeEnfant1<16 and $AgeEnfant2>=16) and ($bank=='bnp1' or $bank=='bnp2' or $bank=='bnp3' or $bank=='bnp4' or $bank=='sygmahypo' or $bank=='sygmaconso' or $bank=='GEPLUS' or $bank=='GERAC' or $bank=='GEPREM' or $bank=='GE1'or $bank=='GE2'or $bank=='GE3'))
     
    {$AllocFam_ok=124;}
    etc ( je ne vais pas tout marquer , il y a + de 200 lignes)
    cela est actuellement donc tres lourd
    je voulais clarifier mon script en utilisant des if imbriqués mais pour une raison que j'ignore, cela ne marche pas
    j'attends vos remarques

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    95
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Vienne (Poitou Charente)

    Informations forums :
    Inscription : Décembre 2009
    Messages : 95
    Points : 97
    Points
    97
    Par défaut
    Il semblerait que tu te sois emellé dans tes accolades, voici le code corrigé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    if ($bank=='bnp1' or $bank=='bnp2') {
    	if ($AgeEnfant1<16) {
    		if ($AgeEnfant2<16) {
    			if ($AgeEnfant3<16) {
    				if ($AgeEnfant4<16) {
    					$AllocFam_ok=590;
    				}
    				else {
    					$AllocFam_ok=433;
    				}
    			else {
    				$AllocFam_ok=275;
    			}
    		else{
    			$AllocFam_ok=124;
    		}
    	}
    }

  6. #6
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 105
    Points : 56
    Points
    56
    Par défaut FONCTION IF IMBRIQUE
    merci à toi, mais j'ai encore une erreur
    Parse error: parse error in C:\xampp\htdocs\essai2\Fonction.php on line 182
    la ligne 182 en occurence c'est le else qui precede le 275
    Je te note la fonction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    function cafok ($NbEnfant,$AgeEnfant0,$AgeEnfant1,$AgeEnfant2,$AgeEnfant3,$AgeEnfant4,$AgeEnfant5 )
    {
    $AllocFam_ok =0;
     
     
    if ($bank=='bnp1' or $bank=='bnp2') {
    	if ($AgeEnfant1<16) {
    		if ($AgeEnfant2<16) {
    			if ($AgeEnfant3<16) {
    				if ($AgeEnfant4<16) {
    					$AllocFam_ok=590;
    				}
    				else {
    					$AllocFam_ok=433;
    				}
    			else {
    				$AllocFam_ok=275;
    			}
    		else{
    			$AllocFam_ok=124;
    		}
    	}
    }
     
     return $AllocFam_ok;
     
    }
    je ne vois pas d'erreur !!!

  7. #7
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Salut,

    Je pense que pour simplifier la chose, il vaut mieux d'abord compter le nombre d'enfants effectivement âgés de moins de 16 ans.

    Exemple minimaliste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    $tab=array(
    	$AgeEnfant0, $AgeEnfant1, $AgeEnfant2, $AgeEnfant3, $AgeEnfant4, $AgeEnfant5
    );
    $Enfants=0;
    foreach($tab as $age){
    	if($age<16)$Enfants++;
    }
    Ensuite, tout devient plus clair
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $AllocFam_ok=0;
    switch($Enfants){
    	case 2:$AllocFam_ok=124;
    		Break;
    	case 3:$AllocFam_ok=275;
    		Break;
    	case 4:$AllocFam_ok=433;
    		Break;
    	case 5:$AllocFam_ok=590;
    }
    EDIT : J'avais oublié les 'case'... Merci Thes32 !

  8. #8
    Expert confirmé
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Points : 4 853
    Points
    4 853
    Par défaut
    @Eric2a : la syntaxe correcte de switch c'est

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    switch( $a )
    {
      case 1:
       //bloc de code
       //break;
      case 3:
       //etc..
    }
    Développeur | Zend Certified Engineer

    Étapes Pour mieux se servir du forum:
    1. Commencez par lire les cours et tutoriels ;
    2. Faites une recherche;
    3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles;

    Nix>_Rien n'est plus pratique que la théorie

  9. #9
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut


    Code corrigé !

    Merci à toi

  10. #10
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 105
    Points : 56
    Points
    56
    Par défaut FONCTION IF IMBRIQUE
    salut et merci à eric2A et thes32
    la solution d'utiliser swish est une bonne idée mais la fonction en question est plus complexe que cela :
    je n'ai donné que l'exemple d'une banque mais chacune prend un age différent pour calculer la caf
    telle banque prend les enfants de moins de 16 ans
    telle autre prend les enfants de moins de 10 ans
    etc
    c'est pourquoi j'ai utilisé un if imbriqué
    en clair
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    if ($bank=='bnp1' or $bank=='bnp2') {
    	if ($AgeEnfant1<16) {
    		if ($AgeEnfant2<16) {
    			if ($AgeEnfant3<16) {
    				if ($AgeEnfant4<16) {
    					$AllocFam_ok=590;
    				}
    				else {
    					$AllocFam_ok=433;
    				}
    			else {
    				$AllocFam_ok=275;
    			}
    		else{
    			$AllocFam_ok=124;
    		}
    	}
    }
    elseif ($bank=='xxxx' or $bank=='yyyy') {
    	if ($AgeEnfant1<15) {
    		if ($AgeEnfant2<15) {
    			if ($AgeEnfant3<15) {
    				if ($AgeEnfant4<15) {
    					$AllocFam_ok=590;
    				}
    				else {
    					$AllocFam_ok=433;
    				}
    			else {
    				$AllocFam_ok=275;
    			}
    		else{
    			$AllocFam_ok=124;
    		}
    	}
    }
    etc etc....
    mais pourquoi une erreur sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    			else {
    				$AllocFam_ok=275;
    			}
    le code me semble pourtant correct
    merci

  11. #11
    Expert confirmé
    Avatar de Thes32
    Homme Profil pro
    Développeur PHP, .Net, T-SQL
    Inscrit en
    Décembre 2006
    Messages
    2 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur PHP, .Net, T-SQL

    Informations forums :
    Inscription : Décembre 2006
    Messages : 2 379
    Points : 4 853
    Points
    4 853
    Par défaut
    on ne peut pas avoir plusieurs clause else qui se suivent comme tu le fais. La logique des if c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     
    if( $condition )
    {
      //le premier bloc
    }
    else if( $condition2 )
    {
      //le second bloc alternatif
    }
    else if( $conditionN )
    {
      //le Nième bloc alternatif
    }
    else
    {
      //bloc s'exécutant si aucune condition n'est remplie
    }
    Développeur | Zend Certified Engineer

    Étapes Pour mieux se servir du forum:
    1. Commencez par lire les cours et tutoriels ;
    2. Faites une recherche;
    3. Faites un post si rien trouvé dans les deux étapes précédentes en respectant les règles;

    Nix>_Rien n'est plus pratique que la théorie

  12. #12
    Membre averti
    Avatar de antoinev2
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 177
    Points : 376
    Points
    376
    Par défaut
    Citation Envoyé par kogoi Voir le message
    mais pourquoi une erreur sur la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    			else {
    				$AllocFam_ok=275;
    			}
    le code me semble pourtant correct
    merci
    Cet extrait de code me semble correct en lui-même.
    Il faudrait qu'on voie le code dans son intégralité pour voir où se situe une erreur de logique, par exemple.
    Si ton codes est très long, tu peux le mettre en PJ.

    Par contre, une solution telle que proposée par Eric2a permet un code plus court.
    A part l'âge des enfants, qui dépend de la banque, as-tu d'autres conditions à vérifier dans ce code?

    Si tu n'as pas d'autres conditions à vérifier, tu pourrais avoir :

    une première fonction qui reçoit en argument le nom de la banque, et qui retourne l'âge maximum des enfants.

    une deuxième fonction qui reçoit en argument : l'âge maximum des enfants, et l'âge de chacun des enfants

    et simplement un bout de code qui appelle ces fonctions.

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 105
    Points : 56
    Points
    56
    Par défaut FONCTION IF IMBRIQUE
    Comme demandé la fonction complete avec toujours la même erreur sur sur ligne 182 ( 2eme else)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    function cafok ($bank,$NbEnfant,$AgeEnfant0,$AgeEnfant1,$AgeEnfant2,$AgeEnfant3,$AgeEnfant4,$AgeEnfant5, ){
    $AllocFam_ok =0;
     
    if ($bank=='bnp1' or $bank=='bnp2') {
    	if ($AgeEnfant1<16) {
    		if ($AgeEnfant2<16) {
    			if ($AgeEnfant3<16) {
    				if ($AgeEnfant4<16) {
    					$AllocFam_ok=590;
    				}
    				else {
    					$AllocFam_ok=433;
    				}
    			else {
    				$AllocFam_ok=275;
    			}
    		else{
    			$AllocFam_ok=124;
    		}
    	}
    }
    elseif ($bank=='bnpconso') {
    	if ($AgeEnfant1<6) {
    		if ($AgeEnfant2<6) {
    			if ($AgeEnfant3<6) {
    				if ($AgeEnfant4<6) {
    					$AllocFam_ok=590;
    				}
    				else {
    					$AllocFam_ok=433;
    				}
    			else {
    				$AllocFam_ok=275;
    			}
    		else{
    			$AllocFam_ok=124;
    		}
    	}
    }
    elseif ($bank=='brookeo') {
    	if ($AgeEnfant1<9) {
    		if ($AgeEnfant2<9) {
    			if ($AgeEnfant3<9) {
    				if ($AgeEnfant4<9) {
    					$AllocFam_ok=590;
    				}
    				else {
    					$AllocFam_ok=433;
    				}
    			else {
    				$AllocFam_ok=275;
    			}
    		else{
    			$AllocFam_ok=124;
    		}
    	}
    }
    elseif ($bank=='ccfp1' or $bank=='ccfp2' or $bank=='ccfp3') {
    	if ($AgeEnfant1<15) {
    		if ($AgeEnfant2<15) {
    			if ($AgeEnfant3<15) {
    				if ($AgeEnfant4<15) {
    					$AllocFam_ok=590;
    				}
    				else {
    					$AllocFam_ok=433;
    				}
    			else {
    				$AllocFam_ok=275;
    			}
    		else{
    			$AllocFam_ok=124;
    		}
    	}
    }
    elseif ($bank=='cfcal' or $bank=='wash') {
    	if ($AgeEnfant1<10) {
    		if ($AgeEnfant2<10) {
    			if ($AgeEnfant3<10) {
    				if ($AgeEnfant4<10) {
    					$AllocFam_ok=590;
    				}
    				else {
    					$AllocFam_ok=433;
    				}
    			else {
    				$AllocFam_ok=275;
    			}
    		else{
    			$AllocFam_ok=124;
    		}
    	}
    }
    elseif ($bank=='creatis') {
    	if ($AgeEnfant1<14) {
    		if ($AgeEnfant2<14) {
    			if ($AgeEnfant3<14) {
    				if ($AgeEnfant4<14) {
    					$AllocFam_ok=590;
    				}
    				else {
    					$AllocFam_ok=433;
    				}
    			else {
    				$AllocFam_ok=275;
    			}
    		else{
    			$AllocFam_ok=124;
    		}
    	}
    }
     
    elseif ($bank=='lift') {
    	if ($AgeEnfant1<13) {
    		if ($AgeEnfant2<13) {
    			if ($AgeEnfant3<13) {
    				if ($AgeEnfant4<13) {
    					$AllocFam_ok=590;
    				}
    				else {
    					$AllocFam_ok=433;
    				}
    			else {
    				$AllocFam_ok=275;
    			}
    		else{
    			$AllocFam_ok=124;
    		}
    	}
    }
     return $AllocFam_ok;
     
    }
    le code est très simple et répétitif ,c'est pourquoi je n'en avais donné qu'une partie
    merci

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 105
    Points : 56
    Points
    56
    Par défaut FONCTION IF IMBRIQUE
    re
    pour info, je vous rappelle mon code initial qui me semblait + logique (accolades placées differement)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    if ($bank=='bnp1' or $bank=='bnp2') {
    	if ($AgeEnfant1<16) {
    				if ($AgeEnfant2<16) {
    					if ($AgeEnfant3<16){
    						if ($AgeEnfant4<16){$AllocFam_ok=590;}
    						else {$AllocFam_ok=450;}
    									}
    					else {$AllocFam_ok=250;}
    								}
    				else {$AllocFam_ok=120;}
    						}
    								}	
    elseif ($bank=='bnpconso') {
    	if ($AgeEnfant1<6) {
    			if ($AgeEnfant2<6) {
    					if ($AgeEnfant3<6){
    						if ($AgeEnfant4<6){$AllocFam_ok=590;}
    						else {$AllocFam_ok=450;}
    								}
    					else {$AllocFam_ok=250;}
    							}
    			else {$AllocFam_ok=120;}
    					}
    						}
    etc
    mais ne fonctionne pas (donne 590 à chaque fois)

  15. #15
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Essaie ce code...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    function cafok ($bank,$NbEnfant,$AgeEnfant0,$AgeEnfant1,$AgeEnfant2,$AgeEnfant3,$AgeEnfant4,$AgeEnfant5){
    	// Détermination de l'âge maximum pour la banque
    	$tab=array(
    		$AgeEnfant0,$AgeEnfant1,$AgeEnfant2,$AgeEnfant3,$AgeEnfant4,$AgeEnfant5
    	);
    	$AgeMaxi=17;
    	if($bank=='bnpconso')
    		$AgeMaxi=6;
    	elseif($bank=='brookeo')
    		$AgeMaxi=9;
    	elseif($bank=='cfcal' or $bank=='wash')
    		$AgeMaxi=10;
    	elseif($bank=='lift') 
    		$AgeMaxi=13;
    	elseif($bank=='creatis')
    		$AgeMaxi=14;
    	elseif($bank=='ccfp1' or $bank=='ccfp2' or $bank=='ccfp3')
    		$AgeMaxi=15;
    	elseif($bank=='bnp1' or $bank=='bnp2')
    		$AgeMaxi=16;
     
    	if($AgeMaxi>16)return 0; // Faut changer de banque ?
     
    	// Compter le nombre d'enfants pris en compte par la banque
    	$Enfants=0;
    	foreach($tab as $age){
    		if($age<$AgeMaxi)$Enfants++;
    	}
     
    	// Obtenir le coêf. en fonction du nombre d'enfants
    	$AllocFam_ok=0;
    	switch($Enfants){
    		case 2:$AllocFam_ok=124;
    			Break;
    		case 3:$AllocFam_ok=275;
    			Break;
    		case 4:$AllocFam_ok=433;
    			Break;
    		case 5:$AllocFam_ok=590;
    	}
    	return $AllocFam_ok;
    }

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2009
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2009
    Messages : 105
    Points : 56
    Points
    56
    Par défaut FONCTION IF IMBRIQUE
    merci pour votre persévérence !!!!!
    mais votre script donnait 0 dans tous les cas
    j'ai donc vérifié en amont et l'erreur etait dans la récup des variables
    maintenant tout fonctionne parfaitement et c'est beaucoup plus clean
    TROP FORT
    vive ce forum et encore merci à tous
    pat

  17. #17
    Membre averti
    Avatar de antoinev2
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    177
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 177
    Points : 376
    Points
    376
    Par défaut
    Pour info : dans ton code, il manquait certaines accolades :

    exemple : 1e premier bloc de ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    if ($bank=='bnp1' or $bank=='bnp2') {
    	if ($AgeEnfant1<16) {
    		if ($AgeEnfant2<16) {
    			if ($AgeEnfant3<16) {
    				if ($AgeEnfant4<16) {
    					$AllocFam_ok=590;
    				}
    				else {
    					$AllocFam_ok=433;
    				}
    			else {
    				$AllocFam_ok=275;
    			}
    		else{
    			$AllocFam_ok=124;
    		}
    	}
    }
    elseif ($bank=='bnpconso') {

    et corrigé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    if ($bank=='bnp1' or $bank=='bnp2') {
    	if ($AgeEnfant1<16) {
    		if ($AgeEnfant2<16) {
    			if ($AgeEnfant3<16) {
    				if ($AgeEnfant4<16) {
    					$AllocFam_ok=590;
    				}
    				else {
    					$AllocFam_ok=433;
    				}
    			} else {
    				$AllocFam_ok=275;
    			}
    		} else{
    			$AllocFam_ok=124;
    		}
    	}
    }

    Je te conseille d'utiliser un éditeur de texte avec coloration syntaxique.
    Par exemple, Notepad++.
    Tu aurais pu vérifier tes paires d'accolades rapidement.


    Bon en tout cas, la solution de Eric2a est évidemment plus claire et plus facile à faire évoluer.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2013] Deux fonctions SIERREUR imbriqués et formule matricielle ?
    Par Daniel.C dans le forum Excel
    Réponses: 3
    Dernier message: 28/11/2014, 17h57
  2. [XSLT 1.0] XSLT: utilisation de la fonction position() dans <for-each> imbriqués
    Par bernidupont dans le forum XSL/XSLT/XPATH
    Réponses: 2
    Dernier message: 04/05/2011, 21h33
  3. [XL-2007] Fonction SI Imbriqués
    Par guy2004 dans le forum Excel
    Réponses: 2
    Dernier message: 16/12/2010, 11h13
  4. [XL-2007] Fonction SI imbriqués + TROUVE
    Par tinkye_winkye dans le forum Excel
    Réponses: 4
    Dernier message: 25/11/2010, 10h56
  5. créer une fonction avec "si" imbriqués
    Par JUMJJUMJ dans le forum Access
    Réponses: 5
    Dernier message: 12/05/2006, 22h03

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo