les calculs ?

Eléphant du PHP | 76 Messages

12 mai 2006, 19:15

bonjour savez vous si il y as moeyn de passez ce code la en php completement sachant que j'utilise des champ text dynamique car avec le javascript ca ne marche pas merci d'avance
<SCRIPT LANGUAGE="JavaScript"> 
function somm(valeur) { 
var val = valeur.value; 

if(isNaN(val)) { 
alert(val + " n'est pas un nombre !"); 
valeur.value = ""; 
} 

else { 
var s=0; 
for (i=1;i<=1; i++) 
if (document.getElementById('id'+i).value == "") s +=0; 
else s += parseFloat(document.getElementById('id'+i).value); 
document.monform.somme.value = s*23+',00 €'; 
} 
} 
</script> 

<FORM name="monform"> 
<?for ($i=1; $i<=1; $i++)  echo '<input  type="text" size=2 name="id'.$i.'" value="1" onkeyup="somm(this);" >'; ?> 
<p>=<input  type="text" method=GET action=# value="" name="somme" > 
<input type=button action=# value="Envoyer">

</form> 

Mammouth du PHP | 19672 Messages

12 mai 2006, 20:17

Bien sur que ça marche, à condition d'avoir un code logique et sans erreurs. Et tu ne pourras pas avoir les mêmes effets purement en PHP.

Ton formulaire pose problème : les attributs action et method sont strictement réservés à la balise <form>

Ensuite quand tu pointe sur un élément de formulaire avec getElementById, ça fonctionnera si, et seulement si, l'élément visé possède un attribut id.

Corrigé de ton code :
le JavaScript
<script type="text/javascript">
function somm(valeur)
{
    var val = valeur.value;

    if(isNaN(val))
    {
        alert(val + " n'est pas un nombre !");
        valeur.value = "";
    }
    else
    {
        var s=0;
        for (var i = 1; i <= 1; i++)
        {
            var identifiant = 'id'+ i;
            if (document.getElementById(identifiant).value == "")
            {
                s +=0;
            }
            else
            {
                s += parseFloat(document.getElementById(identifiant).value);
            }
            document.monform.somme.value = s * 23 +',00 €';
        }
    }
}
</script>
Le formulaire
<form name="monform" action="#" method="GET">
<?php
for($i = 1; $i <= 1; $i++)
{
?>
  <input  type="text" size=2 name="id<?php echo($i); ?>" id="id<?php echo($i); ?>" value="1" onkeyup="somm(this.value);" >
<?php
}
?>
  <p>=<input  type="text" value="" name="somme" >
  <input type="button" value="Envoyer">
</form>
Alors j'ai pas tout corrigé, juste le plus gros pour que ça marche, mais note qu'il reste encore du nettoyage à faire coté HTML.
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 76 Messages

12 mai 2006, 21:17

ok merci mais du faite que ces monform cela ne derange en rien pour plusieurs text form ? le javascript va bien detecter chaque champ text et sans pb comme tu as fait ?

Merci tu es vraiment trop fort (et les chevilles gonflats lol)
en tout cas merci d'avance

Mammouth du PHP | 19672 Messages

12 mai 2006, 21:45

As-tu essayé ? :-*
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 76 Messages

12 mai 2006, 22:16

oui jai essayer ton code mais cela ne marche pas peut etre que j'ai mal fait mis tout dans le meme fichier,j'ai bien fait oupas l'erreur est la suivante :
undefined nest pas  un nombre
le code que j'ai recopier est le suivant :
<script type="text/javascript"> 
function somm(valeur) 
{ 
    var val = valeur.value; 

    if(isNaN(val)) 
    { 
        alert(val + " n'est pas un nombre !"); 
        valeur.value = ""; 
    } 
    else 
    { 
        var s=0; 
        for (var i = 1; i <= 1; i++) 
        { 
            var identifiant = 'id'+ i; 
            if (document.getElementById(identifiant).value == "") 
            { 
                s +=0; 
            } 
            else 
            { 
                s += parseFloat(document.getElementById(identifiant).value); 
            } 
            document.monform.somme.value = s * 23 +',00 €'; 
        } 
    } 
} 
</script> 
<form name="monform" action="#" method="GET"> 
<?php 
for($i = 1; $i <= 1; $i++) 
{ 
?> 
  <input  type="text" size=2 name="id<?php echo($i); ?>" id="id<?php echo($i); ?>" value="1" onkeyup="somm(this.value);" > 
<?php 
} 
?> 
  <p>=<input  type="text" value="" name="somme" > 
  <input type="button" value="Envoyer"> 
