Transformer un PHP en JS

Résolu
Templier Nocturne Messages postés 9989 Statut Membre -  
Templier Nocturne Messages postés 9989 Statut Membre -
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. Aucun
     
    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+
    0
  2. hamzafes Messages postés 258 Statut Membre 54
     
    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
    0
  3. Templier Nocturne Messages postés 9989 Statut Membre 1 107
     
    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 :(
    0
  4. hamzafes Messages postés 258 Statut Membre 54
     
    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
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Templier Nocturne Messages postés 9989 Statut Membre 1 107
     
    \o/fantastique, merci beaucoup hamzafes !!!! \o/
    0
  7. Templier Nocturne Messages postés 9989 Statut Membre 1 107
     
    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 :/
    0
  8. hamzafes Messages postés 258 Statut Membre 54
     
    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
    0
  9. Templier Nocturne Messages postés 9989 Statut Membre 1 107
     
    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
    0
  10. hamzafes Messages postés 258 Statut Membre 54
     
    170! est égale à 7.25741561531E+306 je pense pas que la mémoire peut supporter plus que ça.
    0
  11. Templier Nocturne Messages postés 9989 Statut Membre 1 107
     
    :S

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