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 :

trier des données issues de ma table SQL


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Points : 183
    Points
    183
    Par défaut trier des données issues de ma table SQL
    Bonjour a tous,


    Finalement je ne m'en sors pas alors je sollicite un peu d'aide s'il vous plait.

    Je suis en train de developper un script pour classer des crédits pour une association qui vient en aide aux personnes endettées.

    Le principe est le suivant, voici ma table de données
    Nom : table_usort.jpg
Affichages : 285
Taille : 29,7 Ko

    Voici ce que j'essai d'obtenir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    //.................................34mois .. 36mois .. 42mois .. 48mois
    //Cofidis - 5000 - 6.5% - .........180€ .....0..........0..........0....
    //sofinco - 6000 - 7.5% - .........MI_1......MI_2.......190€ ......0....
    //LCL - 7000 - 5% .................MI_3......210€ ......0..........0....
    //CETELEM - 3000 - 3%..............MI_4......MI_5.......MI_6......90€..
    //Total ...........................tot_1.......tot_2........tot_3........tot_14..
    Les MI_x sont les mensualités que je dois calculer en fonction de la durée en mois qui se trouve en tete de colonne.

    Pour cela j'ai fais pleins de tests mais je m'y suis perdu :
    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
     
    <?php
    session_start();
    require ('conx.php');
    require ('config.php');
    require ('session.php');
     
    $client="12";
    $trian=@$_GET['trian']; 
    $_SESSION['trian']=$trian;
    if ($_SESSION['trian']>0){$sufftable=$suff_table.$trian.'_';}else{$sufftable=$suff_table;$trian=0;}
     
    $derclient = mysql_query("SELECT * FROM `".$sufftable."dem_immo_plan` where idCLIENT='$client'");
    $nbres=mysql_num_rows($derclient);
    $nb_credits = $nbres + 5; 
    $larg = 100 / ($nb_credits + 5); // 5 étant le nombre de champs avant les durées (Nombanque/Montant/TauxCrédit/TauxASS/Mensualité ASS
    // Je vais definir la taille moyenne pour chaque champ
     
    ?>
    <style> .tail { width:<?php echo $larg;?>%; float:left; } </style>
    <?php
     
    while($Dcl = mysql_fetch_array($derclient, MYSQL_ASSOC))
    {
    	$id=$Dcl['idPLAN'];
    	$plan_nombanque=$Dcl['plan_nombanque'];
    	$plan_montant=$Dcl['plan_montant'];
    	$plan_taux=$Dcl['plan_taux'];
    	$plan_duree=$Dcl['plan_duree'];
    	$plan_mens=$Dcl['plan_mens'];
    	$plan_ass_taux=$Dcl['plan_ass_taux'];
    	$plan_ass_mens=$Dcl['plan_ass_mens'];
     
    }
     
    $list_dur="0";
    while($cl_dur = mysql_fetch_array($derclient, MYSQL_ASSOC))
    {
    	$list_dur .=", ".$cl_dur['plan_duree'];
    }
    echo '$list_dur '.$list_dur.'<br>';
     
    //
    //.................................34mois .. 36mois .. 42mois .. 48mois
    //Cofidis - 5000 - 6.5% - .........180€ .....0..........0..........0....
    //sofinco - 6000 - 7.5% - .........MI_1......MI_2.......190€ ......0....
    //LCL - 7000 - 5% .................MI_3......210€ ......0..........0....
    //CETELEM - 3000 - 3%..............MI_4......MI_5.......MI_6......90€..
    //Total ...........................tot_1.......tot_2........tot_3........tot_14..
    //
     
    function cmp($a, $b)
    {
        if ($a == $b) {
            return 0;
        }
        return ($a < $b) ? -1 : 1;
    }
     
    echo '$list_dur '.$list_dur.'<br>';
     
    $a = array($list_dur); // ICI je n'ai pas le resultat attendu
     
    usort($a, "cmp");
    foreach ($a as $key => $value) {echo "$key : $value<br>";}
     
    echo '------------------------------------------------------<br>';
     
    $tot_1= 180 + $MI_1 +$MI_3 + $MI_4;
    $tot_2= 0 + $MI_2 + 210 + $MI_5;
    $tot_3= 0 + 190 + 0 + $MI_6;
    $tot_4= 0 + 0 + 0 + 90;
     
    class TestObj 
    {
        var $name;
     
        function TestObj($name)
        {
            $this->name = $name;
        }
     
        static function cmp_obj($a, $b)
        {
            $al = strtolower($a->name);
            $bl = strtolower($b->name);
            if ($al == $bl) {
                return 0;
            }
            return ($al > $bl) ? +1 : -1;
        }
    }
     
    $a[] = new TestObj($text_0);
    $a[] = new TestObj($text_1);
    $a[] = new TestObj($text_2);
    $a[] = new TestObj($text_3);
    $a[] = new TestObj($text_4);
    $a[] = new TestObj($text_5);
     
    usort($a, array("TestObj", "cmp_obj"));
     
    foreach ($a as $item) {
        echo $item->name . "<br>";
    }
    ?>
    Pardonnez moi pour toutes les incompréhensions et mélanges de codes, mais a force de faire des tests et les nuits blanches ... je ne sais plus ou j'en suis.

    Merci pour toute l'aide que vous pourrez m'apporter.
    Guillaume

  2. #2
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Essaie ceci. A adapter bien entendu mais le c'est le principe qui compte.
    J'ai simulé les enregistrements de la table sql par un tableau mémoire.

    Code php : 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
     
    <?php
    //.................................34mois .. 36mois .. 42mois .. 48mois
    //Cofidis - 5000 - 6.5% - .........180€ .....0..........0..........0....
    //sofinco - 6000 - 7.5% - .........MI_1......MI_2.......190€ ......0....
    //LCL - 7000 - 5% .................MI_3......210€ ......0..........0....
    //CETELEM - 3000 - 3%..............MI_4......MI_5.......MI_6......90€..
    $table   = array();
    $table[] = array("nom_banque"=>'Cofidis',"montant"=>5000,"taux"=>6.5,"duree"=>34,"mens"=>180);
    $table[] = array("nom_banque"=>'sofinco',"montant"=>6000,"taux"=>7.5,"duree"=>42,"mens"=>190);
    $table[]  = array("nom_banque"=>'LCL',    "montant"=>7000,"taux"=>5.0,"duree"=>36,"mens"=>210);
    $table[] = array("nom_banque"=>'CETELEM',"montant"=>3000,"taux"=>3.0,"duree"=>48,"mens"=>90);
    //---- Tableau des durées
    $durees = array();
    foreach ($table as $cle => $enregistrement)
    {
     $durees[] = $enregistrement["duree"];
    }
    sort($durees);
    //---- Durées appliquées à tous les établissement
    $durees_etab = array();
    foreach ($table as $cle => $enregistrement)
    {
     $etablissement = $enregistrement["nom_banque"];
     foreach($durees as $duree)
     {
      $durees_etab[$etablissement][$duree] = 0;
     }
    }
    ?>
    <table border="1">
     <tr>
      <td>&nbsp;</td><?php
      foreach($durees as $duree)
      {?>
       <td><?php print $duree;?></td><?php
      }?>
     </tr>
    <?php
    //---- Tableau final
    foreach ($table as $cle => $enregistrement)
    {?>
     <tr><?php
     $nom_banque = $enregistrement["nom_banque"];
     $montant    = $enregistrement["montant"];
     $taux       = $enregistrement["taux"];
     $duree2     = $enregistrement["duree"];
     $mensualite = $enregistrement["mens"];?>
     
      <td><?php print "$nom_banque - $montant - $taux %";?></td>
     <?php
     
     foreach($durees_etab[$nom_banque] as $duree =>$valeur)
     {
      if ($duree == $duree2)
      {
       $contenu = $mensualite;
      }
      else
      {
       if ($duree < $duree2)
       {
        $contenu = "a calculer";
       }
       else
       {
        $contenu = "0";
       }
      }?>
      <td><?php print $contenu ;?></td><?php
     }?>
     
     </tr><?php
    }?>
    </table>

    Donne :
    Nom : Capture20180322_001.JPG
