Transformer un PHP en JS

Résolu
Bonjour,

je suis embêté, j'aimerais limiter la charge du serveur en transférant tout le travail au client au lieu du serveur mais je ne sais pas comment faire

voilà le script :

<?php

function factorielle($valeur){
	$fact = 1;
	for($i = 1; $i <= $valeur; $i++)
		$fact *= $i;
	return $fact;
}

function combinaison($k, $n){
	return (factorielle($n) / (factorielle($k) * factorielle($n - $k)));
}

function maFonction($a, $b, $c){
	$resu = 0;
	for($k = $c + 1; $k <= $b; $k++){
		$temp = combinaison($k, $b);
		$temp *= pow((1/$a), $k);
		$temp *= pow((1 - 1/$a), $b - $k);
		
		$resu += $temp;
		
	}
	$resu = $resu * 100;
	$resu = 100 - $resu;
	return round($resu,3);
}

?>

<form action="#" method="post">
<?php
	if(empty($_POST))
	{?>
	a = <input type="text" name="a" /><br />
	b = <input type="text" name="b" /><br />
	c = <input type="text" name="c" /><br />
	<input type="submit" />
<?php
	}
	else
	{
	?>
	resultat = <input type="text" value="<?php echo maFonction($_POST['a'], $_POST['b'], $_POST['c']); ?>" /><br />
<?php } ?>
</form>


en espérant que quelqu'un pourra m'aider :)

10 réponses

  1. Salut,

    Tu peux réecrir tes fonctions en Js(ça diffère quasiment pas),concernant le formulaire tu peux faire quelque chose du genre

    function res()
    {
    return document.getElementByid('tonid').value
    }
    <a href="#" onclick="res()">Calcul</a>

    tu met l'id correspondant à tes champs de texte(<input id="tonid"...)

    Tu peux aussi faire si ça marche pas

    document.nomdetonform.tonid.value

    En tous cas le principe marchera,après à toi de stoquer ça dans des variables comme tu le désire.A+
    1. tu définis les mêmes fonctions en javascript, la syntaxe est presque la même (il suffit d'enlever les $ je crois)
      au chargement de la page tu appels t'es fonctions.

      Code

      <form action="#" method="post">
      a = <input type="text" id="a" onKeyUp="mettreAJour()" /><br />
      b = <input type="text" id="b" onKeyUp="mettreAJour()" /><br />
      c = <input type="text" id="c" onKeyUp="mettreAJour()" /><br />

      resultat = <input type="text" id="resultat" /><br />

      </form>

      <script language="javascript">

      function factorielle(valeur){
      fact = 1;
      for(i = 1; i <= valeur; i++)
      fact *= i;
      return fact;
      }

      function combinaison(k, n){
      return (factorielle(n) / (factorielle(k) * factorielle(n - k)));
      }

      function calculer(a, b, c){
      resu = 0;
      for(k = c + 1; k <= b; k++){
      temp = combinaison(k, b);
      temp *= Math.pow((1/a), k);
      temp *= Math.pow((1 - 1/a), b - k);

      resu += temp;

      }
      resu = resu * 100;
      resu = 100 - resu;

      return Math.round(resu,3);
      }

      function mettreAJour()
      {
      a=document.getElementById("a").value;
      b=document.getElementById("b").value;
      c=document.getElementById("c").value;

      document.getElementById("resultat").value=calculer(a,b,c);

      }

      </script>

      Allah mo3ine
      1. merci pour votre aide :)

        hamzafes, je ne comprend pas, ton script ne donne pas les mêmes résultats que le mien :S

        exemple, pour a=15,b=100 et c=2, je devrais obtenir 3.368 pourtant j'ai 100, j'ai regardé dans ton script mais je n'ai pas trouvée l'erreur :(
        1. 1- Remplaces la fonction mettreAJour par :

          function mettreAJour()
          {
          a=parseFloat(document.getElementById("a").value);
          b=parseFloat(document.getElementById("b").value);
          c=parseFloat(document.getElementById("c").value);

          document.getElementById("resultat").value=calculer(a,b,c);

          }

          2- Remplaces la ligne "return Math.round(resu,3)" par

          return resu.toFixed(3);

          Allah mo3ine
          1. par contre j'ai encore un problème que j'avais espérer résoudre avec JS... si b>170, le résultat est toujours "NaN" comment résoudre ce problème :/
            1. Tu peux vérifier les valeurs de a, b et c avant de faire le calcule, dans l'exemple ci-dessous si a ou b ou c est négatif alors j'affiche 0 sinon je calcule. C'est à toi de faire la condition qui te conviens.

              Exemple:

              function mettreAJour()
              {
              a=parseFloat(document.getElementById("a").value);
              b=parseFloat(document.getElementById("b").value);
              c=parseFloat(document.getElementById("c").value);

              if(a<0 || b<0 || c<0)
              document.getElementById("resultat").value=0;
              else
              document.getElementById("resultat").value=calculer(a,b,c);

              }

              Allah mo3ine
              1. nan, c'est pas un problème de condition, tout les nombres inférieurs à 170 fonctionnent mais à partir de 171, les résultat est NaN de même en PHP... je voudrais savoir comment faire pour qu'il prenne mes factorielles au dessus de 170
                1. 170! est égale à 7.25741561531E+306 je pense pas que la mémoire peut supporter plus que ça.
                  1. :S

                    quelqu'un sait insérer un script python dans une page web :D