Impossible d'exécuter une fonction php

Fermé
jamal - Modifié le 26 mars 2018 à 13:22
 jamal - 26 mars 2018 à 14:28
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.
A voir également:

2 réponses

yg_be Messages postés 23417 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 5 janvier 2025 Ambassadeur 1 557
Modifié le 26 mars 2018 à 13:23
Bonjour*

"j'arrive pas": message d'erreur, comportement inattendu?
0
<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
yg_be Messages postés 23417 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 5 janvier 2025 1 557 > jamal
26 mars 2018 à 13:41
obtiens-tu un message d'erreur, ou bien le code ne fait-il pas ce que tu attends?
0
aucune réponse, j'ai mis tout le code .

j'ai essayé d'exécuter par Ajax mais je sais pas comment faire.
0
Aucun message d'erreur, le script prend beaucoup de temps sans retourner un résultat.
je ne comprend pas pourquoi.
0
yg_be Messages postés 23417 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 5 janvier 2025 Ambassadeur 1 557
26 mars 2018 à 14:12
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
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