Impossible d'exécuter une fonction php

jamal -  
 jamal -
Bonjour,

j'arrive pas à exécuter cette fonction qui appelle une autre fonction
merci de votre aide.

$link=mysqli_connect($servername,$username,$password,$dbname);
// Check connection
if (mysqli_connect_errno())
  {
  echo "Failed to connect to MySQL: " . mysqli_connect_error();
  }
  if (isset($_POST['button9'])) {
  
  $query = "SELECT * FROM Contrat Limit 1";

  if ($result = mysqli_query($link, $query)) {

        while ($row = mysqli_fetch_assoc($result)) {
         $a= $row["PrixHT"];
         $b=$row["Duree"];
         $c=$row["VR"];
         $d=$row["Redevance"];
      ECHO calc_rate($a,$b,$c,$d);
    }
    /* Libération des résultats */
    mysqli_free_result($result); 
}
}
/* Fermeture de la connexion */
mysqli_close($link); 




function calc_rate($pv, $payno,$RV, $pmt)


EDIT : Ajout des balises de code (la coloration syntaxique).
Explications disponibles ici : ICI

Merci d'y penser dans tes prochains messages.

2 réponses

  1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    Bonjour*

    "j'arrive pas": message d'erreur, comportement inattendu?
    0
    1. jamal
       
      <form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="POST">
      <p><input type="submit" name="reset" value="reset" >   <input type="submit" name="button9" value ="Payment Schedule" ></p>
      </form>


      <?php
      
      $servername = "localhost";
      $username = "root";
      $password = "";
      $dbname = "payment";
      
      $link=mysqli_connect($servername,$username,$password,$dbname);
      // Check connection
      if (mysqli_connect_errno())
        {
        echo "Failed to connect to MySQL: " . mysqli_connect_error();
        }
        if (isset($_POST['button9'])) {
        
        $query = "SELECT * FROM Contrat Limit 1";
      
        if ($result = mysqli_query($link, $query)) {
      
              while ($row = mysqli_fetch_assoc($result)) {
               $a= $row["PrixHT"];
               $b=$row["Duree"];
               $c=$row["VR"];
               $d=$row["Redevance"];
            ECHO calc_rate($a,$b,$c,$d);
          }
          /* Libération des résultats */
          mysqli_free_result($result); 
      }
      }
      /* Fermeture de la connexion */
      mysqli_close($link); 
      
      
      
      
      
      function calc_rate($pv, $payno,$RV, $pmt)
      {
      // check that required values have been supplied
      if (empty($pv)) {
         echo "<p class='error'>a value for PRINCIPAL is required</p>";
         exit;
      } // if
      if (empty($payno)) {
         echo "<p class='error'>a value for NUMBER of PAYMENTS is required</p>";
         exit;
      } // if
      if (empty($pmt)) {
         echo "<p class='error'>a value for PAYMENT is required</p>";
         exit;
      } // if
      if (($RV<0)) {
         echo "<p class='error'>RV must be > 0 </p>";
         exit;
      } 
      
      // now try and guess the value using the binary chop technique
      $GuessHigh   = (float)100;    // maximum value
      $GuessMiddle = (float)2.5;    // first guess
      $GuessLow    = (float)0;      // minimum value
      $GuessPMT    = (float)0;      // result of test calculation
      
      do {
         // use current value for GuessMiddle as the interest rate,
         // and set level of accurracy to 6 decimal places
         $GuessPMT = (float)calc_payment($pv, $payno, $GuessMiddle,$RV, 6);
      
         if ($GuessPMT > $pmt) {    // guess is too high
            $GuessHigh   = $GuessMiddle;
            $GuessMiddle = $GuessMiddle + $GuessLow;
            $GuessMiddle = $GuessMiddle / 2;
         } // if
      
         if ($GuessPMT < $pmt) {    // guess is too low
            $GuessLow    = $GuessMiddle;
            $GuessMiddle = $GuessMiddle + $GuessHigh;
            $GuessMiddle = $GuessMiddle / 2;
         } // if
      
         if ($GuessMiddle == $GuessHigh) break;
         if ($GuessMiddle == $GuessLow) break;
      
         $int = number_format($GuessMiddle, 9, ".", "");    // round it to 9 decimal places
         if ($int == 0) {
            echo "<p class='error'>Interest rate has reached zero - calculation error</p>";
            exit;
         } // if
      
      } while ($GuessPMT !== $pmt);
      
      return $int;
      
      } // calc_rate =======================================================================
      
      
      function calc_payment($pv, $payno, $int,$RV, $accuracy)
      {
      // check that required values have been supplied
      if (empty($pv)) {
         echo "<p class='error'>a value for PRINCIPAL is required</p>";
         exit;
      } // if
      if (empty($payno)) {
         echo "<p class='error'>a value for NUMBER of PAYMENTS is required</p>";
         exit;
      } // if
      if (empty($int)) {
         echo "<p class='error'>a value for INTEREST RATE is required</p>";
         exit;
      } // if
      if (($RV<0)) {
         echo "<p class='error'>RV must be > 0 </p>";
         exit;
      } 
      // now do the calculation using this formula:
      
      //******************************************
      //            INT * ((1 + INT) ** PAYNO)
      // PMT = PV * --------------------------
      //             ((1 + INT) ** PAYNO) - 1
      //******************************************
      $RV=$RV/pow((1+($int/100)),$payno);
      $int    = $int / 100;    // convert to a percentage
      $value1 = $int * pow((1 + $int), $payno);
      $value2 = pow((1 + $int), $payno) - 1;
      $pmt    = ($pv-$RV) * ($value1 / $value2);
      // $accuracy specifies the number of decimal places required in the result
      $pmt    = number_format($pmt, $accuracy, ".", "");
      
      return $pmt;
      
      } // calc_payment ====================================================================
      ?>
      
      </div>
      </body>
      </html>
      
      0
      1. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   1 588 > jamal
         
        obtiens-tu un message d'erreur, ou bien le code ne fait-il pas ce que tu attends?
        0
    2. jamal
       
      aucune réponse, j'ai mis tout le code .

      j'ai essayé d'exécuter par Ajax mais je sais pas comment faire.
      0
    3. jamal
       
      Aucun message d'erreur, le script prend beaucoup de temps sans retourner un résultat.
      je ne comprend pas pourquoi.
      0
  2. yg_be Messages postés 23437 Date d'inscription   Statut Contributeur Dernière intervention   Ambassadeur 1 588
     
    es-tu que ceci se comporte bien?
    do {
       // use current value for GuessMiddle as the interest rate,
       // and set level of accurracy to 6 decimal places
       $GuessPMT = (float)calc_payment($pv, $payno, $GuessMiddle,$RV, 6);
    
       if ($GuessPMT > $pmt) {    // guess is too high
          $GuessHigh   = $GuessMiddle;
          $GuessMiddle = $GuessMiddle + $GuessLow;
          $GuessMiddle = $GuessMiddle / 2;
       } // if
    
       if ($GuessPMT < $pmt) {    // guess is too low
          $GuessLow    = $GuessMiddle;
          $GuessMiddle = $GuessMiddle + $GuessHigh;
          $GuessMiddle = $GuessMiddle / 2;
       } // if
    
       if ($GuessMiddle == $GuessHigh) break;
       if ($GuessMiddle == $GuessLow) break;
    
       $int = number_format($GuessMiddle, 9, ".", "");    // round it to 9 decimal places
       if ($int == 0) {
          echo "<p class='error'>Interest rate has reached zero - calculation error</p>";
          exit;
       } // if
    
    } while ($GuessPMT !== $pmt);

    moi j'y ajouterais (dans la boucle)
    echo $pmt, $GuessPMT, $GuessHigh, $GuessMiddle, $GuessLow;
    0
    1. jamal
       
      le code ne comporte pas d'anomalie, je pense le problème est dans le passage des variables à la fonction de calcul.
      bon je vais tenter une autre piste, peut être par Ajax, mais je ne sais pas comment faire.
      merci beaucoup.
      0