Affichages : 280
Taille : 30,6 Ko
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Points : 183
    Points
    183
    Par défaut
    Merci pour cette réponse Ô combien utile,

    Par contre il faudrait que je puisse additionner toutes les mensualités de la colonne et mettre les resultats dans les totaux, or je ne pense pas que la boucle soit possible dans ce cas, voici le code que j'ai modifié et auquel j'ai rajouté l'equation de calcul dela mensualité et la requete SQL initiale.

    Merci encore pour toute l'aide possible :

    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
     
    <?php
    session_start();
    require ('conx.php');
    require ('config.php');
    require ('session.php');
     
    $client="12";
    $trian=@$_GET['trian']; 
    $_SESSION['trian']=$trian;
    if ($_SESSION['trian']>0){$sufftable=$suff_table.$trian.'_';}else{$sufftable=$suff_table;$trian=0;}
     
    $derclient = mysql_query("SELECT * FROM `".$sufftable."dem_immo_plan` where idCLIENT='$client'");
    $nbres=mysql_num_rows($derclient);
    $nb_credits = $nbres + 5; 
    $larg = 100 / ($nb_credits + 5); // 5 étant le nombre de champs avant les durées (Nombanque/Montant/TauxCrédit/TauxASS/Mensualité ASS
     
    //.................................34mois .. 36mois .. 42mois .. 48mois
    //Cofidis - 5000 - 6.5% - .........180€ .....0..........0..........0....
    //sofinco - 6000 - 7.5% - .........MI_1......MI_2.......190€ ......0....
    //LCL - 7000 - 5% .................MI_3......210€ ......0..........0....
    //CETELEM - 3000 - 3%..............MI_4......MI_5.......MI_6......90€..
    $table   = array();
     
    while($Dcl = mysql_fetch_array($derclient, MYSQL_ASSOC))
    {
    	$id=$Dcl['idPLAN'];
    	$plan_nombanque=$Dcl['plan_nombanque'];
    	$plan_montant=$Dcl['plan_montant'];
    	$plan_taux=$Dcl['plan_taux'];
    	$plan_duree=$Dcl['plan_duree'];
    	$plan_mens=$Dcl['plan_mens'];
    	$plan_ass_taux=$Dcl['plan_ass_taux'];
    	$plan_ass_mens=$Dcl['plan_ass_mens'];
    	$table[] = array("nom_banque"=>$plan_nombanque,"montant"=>$plan_montant,"taux"=>$plan_taux,"duree"=>$plan_duree,"mens"=>$plan_mens);
    }
     
    //---- Tableau des durées
    $durees = array();
    foreach ($table as $cle => $enregistrement)
    {
     $durees[] = $enregistrement["duree"];
    }
    sort($durees);
    //---- Durées appliquées à tous les établissement
    $durees_etab = array();
    foreach ($table as $cle => $enregistrement)
    {
     $etablissement = $enregistrement["nom_banque"];
     foreach($durees as $duree)
     {
      $durees_etab[$etablissement][$duree] = 0;
     }
    }
    ?>
    <table border="1">
     <tr>
      <td>&nbsp;</td><?php
      foreach($durees as $duree)
      {?>
       <td><?php print $duree;?></td><?php
      }?>
     </tr>
    <?php
    //---- Tableau final
    foreach ($table as $cle => $enregistrement)
    {?>
     <tr><?php
     $nom_banque = $enregistrement["nom_banque"];
     $montant    = $enregistrement["montant"];
     $taux       = $enregistrement["taux"];
     $duree2     = $enregistrement["duree"];
     $mensualite = $enregistrement["mens"];?>
     
      <td style="width:200px"><?php print "$nom_banque - $montant - $taux %";?></td>
     <?php
     
     foreach($durees_etab[$nom_banque] as $duree =>$valeur)
     {
      if ($duree == $duree2)
      {
       $contenu = $mensualite;
      }
      else
      {
       if ($duree < $duree2)
       {
        $contenu = round(($montant*($taux/100)*bcpow((1+($taux/100)),$duree,2))/(bcpow((1+($taux/100)),$duree,2)-1), 2);
       }
       else
       {
        $contenu = "0";
       }
      }?>
      <td style="width:80px"><?php print $contenu ;?></td><?php
     }
     echo '</tr>';
     
    }
    ?>
    <tr>
       <td style="width:200px"><?php print "Totaux";?></td>
     <?php
     foreach($durees_etab[$nom_banque] as $duree =>$valeur)
     {
      echo '<td style="width:80px"> '.$tot_contenu_mensualite.'</td>'; /// Cumule des mensualités de la colonne
     }?>
     </tr><?php
    ?>
    </table>

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Pour calculer les totaux, c'est assez simple : tu initialises un tableau $totaux indexé par les durées à l'extérieur des boucles
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    $durees = array();
    foreach($table as $cle => $enregistrement) {
        $durees[] = $enregistrement["duree"];
    }
    array_unique($durees); // on dédoublonne les durées 
    sort($durees);
    // init du tableau des totaux
    $totaux = array_fill_keys($durees, 0);
    tu le complètes au fur et à mesure des calculs :

    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
    foreach($durees_etab[$nom_banque] as $duree => $valeur) {
        if ($duree == $duree2) {
            $contenu = $mensualite;
        }
        else {
            if ($duree < $duree2) {
                $contenu = round(($montant * ($taux / 100) * bcpow((1 + ($taux / 100)) , $duree, 2)) / (bcpow((1 + ($taux / 100)) , $duree, 2) - 1) , 2);
            }
            else {
                $contenu = "0";
            }
        } 
    // calcul du total
        $totaux[$duree] += $contenu;
        ?>
        <td style="width:80px"><?php print $contenu; ?></td><?php
    }
    et tu l'affiches en dernière ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <tr>
       <td style="width:200px"><?php print "Totaux"; ?></td>
    	<?php
    	foreach($totaux as $duree => $total) {
    		echo '<td style="width:80px"> ' . $total . '</td>'; /// Cumule des mensualités de la colonne
    	} ?>
    </tr>
    Par contre, je ne vois pas bien le rapport avec le titre de la discussion "Utilisation de usort"
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Points : 183
    Points
    183
    Par défaut
    Bonjour Celira et merci pour ton aide,

    Si je résume ce que tu me dis cela me renvoi un résultat de 0 dans toutes les colonnes totaux .

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    ça te renvoie 0 ? Je peux voir ton nouveau code ?
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  7. #7
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Points : 183
    Points
    183
    Par défaut
    Si j'ai bien compris ce que tu m'as dis :

    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
     
    <?php
    session_start();
    require ('conx.php');
    require ('config.php');
    require ('session.php');
     
    $client="12";
    $trian=@$_GET['trian']; 
    $_SESSION['trian']=$trian;
    if ($_SESSION['trian']>0){$sufftable=$suff_table.$trian.'_';}else{$sufftable=$suff_table;$trian=0;}
     
    $derclient = mysql_query("SELECT * FROM `".$sufftable."dem_immo_plan` where idCLIENT='$client'");
    $nbres=mysql_num_rows($derclient);
    $nb_credits = $nbres + 5; 
    $larg = 100 / ($nb_credits + 5); // 5 étant le nombre de champs avant les durées (Nombanque/Montant/TauxCrédit/TauxASS/Mensualité ASS
     
    //.................................34mois .. 36mois .. 42mois .. 48mois
    //Cofidis - 5000 - 6.5% - .........180€ .....0..........0..........0....
    //sofinco - 6000 - 7.5% - .........MI_1......MI_2.......190€ ......0....
    //LCL - 7000 - 5% .................MI_3......210€ ......0..........0....
    //CETELEM - 3000 - 3%..............MI_4......MI_5.......MI_6......90€..
    $table   = array();
     
    while($Dcl = mysql_fetch_array($derclient, MYSQL_ASSOC))
    {
    	$id=$Dcl['idPLAN'];
    	$plan_nombanque=$Dcl['plan_nombanque'];
    	$plan_montant=$Dcl['plan_montant'];
    	$plan_taux=$Dcl['plan_taux'];
    	$plan_duree=$Dcl['plan_duree'];
    	$plan_mens=$Dcl['plan_mens'];
    	$plan_ass_taux=$Dcl['plan_ass_taux'];
    	$plan_ass_mens=$Dcl['plan_ass_mens'];
    	$table[] = array("nom_banque"=>$plan_nombanque,"montant"=>$plan_montant,"taux"=>$plan_taux,"duree"=>$plan_duree,"mens"=>$plan_mens);
    }
     
    //---- Tableau des durées
    $durees = array();
    foreach ($table as $cle => $enregistrement)
    {
     $durees[] = $enregistrement["duree"];
    }
    sort($durees);
    //---- Durées appliquées à tous les établissement
    $durees_etab = array();
    foreach ($table as $cle => $enregistrement)
    {
     $etablissement = $enregistrement["nom_banque"];
     foreach($durees as $duree)
     {
      $durees_etab[$etablissement][$duree] = 0;
     }
    }
    ?>
    <table border="1">
     <tr>
      <td>&nbsp;</td><?php
      foreach($durees as $duree)
      {?>
       <td><?php print $duree;?></td><?php
      }?>
     </tr>
    <?php
    //---- Tableau final
    foreach ($table as $cle => $enregistrement)
    {?>
     <tr><?php
     $nom_banque = $enregistrement["nom_banque"];
     $montant    = $enregistrement["montant"];
     $taux       = $enregistrement["taux"];
     $duree2     = $enregistrement["duree"];
     $mensualite = $enregistrement["mens"];?>
     
      <td style="width:200px"><?php print "$nom_banque - $montant - $taux %";?></td>
     <?php
     
     foreach($durees_etab[$nom_banque] as $duree =>$valeur)
     {
      if ($duree == $duree2)
      {
       $contenu = $mensualite;
      }
      else
      {
       if ($duree < $duree2)
       {
        $contenu = round(($montant*($taux/100)*bcpow((1+($taux/100)),$duree,2))/(bcpow((1+($taux/100)),$duree,2)-1), 2);
       }
       else
       {
        $contenu = "0";
       }
      }
        $totaux[$duree] += $contenu;
     ?>
        <td style="width:80px"><?php print $contenu ;?></td><?php
     }
     echo '</tr>';
     
    }
     
     
    $durees = array();
    foreach($table as $cle => $enregistrement) {
        $durees[] = $enregistrement["duree"];
    }
    array_unique($durees); // on dédoublonne les durées 
    sort($durees);
    $totaux = array_fill_keys($durees, 0);
    ?>
     
    <tr>
       <td style="width:200px"><?php print "Totaux"; ?></td>
    	<?php
    	foreach($totaux as $duree => $total) {
    		echo '<td style="width:80px"> ' . $total . '</td>'; /// Cumul des mensualités de la colonne
    	} ?>
    </tr>
    </table>

  8. #8
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    ça serait sans doute une bonne idée de mettre l'initialisation du tableau AVANT la boucle qui l'alimente

    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
     
    <?php
    session_start();
    require ('conx.php');
    require ('config.php');
    require ('session.php');
     
    $client="12";
    $trian=@$_GET['trian']; 
    $_SESSION['trian']=$trian;
    if ($_SESSION['trian']>0){$sufftable=$suff_table.$trian.'_';}else{$sufftable=$suff_table;$trian=0;}
     
    $derclient = mysql_query("SELECT * FROM `".$sufftable."dem_immo_plan` where idCLIENT='$client'");
    $nbres=mysql_num_rows($derclient);
    $nb_credits = $nbres + 5; 
    $larg = 100 / ($nb_credits + 5); // 5 étant le nombre de champs avant les durées (Nombanque/Montant/TauxCrédit/TauxASS/Mensualité ASS
     
    //.................................34mois .. 36mois .. 42mois .. 48mois
    //Cofidis - 5000 - 6.5% - .........180€ .....0..........0..........0....
    //sofinco - 6000 - 7.5% - .........MI_1......MI_2.......190€ ......0....
    //LCL - 7000 - 5% .................MI_3......210€ ......0..........0....
    //CETELEM - 3000 - 3%..............MI_4......MI_5.......MI_6......90€..
    $table   = array();
     
    while($Dcl = mysql_fetch_array($derclient, MYSQL_ASSOC))
    {
    	$id=$Dcl['idPLAN'];
    	$plan_nombanque=$Dcl['plan_nombanque'];
    	$plan_montant=$Dcl['plan_montant'];
    	$plan_taux=$Dcl['plan_taux'];
    	$plan_duree=$Dcl['plan_duree'];
    	$plan_mens=$Dcl['plan_mens'];
    	$plan_ass_taux=$Dcl['plan_ass_taux'];
    	$plan_ass_mens=$Dcl['plan_ass_mens'];
    	$table[] = array("nom_banque"=>$plan_nombanque,"montant"=>$plan_montant,"taux"=>$plan_taux,"duree"=>$plan_duree,"mens"=>$plan_mens);
    }
     
    //---- Tableau des durées et tableau des totaux
    $durees = array();
    foreach($table as $cle => $enregistrement) {
        $durees[] = $enregistrement["duree"];
    }
    array_unique($durees); // on dédoublonne les durées 
    sort($durees);
    $totaux = array_fill_keys($durees, 0);
     
    //---- Durées appliquées à tous les établissement
    $durees_etab = array();
    foreach ($table as $cle => $enregistrement)
    {
     $etablissement = $enregistrement["nom_banque"];
     foreach($durees as $duree)
     {
      $durees_etab[$etablissement][$duree] = 0;
     }
    }
    ?>
    <table border="1">
     <tr>
      <td>&nbsp;</td><?php
      foreach($durees as $duree)
      {?>
       <td><?php print $duree;?></td><?php
      }?>
     </tr>
    <?php
    //---- Tableau final
    foreach ($table as $cle => $enregistrement)
    {?>
     <tr><?php
     $nom_banque = $enregistrement["nom_banque"];
     $montant    = $enregistrement["montant"];
     $taux       = $enregistrement["taux"];
     $duree2     = $enregistrement["duree"];
     $mensualite = $enregistrement["mens"];?>
     
      <td style="width:200px"><?php print "$nom_banque - $montant - $taux %";?></td>
     <?php
     
     foreach($durees_etab[$nom_banque] as $duree =>$valeur)
     {
      if ($duree == $duree2)
      {
       $contenu = $mensualite;
      }
      else
      {
       if ($duree < $duree2)
       {
        $contenu = round(($montant*($taux/100)*bcpow((1+($taux/100)),$duree,2))/(bcpow((1+($taux/100)),$duree,2)-1), 2);
       }
       else
       {
        $contenu = "0";
       }
      }
        $totaux[$duree] += $contenu;
     ?>
        <td style="width:80px"><?php print $contenu ;?></td><?php
     }
     echo '</tr>';
     
    }
     
    ?>
     
    <tr>
       <td style="width:200px"><?php print "Totaux"; ?></td>
    	<?php
    	foreach($totaux as $duree => $total) {
    		echo '<td style="width:80px"> ' . $total . '</td>'; /// Cumul des mensualités de la colonne
    	} ?>
    </tr>
    </table>
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Points : 183
    Points
    183
    Par défaut
    Je suis vraiment désolés, je ne suis pas en phase avec toutes ces nuits blanches, j'ai bêtement appliqué ton code sans trop réfléchir, je te présente toutes mes excuses.

    EN tout cas effectivement, cela fonctionne mieux ainsi.

    Par contre quand deux durées sont identiques, comment faire pour eviter qu'il créé deux colonnes s'il te plait ?
    exemples :
    Nom : table_usort.jpg
