Warning: Division by zero in G:\wamp\www\www\optracom\detection-

gerald33 Messages postés 4 Statut Membre -  
Fallentree Messages postés 2445 Statut Membre -
bonjour a tout le monde, je ne maitrise pas encore la programmation en php, et j'ai écris un scrip pour calculer cette formule:
$rlf = (7 * (array_sum($bh) / count($bh))) / (10 * 8 * $K * nombrefreq($ma_list));
j'utilise les données de deux bases de données différentes.
je me suis heurté a deux problèmes majeurs: premièrement toutes les valeurs que j'affiche donnent zéro, et j'ai reçu les messages d'erreurs suivant:

Notice: Undefined index: date_fin in G:\wamp\www\www\optracom\detection-2\calculer-le-rlf-des-cellules.php on line 362

Warning: Division by zero in G:\wamp\www\www\optracom\detection-2\calculer-le-rlf-des-cellules.php on line 69

aidez moi svp

2 réponses

  1. mpmp93 Messages postés 2931 Date d'inscription   Statut Membre Dernière intervention   1 343
     
    Bonjour,

    N'étant pas devant votre micro, on est bien incapables de trouver l'erreur.

    Avant calcul de votre formule mettez ceci:

    echo "<pre>";
    echo "bh: ".  $bh . "\n";
    echo "K: ".  $K. "\n";
    echo "ma_list: ".  $ma_list. "\n";
    echo "</pre>";


    et regardez les valeurs des données injectées dans la formule.
    0
  2. gerald33 Messages postés 4 Statut Membre
     
    mrc mais les erreurs persistent toujours, quant je fais un error_reporting(1); la il ny a plus de problème mais toutes les valeurs sont a 0.

    voici le code complet:

    <?php
    error_reporting(1);
    session_start() ;

    //$_SESSION['date_debut'] = $_POST['date_debut'];
    //$_SESSION['date_fin'] = $_POST['date_fin'];

    $bdd = new PDO('mysql:host=127.0.0.1;dbname=alcatel', 'root', '',array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));

    $bdd2 = new PDO('mysql:host=172.21.91.71;dbname=alcatel', 'sam', 'sam',array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));

    function nombrefreq($ma_liste)
    {
    //calcule la différence entre les fréquence ds le MA ds un intervale
    $intervalle = substr ($ma_liste, 1, (strlen($ma_liste)-1));
    $tab = explode('-', $intervalle);
    $ma_liste = $tab[1] - $tab[0];

    return $ma_liste;
    }

    function RLFcellule($name, $ddeb, $dfin, $bdd, $bdd2 ){
    try {
    $sql = 'SELECT MC380A, MC380B FROM bh_R110_1 WHERE (date_debut_mesure BETWEEN :vddeb AND :vdfin ) AND CELL_NAME LIKE :vname ORDER BY date_debut_mesure ASC';
    $sql1 = 'SELECT ma_liste FROM table_ma_list WHERE Nom LIKE :vname';
    $sql2 = 'SELECT Nb_hopping_TCH ,Nb_hopping_TS FROM valeur_K WHERE cellule LIKE :vname';

    $req = $bdd2->prepare($sql);
    $req1 = $bdd->prepare($sql1);
    $req2 = $bdd->prepare($sql2);
    } catch (Exception $e) {
    die('Erreur : ' . $e->getMessage());
    }
    try {
    $req->execute(array(
    'vddeb' => $ddeb,
    'vdfin' => $dfin,
    'vname' => $name
    ));
    $bh = array();
    while ($donnee = $req->fetch()) {
    if(count($donnee)>0){
    $mc380a[] = $donnee['MC380A'] ;
    $mc380b[] = $donnee['MC380B'] ;
    $bh[] = (($donnee['MC380A'] + $donnee['MC380B']) / 3600 );
    }
    else{
    $bh[] = 0;
    }
    }
    $req->closeCursor();
    $req1->execute(array(
    'vname' => $name
    ));
    while ($donnee1 = $req1->fetch()) {
    $ma_list = $donnee1['ma_liste'] ;
    }
    $req1->closeCursor();
    $req2->execute(array(
    'vname' => $name
    ));
    while ($donnee2 = $req2->fetch()) {
    $Nb_hopping_TCH = $donnee2['Nb_hopping_TCH'] ;
    $Nb_hopping_TS = $donnee2['Nb_hopping_TS'] ;
    $K = $donnee2['Nb_hopping_TCH'] / $donnee2['Nb_hopping_TS'];
    }
    $req2->closeCursor();

    $rlf = (7 * (array_sum($bh) / count($bh))) / (10 * 8 * $K * nombrefreq($ma_list));

    return $rlf;

    }
    catch (Exception $e) {
    die('Erreur : ' . $e->getMessage());
    }
    }
    ?>

    <?php
    // On ne s'interesse qu'aux cellules voisnes qui ont un % de flux de HO > 2 %
    // fabriquons la liste de toutes les cellules cibles

    $liste_cible = array();

    $liste_cible[] = $_SESSION['donnees_a_traiter']["source_cible1"]["nom_cible"] ;

    for($count = 1; $count<count($_SESSION['donnees_a_traiter']);$count++){

    if(!in_array($_SESSION['donnees_a_traiter']["source_cible".($count+1)]["nom_cible"], $liste_cible)){
    $liste_cible[] = $_SESSION['donnees_a_traiter']["source_cible".($count+1)]["nom_cible"];
    }

    }
    // echo count($liste_cible);

    // calculons le pourcentage total de flux entrant vers ces cellules

    $_SESSION["cible_pourcentage"] = array();

    for($i=0;$i<count($liste_cible);$i++)
    {
    $nom_cible = $liste_cible[$i];
    $_SESSION["cible_pourcentage"]["nom_cible".($i+1)] = $nom_cible ;

    // on parcourt toutes leslignes qu ont pour cellule cible cette cellule

    $liste_flux = array();

    for($j = 0; $j<count($_SESSION['donnees_a_traiter']); $j++)
    {
    if(strcmp($nom_cible,$_SESSION['donnees_a_traiter']["source_cible".($j+1)]["nom_cible"])==0)
    {
    $liste_flux[] = $_SESSION['donnees_a_traiter']["source_cible".($j+1)]["pourcentage"] ;
    }
    }

    $_SESSION["cible_pourcentage"]["pourcentage".($i+1)] = array_sum($liste_flux) / count($liste_flux) ;
    }

    //Affichage des résultats

    ?>
    <center> RLF des cellules</center>
    <br/>
    <div style="width: 100%; height: 300px; overflow-y: scroll; display: none;">
    <table style="width: 99%;">
    <tr style="background-color: orange;">
    <td><center>

    </center>
    </td>
    <td><center>
    Nom de la cellule
    </center>
    </td>

    <td><center>
    % Flux HO
    </center>
    </td>
    </tr>

    <?php

    $_SESSION["cellule_RLF"] = array() ;
    $indice = 1 ;
    for($count =0; $count < count($liste_cible); $count++){
    if($_SESSION["cible_pourcentage"]["pourcentage".($count+1)]>=0){
    ?>
    <tr style="background-color: skyblue;">
    <td>
    <center>
    <?php echo $count + 1; ?>
    </center>
    </td>
    <td>
    <center>
    <?php
    echo $_SESSION["cible_pourcentage"]["nom_cible".($count+1)] ;
    $_SESSION["cellule_RLF"]["nom_cellule".$indice] = $_SESSION["cible_pourcentage"]["nom_cible".($count+1)] ;
    $indice++;
    ?>
    </center>
    </td>
    <td>
    <center>
    <?php echo $_SESSION["cible_pourcentage"]["pourcentage".($count+1)] ;

    ?>
    </center>
    </td>

    </tr>
    <?php
    }

    else{
    ?>
    <tr>
    <td>
    <center>
    <?php echo $count + 1; ?>
    </center>
    </td>
    <td>
    <center>
    <?php echo $_SESSION["cible_pourcentage"]["nom_cible".($count+1)] ; ?>
    </center>
    </td>
    <td>
    <center>
    <?php echo $_SESSION["cible_pourcentage"]["pourcentage".($count+1)] ; ?>
    </center>
    </td>

    </tr>
    <?php

    }
    }
    ?>
    </table>
    </div>
    <?php
    // on ne s'interesse maintenant qu'aux cellules qui ont un % HO > 2 %
    //ces cellules st dans le tableau $_SESSION["cellule_RLF"] ;

    //seuil du RLF (RLF > 6)

    for($k=1; $k<=40; $k++){

    if($rlf = RLFcellule($_SESSION["cellule_RLF"]["nom_cellule".$k], $_SESSION['date_debut'], $_SESSION['date_fin'], $bdd, $bdd2))
    {
    $_SESSION['cellule_RLF']['RLF'.$k] = $rlf;
    }
    // else{
    // $_SESSION['cellule_RLF']['RLF'.$k] = '0' ;
    // }
    }
    //echo count ($_SESSION['cellule_RLF']);
    ?>
    <div style="width: 90%;">
    <table style="width: 100%;">
    <tr>
    <td>
    <center>
    Nom des cellules
    </center>
    </td>
    <td>
    <center>
    RLF des cellules
    </center>
    </td>
    </tr>

    <?php
    for($i=0; $i<50; $i++){
    if((strlen($_SESSION["cellule_RLF"]["nom_cellule".($i+1)]))!=0){
    ?>
    <tr >
    <td><center>
    <?php echo $_SESSION["cellule_RLF"]["nom_cellule".($i+1)]; ?>
    </center></td>
    <td><center>
    <?php echo 100*$_SESSION['cellule_RLF']['RLF'.($i+1)]; ?>
    </center></td>
    </tr>
    <?php
    }
    }
    ?>
    merci d'avance
    0
    1. Fallentree Messages postés 2445 Statut Membre 210
       
      nombrefreq($ma_list) qui est nulle ou $K ou count($bh) ????
      0
    2. Fallentree Messages postés 2445 Statut Membre 210
       
      function nombrefreq($ma_liste)
      {
      //calcule la différence entre les fréquence ds le MA ds un intervale
      $intervalle = substr ($ma_liste, 1, (strlen($ma_liste)-1));
      $tab = explode('-', $intervalle);
      $ma_liste = $tab[1] - $tab[0];

      return $ma_liste;
      }
      0
    3. Fallentree Messages postés 2445 Statut Membre 210
       
      $ma_liste est un string puis devient un entier ....
      Ca fait bizarre...

      echo "<pre>";
      echo "bh: ". $bh . "\n";
      echo "K: ". $K. "\n";
      echo "ma_list: ". $ma_list. " typeof ".gettype ($ma_list). " \n";
      echo "</pre>";
      0