Bonsoir,svp je suis entrain de terminer mon sujet de PFA et c'est la dernière semaine mais je suis bloqué dans une partie qui conserne le calcul d'un score à partir d'une formule contenant des coefficient et des données sélectionner de ma base de données de l'application. alors le calcul toujours me donne une résultat incorrecte et je prends pas à savoir d'ou venant le probleme. Au premier lieu, les coefficients sont ajouté à la base par un formulaire de type input et se sont des reels donc j'ai mets le type text de input ,dans la base je l'ai déclarer comme réels et lorsqu'il sont ajouter dans la base j'ajoute un forçage de type (floatval) pour les faire convertir en float.
je ne maitrise pas bien la langage de php5 c'est pourquoi je ne comprend pas d'ou vient exactement le probleme.
voila le code de calcul de score:

public function calcul_score_tech($c,$p)around{  $bonb="select * from candexttech  where id_tech_ext='".$_SESSION["id_can"]."' ";around $obj2=$c->query($bonb);  if ($obj2->rowCount()==0) return "impo " ; else { $row=$obj2->fetch(PDO ::FETCH_ASSOC);  $b= $row["bonus_b"]; }around around $bondip="select * from candexttech  where id_tech_ext='".$_SESSION["id_can"]."' ";around $obj2=$c->query($bondip);  if ($obj2->rowCount()==0)aroundreturn "impo " ; else { $row=$obj2->fetch(PDO ::FETCH_ASSOC);  $d= $row["bonus_dip"]; }around //ajouter around $choixma="select * from candexttech";around $obj2=$c->query ($choixma); around   if ($obj2->rowCount()==0)aroundreturn "impo " ; else { $row=$obj2->fetch(PDO ::FETCH_ASSOC);  $choixma= $row["choix"];}aroundif ($choixma=='mpRITEL') around{around $coef1="select * from coef_ritel ";around  $obj2=$c->query($coef1);  if ($obj2->rowCount()==0)aroundreturn "impo " ; else { $row=$obj2->fetch(PDO ::FETCH_ASSOC);  $coef1= $row["coef_moy_1a"];}around around  $coef2="select * from coef_ritel ";around  $obj2=$c->query($coef2);  if ($obj2->rowCount()==0)aroundreturn "impo " ;else { $row=$obj2->fetch(PDO ::FETCH_ASSOC);  $coef2= $row["coef_moy_2a"];}around around $coef3="select * from coef_ritel ";around  $obj2=$c->query($coef3);  if ($obj2->rowCount()==0)aroundreturn "impo " ;else { $row=$obj2->fetch(PDO ::FETCH_ASSOC);  $coef3= $row["coef_moy_3a"];}aroundaround$moybac="select * from candexttech ";around  $obj2=$c->query($moybac);  if ($obj2->rowCount()==0)aroundreturn "impo " ; else { $row=$obj2->fetch(PDO ::FETCH_ASSOC);  $moybac= $row["moy_b"];}aroundaround$coefbac="select * from coef_ritel ";around  $obj2=$c->query($coefbac);  if ($obj2->rowCount()==0)aroundreturn "impo " ;else { $row=$obj2->fetch(PDO ::FETCH_ASSOC);  $coefbac= $row["coef_bac"];}aroundaround$nbratt=$p['ratt1']+$p['ratt2']+$p['ratt3'];around$nbred=$p['redoub1']+$p['redoub2']+$p['redoub3'];aroundaround $score=( ($coef1*$p['moy1'])+($coef2*$p['moy2'])+ ($coef3*$p['moy3'])+ ($coefbac*$moybac)-(2*$nbratt) ) * (1-(0.1 * $nbred));around $tech="update candexttech SET score= '$score' where id_tech_ext='".$_SESSION["id_can"]."'" ;around   if($c->query($tech))   {return "score ajoute  avec succes";}else return "impossible score  ";

j'espere bien que vous pouvez m'aidez? :( et merci d'avance

5 réponses


Est-ce qu'il serait possible de refaire ton indentation, parce que ce que tu as envoyé est légèrement inexploitable.

sirine
Auteur
public function calcul_score_tech($c,$p)
{  $bonb="select * from candexttech  where id_tech_ext='".$_SESSION["id_can"]."' ";
 $obj2=$c->query($bonb);  if ($obj2->rowCount()==0) return "impo " ; else { $row=$obj2->fetch(PDO ::FETCH_ASSOC);  $b= $row["bonus_b"]; }

 $bondip="select * from candexttech  where id_tech_ext='".$_SESSION["id_can"]."' ";
 $obj2=$c->query($bondip);  if ($obj2->rowCount()==0)
return "impo " ; else { $row=$obj2->fetch(PDO ::FETCH_ASSOC);  $d= $row["bonus_dip"]; }
 //ajouter 
 $choixma="select * from candexttech";
 $obj2=$c->query ($choixma); 
   if ($obj2->rowCount()==0)
return "impo " ; else { $row=$obj2->fetch(PDO ::FETCH_ASSOC);  $choixma= $row["choix"];}
if ($choixma=='mpRITEL') 
{
 $coef1="select * from coef_ritel ";
  $obj2=$c->query($coef1);  if ($obj2->rowCount()==0)
return "impo " ; else { $row=$obj2->fetch(PDO ::FETCH_ASSOC);  $coef1= $row["coef_moy_1a"];}

  $coef2="select * from coef_ritel ";
  $obj2=$c->query($coef2);  if ($obj2->rowCount()==0)
return "impo " ;else { $row=$obj2->fetch(PDO ::FETCH_ASSOC);  $coef2= $row["coef_moy_2a"];}

 $coef3="select * from coef_ritel ";
  $obj2=$c->query($coef3);  if ($obj2->rowCount()==0)
return "impo " ;else { $row=$obj2->fetch(PDO ::FETCH_ASSOC);  $coef3= $row["coef_moy_3a"];}

$moybac="select * from candexttech ";
  $obj2=$c->query($moybac);  if ($obj2->rowCount()==0)
return "impo " ; else { $row=$obj2->fetch(PDO ::FETCH_ASSOC);  $moybac= $row["moy_b"];}

$coefbac="select * from coef_ritel ";
  $obj2=$c->query($coefbac);  if ($obj2->rowCount()==0)
return "impo " ;else { $row=$obj2->fetch(PDO ::FETCH_ASSOC);  $coefbac= $row["coef_bac"];}

$nbratt=$p['ratt1']+$p['ratt2']+$p['ratt3'];
$nbred=$p['redoub1']+$p['redoub2']+$p['redoub3'];

 $score=( ($coef1*$p['moy1'])+($coef2*$p['moy2'])+ ($coef3*$p['moy3'])+ ($coefbac*$moybac)-(2*$nbratt) ) * (1-(0.1 * $nbred));
 $tech="update candexttech SET score= '$score' where id_tech_ext='".$_SESSION["id_can"]."'" ;
   if($c->query($tech))     {return "score ajoute  avec succes";}else return "impossible score  "; 
}

Ayant que peu d'informations au sujet de ton application, je ne peux que te donner quelques conseilles

Revoie encore une fois ton indentation qui pour moi pose déjà un problème.
Un code mal indenté est source d'erreurs.

Essai de décomposer ton calcule en reprenant chaque variables récupéré pour vérifier d'abord que chaques variable à été lue correctement de ta base de donnée avant même d'envoyer un calcule aussi complexe.

Je pense aussi que tes lignes de requêtes SQL SELECT sont redondant et tu peux factoriser en quelques lignes.
D'autant plus que tu envoies chaque fois un SELECT * alors que tu ne récupère que quelques informations.
Sélectionnes les champs que tu as besoin uniquement, pour éviter une surcharge de MYSQL.

Je vois également que tu crées 2 variable en début de code : $b et $c qui finalement ne sont pas utilisé par la suite dans ta fonction.

Pour ton indentation je vois celle-ci, est-ce correct ?

public function calcul_score_tech($c,$p){
    $bonb="select * from candexttech  where id_tech_ext='".$_SESSION["id_can"]."' ";
    $obj2=$c->query($bonb);  

    if ($obj2->rowCount()==0) 
        return "impo ";
    else { 
        $row = $obj2->fetch(PDO ::FETCH_ASSOC);
        $b = $row["bonus_b"]; 
    }

    $bondip="select * from candexttech where id_tech_ext='".$_SESSION["id_can"]."' ";
    $obj2=$c->query($bondip);

    if ($obj2->rowCount()==0)
        return "impo " ; 
    else { 
        $row=$obj2->fetch(PDO ::FETCH_ASSOC); 
        $d= $row["bonus_dip"];
    }

    //ajouter 
    $choixma="select * from candexttech";
    $obj2=$c->query ($choixma); 

    if ($obj2->rowCount()==0)
        return "impo " ; 
    else { 
        $row=$obj2->fetch(PDO ::FETCH_ASSOC);
        $choixma= $row["choix"];
    }

    if ($choixma=='mpRITEL') {
        $coef1="select * from coef_ritel ";
        $obj2=$c->query($coef1);

        if ($obj2->rowCount()==0)
            return "impo " ; 
        else { 
            $row=$obj2->fetch(PDO ::FETCH_ASSOC);  
            $coef1= $row["coef_moy_1a"];
        }

        $coef2="select * from coef_ritel ";
        $obj2=$c->query($coef2);

        if ($obj2->rowCount()==0)
            return "impo ";
        else {
            $row=$obj2->fetch(PDO ::FETCH_ASSOC);
            $coef2= $row["coef_moy_2a"];
        }

        $coef3="select * from coef_ritel ";
        $obj2=$c->query($coef3);

        if ($obj2->rowCount()==0)
            return "impo ";
        else {
            $row=$obj2->fetch(PDO ::FETCH_ASSOC);
            $coef3= $row["coef_moy_3a"];
        }

        $moybac="select * from candexttech ";
        $obj2=$c->query($moybac);

        if ($obj2->rowCount()==0)
            return "impo ";
        else {
            $row=$obj2->fetch(PDO ::FETCH_ASSOC);
            $moybac= $row["moy_b"];
        }

        $coefbac="select * from coef_ritel ";
        $obj2=$c->query($coefbac);

        if ($obj2->rowCount()==0)
            return "impo ";
        else {
            $row=$obj2->fetch(PDO ::FETCH_ASSOC);
            $coefbac= $row["coef_bac"];
        }

        $nbratt=$p['ratt1']+$p['ratt2']+$p['ratt3'];
        $nbred=$p['redoub1']+$p['redoub2']+$p['redoub3'];

        $score=( ($coef1*$p['moy1'])+($coef2*$p['moy2']) + ($coef3*$p['moy3']) + ($coefbac*$moybac) - (2*$nbratt) ) * (1 - (0.1 * $nbred) );
        $tech="update candexttech SET score= '$score' where id_tech_ext='".$_SESSION["id_can"]."'" ;
        if($c->query($tech)){
            return "score ajoute  avec succes";
        }
        else return "impossible score  ";

    }
}
sirine
Auteur

c'est le meme cas avec ce code :( mais concernant les informations manquant: ce code est à propos d'un calcul de score à partir d'un choix de master (ici:mpRITEL) et j'ai juste essayé avec un seul type pour le tester mais j'ai pas trouvé d'ou venant ce problème. tu peux me poser des question pour que tu peut mieux comprendre mon code?

sirine
Auteur

voila la fonction d'insertion des coefficients:

public function coef_ritel($c,$p)
 {$c1=floatval($p["coef1"]);
 $c2=floatval($p["coef2"]);
 $c3=floatval($p["coef3"]);
 $c4=floatval($p["coefbac"]);

     $coef="insert into coef_ritel values ('".$c1."','".$c2."','".$c3."','".$c4."','".$p["coef4"]."','".$p["coef5"]."','".$p["coef6"]."','".$p["coef7"]."','".$p["coef8"]."','".$p["coef9"]."','".$p["coef10"]."')";
    if($c->query($coef)) return header("location:succes.html"); else return "impossible "; }