IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

AJAX Discussion :

[AJAX] Ajax et les sessions


Sujet :

AJAX

  1. #1
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 123
    Points : 55
    Points
    55
    Par défaut [AJAX] Ajax et les sessions
    Bonsoir,

    Merci de me donner un coup de pouce pour trouver la solution :
    j'utilise l'Ajax pour récupérer la note d'un stagiaire à chaque fois que je sélectionne un stagiaire et je dois garder cette note pour la multiplier par un coefficient et mettre le résultat dans un champs résultat.
    la sélection fonctionne très bien mais pour garder la note j'ai utilisé les sessions .
    mais la note récupéré est celle du premier stagiaire sélectionné.

    je veux récupérer la note de chaque stagiaire et la multiplier sans recharger la page.

    Merci d'avance pour votre aide.

  2. #2
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 123
    Points : 55
    Points
    55
    Par défaut
    Bonjour,
    voici mon code :

    page : note.php



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    session_start(); 
    include('connexion.php'); 
    $a = $_GET['a']; 
    $select_stg_sql = mysql_query("select * from stagiaire where id_stg = '".$a."'"); 
    $select_stg = mysql_fetch_array ($select_stg_sql); 
    $_SESSION['note'] = $select_stg['note'];
    Page : ajax.js

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    function shownote(stg) 
    { 
    xmlhttp=GetXmlHttpObject(); 
    if (xmlhttp==null) 
      { 
      alert ("Browser does not support HTTP Request"); 
      return; 
      } 
    var urla="note.php"; 
    urla=urla+"?a="+stg; 
    urla=urla+"&sid="+Math.random(); 
    xmlhttp.onreadystatechange=stateChanged; 
    xmlhttp.open("GET",urla,true); 
    xmlhttp.send(null); 
    } 
     
    function stateChanged() 
    { 
    if (xmlhttp.readyState==4) 
    { 
    document.getElementById('note').innerHTML=xmlhttp.responseText; 
    } 
    } 
     
    function GetXmlHttpObject() 
    { 
    if (window.XMLHttpRequest) 
      { 
      // code for IE7+, Firefox, Chrome, Opera, Safari 
      return new XMLHttpRequest(); 
      } 
    if (window.ActiveXObject) 
      { 
      // code for IE6, IE5 
      return new ActiveXObject("Microsoft.XMLHTTP"); 
      } 
    return null; 
    }


    et la page php qui inclue la page ajax.js:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    <script language="javascript"> 
    function calculresultat() 
    { 
     
    document.getElementById('nt').value = parseFloat(document.getElementById('coeff').value *  echo $_SESSION['note'] ;  ) 
     
    } 
    </script> 
     
     
    if (isset($_POST['action']) && $_POST['action'] == 'notejout') { 
    ); 
    $sql = 'INSERT INTO `*****` values ("id_stg","note","coeff","resultat" )'; 
     
     
            mysql_query($sql); 
     
                } 
        else {         
     
            echo '<form   method="post" enctype="multipart/form-data"  >'; 
     
     
            echo '<table  >'; 
     
            echo '<td class="intitula"> Stagiaire: </td><td ><select name="id_stg" 
             onChange="javascript:shownote(this.value)">'; 
            echo '<option value="" selected="selected"> Selectionnez un Stagiaire </option>'; 
        $selected_stagiaire_sql = mysql_query("SELECT * FROM stagiaire "); 
    while ($selected_stg =  mysql_fetch_array($selected_stagiaire_sql)) { 
    echo '<option value="'.$selected_stg['id_stg'].'"> '.$selected_stg['nom_stg']." ".$selected_stg['pren_stg'].' </option>';} 
    echo'</select>'; 
     echo'</td>'; 
            echo '</tr>'; 
     
            echo '<tr>'; 
            echo '<td class="intitula"> coefficient: </td><td><input class="infose" type="texte" id="coeff" name="coeff" > </td>'; 
            echo '</tr>'; 
            echo '<tr>'; 
            echo '<td class="intitula"> resultat: </td><td> 
            <input type="texte" id="nt" name="resultat" onFocus="calculresultat();" > </td>'; 
            echo '</tr>'; 
            echo '<tr >'; 
            echo '<td style="text-align: right;"><div id="note" ></div> </td>'; 
            echo '<td><input type="submit" name="button"  value="Ajouter"/></td>'; 
            echo '</tr>'; 
            echo '</table>'; 
     
            echo '</form>';

  3. #3
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Bonjour,
    Citation Envoyé par saramery Voir le message
    mais la note récupéré est celle du premier stagiaire sélectionné.
    ça ne serait pas dû à un problème de cache, sous IE essentiellement ?
    Si tu fais F5 après l'appel Ajax, la note attendue s'affiche-t-elle ?

    EDIT : ta variable xmlhttp est bien déclarée en globale ?

    A+

  4. #4
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 123
    Points : 55
    Points
    55
    Par défaut
    Citation Envoyé par E.Bzz Voir le message
    Bonjour,ça ne serait pas dû à un problème de cache, sous IE essentiellement ?
    Si tu fais F5 après l'appel Ajax, la note attendue s'affiche-t-elle ?

    EDIT : ta variable xmlhttp est bien déclarée en globale ?

    A+
    Bonjour,

    je travaille seulement sur firefox,

    oui quand je sélectionne un stagiaire, la note s'affiche mais pour l'utiliser dans le calcul je dois actualiser la page .

    oui il 'est bien déclaré et ça fonctionne .

    Merci pour le temps que vous passez à trouver la solution.

  5. #5
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Citation Envoyé par saramery Voir le message
    oui quand je sélectionne un stagiaire, la note s'affiche mais pour l'utiliser dans le calcul je dois actualiser la page .
    Alors c'est normal, puisque ta fonction utilise "en dur" la valeur PHP connue au moment de la génération de la page (et non après appel Ajax)
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $_SESSION['note']
    Il faut que tu modifies ta fonction Javascript pour qu'elle utilise à la place l'objet qui récupère la réponse Ajax, en l'occurrence
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById('note').innerHTML


    A+

  6. #6
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 123
    Points : 55
    Points
    55
    Par défaut
    Citation Envoyé par E.Bzz Voir le message
    Alors c'est normal, puisque ta fonction utilise "en dur" la valeur PHP connue au moment de la génération de la page (et non après appel Ajax)
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $_SESSION['note']
    Il faut que tu modifies ta fonction Javascript pour qu'elle utilise à la place l'objet qui récupère la réponse Ajax, en l'occurrence
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    document.getElementById('note').innerHTML


    A+
    Merci bien pour votre réponse ,et j'espère que vous m'expliquiez un peu plus parce que je sais pas où je mets le code que vous m'avez proposé.

  7. #7
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Je parle de cette fonction là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function calculresultat() 
    { 
     
    document.getElementById('nt').value = parseFloat(document.getElementById('coeff').value *  echo $_SESSION['note'] ;  ) 
     
    }
    qui pourrait devenir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function calculresultat() 
    { 
     
    document.getElementById('nt').value = parseFloat(document.getElementById('coeff').value, 10) *  parseFloat(document.getElementById('note').innerHTML, 10); 
     
    }
    A+

  8. #8
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 123
    Points : 55
    Points
    55
    Par défaut
    Citation Envoyé par E.Bzz Voir le message
    }[/code]qui pourrait devenir
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function calculresultat() 
    { 
     
    document.getElementById('nt').value = parseFloat(document.getElementById('coeff').value, 10) *  parseFloat(document.getElementById('note').innerHTML, 10); 
     
    }
    A+
    Merci beaucoup pour votre réponse ,et pour votre temps,
    j'ai essayé votre code mais il donne comme résultat :NAN
    et aussi merci de m'expliquer à quoi sert le 10

  9. #9
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Le "NaN" ( = Not A Number) c'est certainement que la fonction est déclenchée à un moment où une des 2 valeurs (note ou coeff) n'est pas alimentée (avant l'appel Ajax par exemple) : il faut peut être l'alimenter par défaut, contrairement à actuellement, ou encore ne pas déclencher la fonction tant que les 2 valeurs ne sont pas présentes.

    Le 10 c'est pour éviter un bug JavaScript : il s'agit de la base à utiliser pour la conversion.
    Dans les fonctions de la librairie math (parseInt, parseFloat etc.), si on ne précise pas cette base, Javascript utilise le premier caractère du premier paramètre pour "deviner" (mal) la base de conversion. Dans certains cas, la valeur retournée est alors une valeur octale et non décimale. En général, on y laisse pas mal de cheveux avant de trouver la source du problème

    A+

  10. #10
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 123
    Points : 55
    Points
    55
    Par défaut
    Citation Envoyé par E.Bzz Voir le message
    En général, on y laisse pas mal de cheveux avant de trouver la source du problème

    A+
    Merci beaucoup pour votre réponse et pour le temps que vous avez passé à m'aider.
    Je vais chercher où est la source du problème pour le mettre en résolu et j'éspere le faire plus vite pour ne pas laisser plus de cheveux .

    A+

  11. #11
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    13 474
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2007
    Messages : 13 474
    Points : 36 571
    Points
    36 571
    Par défaut
    Tu peux essayer quelque chose dans ce style
    Code javascript : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    function calculresultat() 
    { 
    if (!isNaN(document.getElementById('coeff').value) && !isNaN(document.getElementById('note').innerHTML))
      document.getElementById('nt').value = parseFloat(document.getElementById('coeff').value, 10) *  parseFloat(document.getElementById('note').innerHTML, 10); 
    else
      alert("Une des valeurs n'est pas un nombre !");
    }
    A+

  12. #12
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 123
    Points : 55
    Points
    55
    Par défaut
    Citation Envoyé par E.Bzz Voir le message
    Tu peux essayer ...code]
    A+
    Encore Merci beaucoup

  13. #13
    Membre du Club
    Inscrit en
    Septembre 2008
    Messages
    123
    Détails du profil
    Informations forums :
    Inscription : Septembre 2008
    Messages : 123
    Points : 55
    Points
    55
    Par défaut
    Bonjour,
    J'ai trouvé la solution , une simple modification dans le fichier ajax.js

    pour la fonction stateChanged()
    function stateChanged()
    {
    if (xmlhttp.readyState==4)
    {
    document.getElementById('nt').value = parseFloat(document.getElementById('coeff').value) * xmlhttp.responseText ;
    }
    }

    et merci beaucoup E.Bzz

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [AJAX] Ajax - Java - Fin de Session
    Par imhotep_zr7s dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 29/01/2009, 10h28
  2. Ajax et les sessions
    Par pafi76 dans le forum Langage
    Réponses: 1
    Dernier message: 22/11/2007, 10h07
  3. Réponses: 4
    Dernier message: 28/10/2007, 20h01
  4. [AJAX] Ajax et les sessions PHP
    Par webrider dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 31/05/2007, 15h44
  5. [AJAX] Ajax et variables de session php
    Par sorlok dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 30/05/2007, 16h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo