11480 sujets

JavaScript, DOM et API Web HTML5

Bonjour à tous,
Je suis débutant en javascript et j'essaye de créer une alerte dans ma petite application php.

Le contexte : Un utilisateur rentre des valeurs via un formulaire, de là je met en place une alerte lui indiquant si sa rétrocession est inférieur ou supérieur à 56.
J'utilise des variables php que je passe via des input type"hidden", ici je les déjà remplies, dans mon appli elles seront renseignées par la bdd.

voici le code :
la partie php/html
<?php 
$prix_materiel=15500; 
$taux_ri=44.12; 
$frais1=0;
$frais2=0;
$tva1=1317.50;
$tva2=0;

?>
<form action="" method="post" enctype="multipart/form-data" name="" id="formulaireFinancement" class="formulaire">
<input type="hidden" name="prix_materiel" id="prix_materiel" value="<?php echo $prix_materiel; ?>">
<input type="hidden" name="taux_ri" id="taux_ri" value="<?php echo $taux_ri; ?>">
<input type="hidden" name="frais1" id="frais1" value="<?php echo $frais1; ?>">
<input type="hidden" name="frais2" id="frais2" value="<?php echo $frais2; ?>">
<input type="hidden" name="tva1" id="tva1" value="<?php echo $tva1; ?>">
<input type="hidden" name="tva2" id="tva2" value="<?php echo $tva2; ?>">


<input type="text" name="montant_2" id="montant_2"  class="input_form">
<input type="text" name="montant_subvention" id="montant_subvention" class="input_form">
<input type="text" name="deduction_base" id="deduction_base" onblur="RetroCession()" class="input_form">


la partie javascript
<script>
function RetroCession()
{
var retro=parseFloat(document.getElementById("formulaireFinancement").elements['montant_2'].value);
if (!isNaN (retro))
{
var montant_2 = parseFloat(document.getElementById("formulaireFinancement").elements['montant_2'].value);
var deduction_base = parseFloat(document.getElementById("formulaireFinancement").elements['deduction_base'].value);
var montant_subvention = parseFloat(document.getElementById("formulaireFinancement").elements['montant_subvention'].value);
var prix_materiel = parseFloat(document.getElementById("formulaireFinancement").elements['prix_materiel'].value); 
var tvanpr = parseFloat(document.getElementById("formulaireFinancement").elements['tva1'].value); 
var taux_ri = parseFloat(document.getElementById("formulaireFinancement").elements['taux_ri'].value);
var tva_percue = parseFloat(document.getElementById("formulaireFinancement").elements['tva2'].value);
var frais1 = parseFloat(document.getElementById("formulaireFinancement").elements['frais1'].value);
var tva_net = (tvanpr)+(tva_percue) ; // debug ok c'est number
var apport_net = (montant_2)-(tva_net) ; // debug ok c'est number
var total1 = (prix_materiel)+(frais1) ; // debug ok c'est number
var total2 = (tvanpr)+(montant_subvention)+(deduction_base) ; // debug ok c'est number
var base_defisc = (total1)-(total2) ; // debug ok c'est number
var montant_ri = (base_defisc)*(taux_ri) ; // debug ok c'est number
var retro_ok = 56 ; // debug ok c'est number
var retrocession = (apport_net/montant_ri)*10000 ; // debug ok c'est number
var retrocession_1 = (retrocession) ;
//alert("la rétrocession 1 est de : "+retrocession);
//var result = (typeof montant_subvention === 'number');


   if (retrocession_1 < retro_ok)
    {
        alert("ATTENTION votre rétrocession est inférieur à 56%. Elle est de : "+retrocession+" %");
        //alert("Votre retrocession est de : "+retrocession+" %.");
    }
   else
    {
        alert("Votre rétrocession est de : "+retrocession+" %.");
        //alert("Votre retrocession 1 net est de : "+retrocession_1);
    }
}else
{
alert("Vous devez entrer un chiffre, en utilisant le . comme séparateur");
}
}</script>


Donc mon problème est que quand j'utilise cette méthode (en remplissant déjà mes variables php, j'ai bien mon réusltat, si je les remplies via la bdd j'ai un NaN.
J'ai effectué des débugs avec Typeof et toutes mes variables sont "true".
Je n'y comprend plus rien.

Merci de votre aide.
parce que tu essayes surement d'ajouter un string dans un int.. dans ta base, la champ doit etre un int et tu dois lui envoyer du texte..
Bonjour,
C'est réglé, en fait j'ai vérifié mes entrées saisies et comme il se peu qu'il y ai une saisie vide alors NaN....

du coup j'ai rajouté :

if(document.getElementById("formulaireFinancement").elements['montant_subvention'].value == "")
{
	var montant_subvention = 0;
}
else
{
var montant_subvention = parseFloat(document.getElementById("formulaireFinancement").elements['montant_subvention'].value);
}



Ca fonctionne, enfin.
Merci pour vos réponses.
Sinon en trois ligne :

var montant = document.getElementById("formulaireFinancement").elements['montant_subvention'].value;
var montant_subvention  = 0;
(montant != "" && montant > 0) ? montant = montant_subvention  : montant_subvention = 0;

Modifié par JENCAL (03 Apr 2018 - 15:53)