</form> 
mais j'ai tout mis dans le meme fichier
voila mercide tes eclaircies

Eléphant du PHP | 76 Messages

12 mai 2006, 22:18

autre chose je ne voudrais pas quil y est un bouton envoyer disont des que lon rentre la quantité ca calcul directement tu vois ce que je veux dire comme dans mon premier code

Eléphant du PHP | 76 Messages

12 mai 2006, 22:28

le mieux pour comprendre ce que je veux faire cet de visiter ce lien
http://www.carpoduo.net/pascal/album/
tu rentre dans les courses tu chii de mettre au panier et ensuite tu fait voir panier et cest la que c coince
Merci encore

Mammouth du PHP | 19672 Messages

12 mai 2006, 22:53

ok je vois : le total ne se met pas à jour : mais là, c'est du texte et non un champ de formulaire : il faut donc utiliser innerHTML pour modifier la valeur affichée. Il faudra quand même éventuellement mettre ce total dans un champ caché en plus, mais à la limite, tu as le prix et le nombre, le calcul peut être refait à la confirmation de commande.

Ce que je n'ai pas corrigé dans le code :

remplacer l'attribut name de la balise form par un attribut id ave la même valeur.
Faire la même chose avec le champ somme sauf que tu peux laisse name en + (id="somme" name="somme"

Ensuite, dans le JavaScript, remplacer :
document.monform.somme.value = s * 23 +',00 €'; 
par
var total = s * 23 +',00 €';
document.forms['monform'].elements['somme'].value = total; 
Codez en pensant que celui qui maintiendra votre code est un psychopathe qui connait votre adresse :axe:

Eléphant du PHP | 76 Messages

13 mai 2006, 08:38

tient javais jamais entendu parler de innerHTML il ferai koi ce petit code ?et comment on sen sert

Merci encore et encore

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

13 mai 2006, 09:54

Cemice >> cela permet de modifier directement le contenu html d'un élement dans la page. Essaye ce bout de code :)

Code : Tout sélectionner

<textarea onKeyUp="document.getElementById('count').innerHTML = this.value.length + ' caractère(s) tapé(s)'"></textarea> <br><span id="count"></span>
Cyrano >> c'est une autre façon de l'écrire, mais ca ne devrait rien changer comme modif ;)
L'erreur est dans l'appel à la fonction : elle attends un objet en argument (pour pouvoir faire le .value) et c'est une valeur qui lui est passée :

Code : Tout sélectionner

// il faut onkeyup="somm(this);" // au lieu de onkeyup="somm(this.value);"

Eléphant du PHP | 76 Messages

14 mai 2006, 11:08

en faite jai fait comme cela ca marche bien regarde et dit moi ce que tu en pense
function calculerPrix(champs, span) {
var prix;
prix = champs * 10.00;
prix = prix + ',00 &euro;';
document.getElementById(span).innerHTML = prix;
}
function calculerTotal(form, span) {
var photo$compt;
var total;
id = form.id.value * 10.00;

total = Number(id) + Number(cartons_vin2) + Number(cartons_vin3);
document.getElementById(span).innerHTML = '&nbsp;' + total + '&euro;';
}
// ]]> -->
</script>";
echo"<input type=\"text\" name=\"photo$compte\" id=\"photo$compte\" size=\"2\" maxlength=\"3\" onBlur=\"calculerPrix(this.value, 'affichage_prix-photo$compte')\" value=\"1\" /></label></p>";
echo"<span id=\"affichage_prix-photo$compte\">&nbsp;&nbsp;10.00&euro;</span>";
maintenant il me reste plus qu'a mettre ca dans un tableau pour que cela ne sefface pas en cas qu'il veut revoir les photo mais la je me demande bien comment faire lol