Affichages : 240
Taille : 30,4 Ko

    Voici mon code retouché :
    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
     
    <?php
    $derclient = mysql_query("SELECT * FROM `".$sufftable."dem_immo_plan` where idCLIENT='$client'");
    $nbres=mysql_num_rows($derclient);
    $nb_credits = $nbres + 5; 
    $larg = 100 / ($nb_credits + 5); // 5 étant le nombre de champs avant les durées (Nombanque/Montant/TauxCrédit/TauxASS/Mensualité ASS
     
    $table   = array();
     
    while($Dcl = mysql_fetch_array($derclient, MYSQL_ASSOC))
    {
    	$id=$Dcl['idPLAN'];
    	$plan_nombanque=$Dcl['plan_nombanque'];
    	$plan_montant=$Dcl['plan_montant'];
    	$plan_taux=$Dcl['plan_taux'];
    	$plan_duree=$Dcl['plan_duree'];
    	$plan_mens=$Dcl['plan_mens'];
    	$plan_ass_taux=$Dcl['plan_ass_taux'];
    	$plan_ass_mens=$Dcl['plan_ass_mens'];
    	$table[] = array("nom_banque"=>$plan_nombanque,"montant"=>$plan_montant,"taux"=>$plan_taux,"duree"=>$plan_duree,"mens"=>$plan_mens);
    }
     
    //---- Tableau des durées et tableau des totaux
    $durees = array();
    foreach($table as $cle => $enregistrement) {
        $durees[] = $enregistrement["duree"];
    }
    array_unique($durees); // on dédoublonne les durées 
    sort($durees);
    $totaux = array_fill_keys($durees, 0);
     
    //---- Durées appliquées à tous les établissement
    $durees_etab = array();
    foreach ($table as $cle => $enregistrement)
    {
     $etablissement = $enregistrement["nom_banque"];
     foreach($durees as $duree)
     {
      $durees_etab[$etablissement][$duree] = 0;
     }
    }
     
    echo '
    <table border="0" style="width:100%;height:25px" cellspacing="2">
    	<tr>
    		<td style="width:200px;height:25px"><b>Organismes</b></td>
    		<td style="width:80px;height:25px"><b>Montant</b></td>
    		<td style="width:80px;height:25px"><b>Taux</b></td>';
    		foreach($durees as $duree)
    		{
    			echo '<td style="width:80px;height:25px"><b>'.$duree.' mois</b></td>';
    		}
    	echo '
    	</tr>';
     
    	foreach ($table as $cle => $enregistrement)
    	{
    	echo '
    	<tr>';
    		$nom_banque = $enregistrement["nom_banque"];
    		$montant    = $enregistrement["montant"];
    		$taux       = $enregistrement["taux"];
    		$duree2     = $enregistrement["duree"];
    		$mensualite = $enregistrement["mens"];
     
    		echo '
            <td style="width:200px">'.$nom_banque.'</td>
    		<td style="width:80px">'.$montant.'</td>
    		<td style="width:80px">'.$taux.' %</td>';
     
    		foreach($durees_etab[$nom_banque] as $duree =>$valeur)
    		{
    			if ($duree == $duree2){$contenu = round(($montant*($taux/100)*bcpow((1+($taux/100)),$duree,2))/(bcpow((1+($taux/100)),$duree,2)-1), 2);}
    			else 
    			{
    				if ($duree < $duree2)	{$contenu = round(($montant*($taux/100)*bcpow((1+($taux/100)),$duree,2))/(bcpow((1+($taux/100)),$duree,2)-1), 2);}
    				else {$contenu = "0";}
    			}
    			$totaux[$duree] += $contenu;
    			echo '
    			<td style="width:80px;height:25px">'.$contenu.' €</td>';
    		}
    	echo '
    	</tr>';
    	}
     
    	echo '
    	<tr><td style="width:360px;height:25px" colspan="3">&nbsp;</td>';foreach($totaux as $duree => $total) {echo '<td style="width:80px"><hr></td>'; } echo '</tr>
    	<tr>
    		<td style="width:360px;height:25px" colspan="3">Totaux des Prêts simulés</td>';
    		foreach($totaux as $duree => $total) 
    		{
    			echo '<td style="width:80px;height:25px">'.$total.'</td>'; /// Cumul des mensualités de la colonne
    		} 
    	echo '
    	</tr>
    	<tr>
    		<td style="width:360px;height:25px">Endettement aprés intervention</td>';
    		foreach($totaux as $duree => $total) 
    		{
    			echo '<td style="width:80px;height:25px">-</td>'; /// Cumul des mensualités de la colonne
    		}
    	echo '
    	</tr>
    	<tr>
    		<td style="width:360px;height:25px">Lissage des prês simulés</td>';
    		foreach($totaux as $duree => $total) 
    		{
    			echo '<td style="width:80px;height:25px">-</td>'; /// Cumul des mensualités de la colonne
    		}
    	echo '		
    	</tr>
    	<tr>
    		<td style="width:360px;height:25px">Endettement aprés Lissage %</td>';
    		foreach($totaux as $duree => $total) 
    		{
    			echo '<td style="width:80px;height:25px">-</td>'; /// Cumul des mensualités de la colonne
    		}
    	echo '
    	</tr>
    </table>
    Merci à toi Celira, également à Badaze et très bonne journée à vous deux.

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Points : 183
    Points
    183
    Par défaut
    Bonsoir,

    Je me permets de faire un petit up car j'ai toujours le pb des durées égales qui s'affiche en double ou en triple, etcccc.

    Merci de votre aide

  11. #11
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Normalement, ça devrait être géré ici (ligne 28) : array_unique($durees); // on dédoublonne les durées.
    Essaye de faire un var_dump($durees); avant et après cette ligne pour vérifier ce qu'il se passe.
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Points : 183
    Points
    183
    Par défaut
    Merci de ton aide Celira :

    Avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    var_dump($durees);
    array_unique($durees); // on dédoublonne les durées 
    var_dump($durees);
    j'obtiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    array(3) { [0]=> string(3) "288" [1]=> string(3) "288" [2]=> string(3) "288" } array(3) { [0]=> string(3) "288" [1]=> string(3) "288" [2]=> string(3) "288" }
    Bonne nuit.

  13. #13
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    1- @kaolivier
    C'est gentil de dire "Bonne nuit"... mais tu vois bien que les doublons n'ont pas été supprimés.
    Alors : qu'en déduis-tu ???
    Rien... Apparemment...

    (bien dormi ? )

    Il faudrait, au minimum, récupérer et se servir du résultat !!
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $durees = array_unique($durees); // on REMPLACE l'array initial par celui SANS doublons

    • array_unique() : "extrait du tableau...." (sous-entendu : dans un AUTRE tableau)

    N.B. Il ne faut pas confondre avec le fonctionnement de sort(), ou shuffle() (par exemple), qui n'a pas besoin d'être "récupéré".


    2- @Celira
    Rassure-toi : j'avais vu cette ligne, mais ne l'avais pas capté non plus.
    Ce sont les var_dump qui m'ont fait me questionner, et mis sur la piste !


    3- CELA DIT, je doute que ce soit en SUPPRIMANT des résultats que l'affichage du tableau sera correct !
    Ce ne serait pas plutôt des ADDITIONS à faire ?? (quoi que je n'ai pas trop compris cherché à comprendre ce que tu veux obtenir au final)
    Et encore : dans le tableau, on voit que ce sont 2 banques différentes.
    Il faudrait certainement pousser la réflexion un peu plus loin...
    Dernière modification par Invité ; 11/04/2018 à 09h11.

  14. #14
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Citation Envoyé par jreaux62 Voir le message
    Il faudrait, au minimum, récupérer et se servir du résultat !!
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    $durees = array_unique($durees); // on REMPLACE l'array initial par celui SANS doublons
    Poukram ! Et moi qui pariait sur un truc tordu du genre nombre stocké sur forme de chaine et un est "42" alors que l'autre est "42 ".
    Citation Envoyé par jreaux62 Voir le message
    2- @Celira
    Rassure-toi : j'avais vu cette ligne, mais ne l'avais pas capté non plus.
    Ce sont les var_dump qui m'ont fait me questionner, et mis sur la piste !
    Je serais vachement plus rassurée si ce n'était pas moi qui avait la boulette à l'origine
    ~Celira part se cacher sous la moquette~
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Points : 183
    Points
    183
    Par défaut
    Bonjour :-D

    Merci a vous deux, vous avez solutionné un problème qui m'a bouffé plusieurs nuits...

    Excellente journée à vous, même si nous sommes sous la pluie dans le Sud.

  16. #16
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Points : 183
    Points
    183
    Par défaut
    Re bonjour a tous,

    J'ai crié victoire trop vite, car j'ai un souci que j'ai mal exposé depuis le début.

    Si l'on reprend n'importe quel credit dans mon tableau de départ, exemple Cofidis, pour lequel on aurait une durée de 34mois MAIS qui ne démarrerait pas a aujourd'hui, mais par exemple dans 10mois, pour durer les 34mois suivants ?

    comment pourrions nous interpreter ce differé dans la somme des mensualités dans le tri final s'il vous plait?

    Sachant que j'aurai un champ qui indiquera le delai de différé dans ma base (duree_diff=10 pour notre exemple).
    -> J'aurai donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    	$table[] = array("nom_banque"=>$plan_nombanque,"montant"=>$plan_montant,"taux"=>$plan_taux,"diff"=>$plan_diff,"duree"=>$plan_duree,"mens"=>$plan_mens,"taux_ass"=>$plan_ass_taux,"mens_ass"=>$plan_ass_mens_1);
    Mais aprés comment interpréter le reste du script sachant que la durée de Cofidis ne démarre pas a 0 mais a partir de duree_diff ?

    Merci pour toute votre aide.
    Olivier

  17. #17
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Je peux me tromper mais j'aurais tendance à régler ça dans la requête SQL, cette complexité de calcul, moi.
    Mais pour cela, il faudrait qu'on connaisse toute la structure de ta base et ce qu'elle recouvre avec un exemple bidon.
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  18. #18
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Points : 183
    Points
    183
    Par défaut
    Voici une image :du resultat final, sauf que je n'ai pas pu inserer un crédit qui contient un différé de 15ans par exemple dans cette image, cela correspond au PTZ que l'on trouve en haut a droite de l'image dont la date de commencement est a partir de 15ans et sa durée est de 10ans.
    Nom : tableau_credit.jpg
Affichages : 261
Taille : 197,9 Ko

    Voila une copie ecran de la table :
    Nom : table_credit.jpg
Affichages : 232
Taille : 43,1 Ko

    il faut donc que je puisse rajouter la ligne du PTZ dans le tableau du PLAN DE FINANCEMENT

    Voici mon code de base réactualisé, sachant que j'ai une erreur sur le calcul du taux de surendettement :
    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
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
     
    $derclient = mysql_query("SELECT * FROM `".$sufftable."dem_immo_plan` where planmontant<>'0.00' and idCLIENT='$client'");
    $table   = array();
    while($Dcl = mysql_fetch_array($derclient, MYSQL_ASSOC))
    {
    	$id=$Dcl['idPLAN'];
    	$plan_nombanque=$Dcl['plannature'];
    	if ($plan_nombanque=="1"){$plan_nombanque="Prêt Taux Fixe";}
    	if ($plan_nombanque=="2"){$plan_nombanque="Prêt Mixte";}
    	if ($plan_nombanque=="3"){$plan_nombanque="Prêt DUO";}
    	if ($plan_nombanque=="4"){$plan_nombanque="Prêt Taux Variable";}
    	if ($plan_nombanque=="5"){$plan_nombanque="Crédit Relais";}
    	if ($plan_nombanque=="6"){$plan_nombanque="Pret In fine";}
    	if ($plan_nombanque=="7"){$plan_nombanque="Soulte";}
    	if ($plan_nombanque=="8"){$plan_nombanque="Remere";}
    	if ($plan_nombanque=="9"){$plan_nombanque="Prêt 1% Employeur";}
    	if ($plan_nombanque=="10"){$plan_nombanque="Caution Crédit Logement";}
    	if ($plan_nombanque=="11"){$plan_nombanque="PEL";}
    	if ($plan_nombanque=="12"){$plan_nombanque="CEL";}
    	if ($plan_nombanque=="13"){$plan_nombanque="PAS";}
    	if ($plan_nombanque=="14"){$plan_nombanque="CDAI";}
    	if ($plan_nombanque=="15"){$plan_nombanque="Pret BRASSEUR";}
    	if ($plan_nombanque=="16"){$plan_nombanque="Crédit Participatif";}
    	if ($plan_nombanque=="17"){$plan_nombanque="Autre Garantie";}
    	if ($plan_nombanque=="18"){$plan_nombanque="Autre Caution";}
    	$plan_montant=$Dcl['planmontant'];
    	$plan_taux=$Dcl['plantaux'];
    	$plan_diff=$Dcl['plandiff'];
    	$plan_duree=$Dcl['planduree'];
    	$plan_mens=$Dcl['planmens'];
    	$plan_ass_taux=$Dcl['planasstaux'];
    	$plan_ass_qte=$Dcl['planassqte'];
    	$plan_ass_taux_c=$Dcl['planasstauxc'];
    	$plan_ass_qte_c=$Dcl['planassqtec'];
     
    	$table[] = array("nom_banque"=>$plan_nombanque,"montant"=>$plan_montant,"taux"=>$plan_taux,"diff"=>$plan_diff,"duree"=>$plan_duree,"mens"=>$plan_mens,"taux_ass"=>$plan_ass_taux,"qte_ass"=>$plan_ass_qte,"taux_ass_c"=>$plan_ass_taux_c,"qte_ass_c"=>$plan_ass_qte_c);
    }
     
    //---- Tableau des durées et tableau des totaux
    $durees = array();
    foreach($table as $cle => $enregistrement) {$durees[] = $enregistrement["duree"];}
    //array_unique($durees); // on dédoublonne les durées 
    $durees = array_unique($durees);
     
    sort($durees);
     
    $totaux = array_fill_keys($durees, 0);
     
    $endett_T = array_fill_keys($durees, 0);
     
     
    //---- Durées appliquées à tous les établissement
    $durees_etab = array();
    foreach ($table as $cle => $enregistrement)
    {
     $etablissement = $enregistrement["nom_banque"];
     foreach($durees as $duree)
     {
      $durees_etab[$etablissement][$duree] = 0;
     }
    }
     
    echo '
    <table border="0" style="width:100%;height:25px" cellspacing="2">
    	<tr>
    		<td style="width:200px;height:25px"><b>Organismes</b></td>
    		<td style="width:80px;height:25px"><b>Montant</b></td>
    		<td style="width:80px;height:25px"><b>Duree</b></td>
    		<td style="width:120px;height:25px"><b>Taux/Intérêts</b></td>
    		<td style="width:80px;height:25px"><b>ADI</b></td>
    		<td style="width:80px;height:25px"><b>TOT.Ass</b></td>';
    		foreach($durees as $duree)
    		{
    			echo '<td style="width:80px;height:25px"><b>'.$duree.' mois</b></td>';
    		}
    	echo '
    	</tr>';
     
    	foreach ($table as $cle => $enregistrement)
    	{
    	echo '
    	<tr>';
    		$nom_banque = $enregistrement["nom_banque"];
    		$montant    = $enregistrement["montant"];
    		$taux       = $enregistrement["taux"];
    		$duree2     = $enregistrement["duree"];
    		$mensualite = $enregistrement["mens"];
     
    		$taux_ass  = $enregistrement["taux_ass"];
    		$taux_ass_c  = $enregistrement["taux_ass_c"];
    		$qte_ass  = $enregistrement["qte_ass"];
    		$qte_ass_c  = $enregistrement["qte_ass_c"];
     
    		$mensualite = $montant*($taux/100/12)/(1-pow((1+$taux/100/12),(-$duree2)));
    		$cout = round(($mensualite * $duree2) - $montant, 2);
     
    		$mensualite_ass = ($montant*($qte_ass/100))*($taux_ass/100/12)/(1-pow((1+$taux_ass/100/12),(-$duree2)))/12;
    		$mensualite_ass_c = ($montant*($qte_ass_c/100))*($taux_ass_c/100/12)/(1-pow((1+$taux_ass_c/100/12),(-$duree2)))/12;
    		$tot_mens_ass = round($mensualite_ass + $mensualite_ass_c, 2);
     
    		$totass = round($mensualite_ass * $duree2, 2);
     
    		echo '
            <td style="width:200px">'.$nom_banque.'</td>
    		<td style="width:80px">'.$montant.'</td>
    		<td style="width:80px; color:grey">'.$duree2.'</td>
    		<td style="width:120px; color:grey">'.$taux.'%/'.$cout.'€</td>
    		<td style="width:80px; color:grey">'.$tot_mens_ass.'€</td>
    		<td style="width:80px; color:grey">'.$totass.'€</td>';
     
     
    		foreach($durees_etab[$nom_banque] as $duree =>$valeur)
    		{
    			if ($duree <= $duree2){
    				$contenu_cre = $montant*($taux/100/12)/(1-pow((1+$taux/100/12),(-$duree2)));
    				//echo '[Mens Crédit : '.$contenu_cre.']';
    				$contenu_ass = $montant*($qte_ass/100)*($taux_ass/100/12)/(1-pow((1+$taux_ass/100/12),(-$duree2)))/12;
    				//echo '[Mens Ass EMP : '.$contenu_ass.']';
    				$contenu_ass_c = $montant*($qte_ass_c/100)*($taux_ass_c/100/12)/(1-pow((1+$taux_ass_c/100/12),(-$duree2)))/12;
    				//echo '[Mens Ass CO-EMP : '.$contenu_ass_c.']';
    				$contenu = round(($contenu_cre+$contenu_ass+$contenu_ass_c), 2);
    				$contenu_taux = round(((($contenu + $totch) / $totrev) * 100), 2);
    				//echo $contenu_taux;
    			}
    			else {$contenu = "0";}
     
    			$totaux[$duree] += $contenu;
    			$endett_T[$duree] += $contenu_taux;
     
    			echo '
    			<td style="width:80px;height:25px">'.$contenu.' €</td>';
    		}
    	echo '
    	</tr>';
    	}
    	echo '
    	<tr><td style="width:640px;height:25px" colspan="6">&nbsp;</td>';foreach($totaux as $duree => $total) {echo '<td style="width:80px"><hr></td>'; } echo '</tr>
    	<tr><td style="width:640px;height:25px" colspan="6">Totaux des Prêts simulés</td>';foreach($totaux as $duree => $total) {echo '<td style="width:80px;height:25px">'.$total.'</td>';} echo '</tr>
    	<tr><td style="width:640px;height:25px" colspan="6">Endettement aprés intervention</td>';foreach($endett_T as $duree => $endett) {echo '<td style="width:80px;height:25px">'.$endett.'%</td>'; } echo '</tr>
    	<tr><td style="width:640px;height:25px" colspan="6">Lissage des prês simulés</td>';foreach($totaux as $duree => $total) {echo '<td style="width:80px;height:25px">'.$liss.'</td>';}	echo '</tr>
    	<tr><td style="width:640px;height:25px" colspan="6">Endettement aprés Lissage %</td>';foreach($totaux as $duree => $total) {echo '<td style="width:80px;height:25px">'.$liss_endet.'</td>';}echo '</tr>
     
    </table>';
    Merci pour toute l'aide apportée
    Olivier

  19. #19
    Membre émérite
    Avatar de badaze
    Homme Profil pro
    Chef de projets info
    Inscrit en
    Septembre 2002
    Messages
    1 412
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Chef de projets info
    Secteur : Transports

    Informations forums :
    Inscription : Septembre 2002
    Messages : 1 412
    Points : 2 522
    Points
    2 522
    Par défaut
    Ceci n'est pas une bonne pratique. On n'est pas limité en nombre de noms de variables donc ne jamais réutiliser une variable pour y stocker quelque chose qui n'a rien à voir avec sa définition initiale.

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if ($plan_nombanque=="1"){$plan_nombanque="Prêt Taux Fixe";}

    Tu peux avantageusement remplacer tous tes if par un tableau et y accéder avec $plan_nombanque ce qui allège le code.
    Cela ne sert à rien d'optimiser quelque chose qui ne fonctionne pas.

    Mon site : www.emmella.fr

    Je recherche le manuel de l'Olivetti Logos 80B.

  20. #20
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    653
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 653
    Points : 183
    Points
    183
    Par défaut
    Bonsoir Badaze,

    Je vais d'abord attendre de l'aide pour solutionner mon problème et ensuite j'irai étudier les tableaux selon ton conseil, merci a toi.

Discussions similaires

  1. Réponses: 1
    Dernier message: 10/03/2014, 12h02
  2. [MySQL] Intercallage et affichage avec des données issues de plusieurs tables SQL
    Par vinceom92 dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 02/03/2014, 14h37
  3. filtre pour trier des données
    Par glasgow dans le forum Servlets/JSP
    Réponses: 3
    Dernier message: 10/08/2009, 09h30
  4. Trier des données issues d'une formule
    Par jarault dans le forum Excel
    Réponses: 5
    Dernier message: 09/04/2008, 21h53
  5. Réponses: 3
    Dernier message: 05/05/2006, 11h41

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