Les sessions et l'ajax
Résolu
Saramery
-
saramery Messages postés 4 Statut Membre -
saramery Messages postés 4 Statut Membre -
Bonjour,
je sais pas comment expliquer mon problème mais je vais essayer d'être un peu claire :
j'ai un formulaire qui contient une liste déroulante des stagiaires et deux champs : le premier pour le coefficient et le deuxième pour le résultat et je récupère la note de chaque stagiaire sélectionné à partir de la liste déroulante pour la multiplier par le coefficient et le résultat s'affiche automatiquement dans le champs résultat.
la note de chaque stagiaire s'affiche à chaque sélection mais je peux pas l'utiliser pour calculer le résultat.
Merci d'avance de m'aider .
je sais pas comment expliquer mon problème mais je vais essayer d'être un peu claire :
j'ai un formulaire qui contient une liste déroulante des stagiaires et deux champs : le premier pour le coefficient et le deuxième pour le résultat et je récupère la note de chaque stagiaire sélectionné à partir de la liste déroulante pour la multiplier par le coefficient et le résultat s'affiche automatiquement dans le champs résultat.
la note de chaque stagiaire s'affiche à chaque sélection mais je peux pas l'utiliser pour calculer le résultat.
Merci d'avance de m'aider .
Configuration: Windows XP Firefox 3.5.7
9 réponses
-
Je ne vois pas le rapport avec les sessions ?
mais si tu récupéres la note du stagiaire sélectionné dans la liste par AJAX
je suppose a la réponse de ajax, que tu ecris la réponse dans l'input résultat par
document.nom_formulaire.nom_input_resultat.value=resultat;
il suffit que tu mettes juste avant:
var coef=document.nom_formulaire.nom_input_coef.value;
resultat=note*coef; //si la reponse de ajax est note -
Bonjour,
La note sélectionnée est celle du premier stagiaire sélectionné ,pour récupérer d'un autre stagiaire je dois actualiser la page. et si vous voulez je met mon code pour être plus clair -
pour récupérer d'un autre stagiaire je dois actualiser la page
donc ce n'est pas de l'ajax que tu fais mais tout simplement du php
donnes ta page on verra -
Bonjour,
voici mon code :
page : note.php
Code :
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 :
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 :
<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>'; -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
J'ai fait pas mal de modifs:
<?php // session_start(); inutile de passer par les sessions include('connexion.php'); $id_stg = $_POST['id_stg']; //$_POST car methode POST Ajax $requette_stg = mysql_query("SELECT * FROM stagiaire WHERE id_stg = '".$id_stg."'"); $resultat_stg = mysql_fetch_array ($select_stg_sql); $note=$resultat_stg['note']; //on envoie la réponse à la requette Ajax tout simplement par un echo echo $note; //$_SESSION['note'] = $select_stg['note']; ?>
et la page php qui inclue la page ajax.js: Code : <script language="javascript"> function calculresultat(){ // echo c'est du php $_SESSION ne peut être utilisé qu'en php, (variables Serveur ) //document.getElementById('nt').value = parseFloat(document.getElementById('coeff').value * echo $_SESSION['note'] ; ) var resultat=parseFloat(document.getElementById('coeff').value * document.getElementById('note').value; document.getElementById('nt').value=resultat; } </script> <?php 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>'; //j'ai mis l'appel du calcul sur la modif du coef echo '<td class="intitula"> coefficient: </td><td><input class="infose" type="texte" id="coeff" name="coeff" onKeyUp="calculresultat();"> </td>'; echo '</tr>'; echo '<tr>'; echo '<td class="intitula"> Resultat: </td><td> <input type="texte" id="nt" name="resultat" > </td>'; echo '</tr>'; echo '<tr >'; //j'ai modifie et remplace par un input readonly (donc non modifiable !) echo '<td style="text-align: right;">Note:<input class="infose" type="texte" id="note" name="note" readonly /> </td>'; echo '<td><input type="submit" name="button" value="Ajouter"/></td>'; echo '</tr>'; echo '</table>'; echo '</form>'; ?>
//Page : ajax.js function shownote(id_liste,id_ecrire){ xmlhttp=GetXmlHttpObject(); if (xmlhttp==null) { alert ("Browser does not support HTTP Request"); return; } var urla="note.php"; //urla=urla+"?id_stg="+stg; //urla=urla+"&sid="+Math.random(); //la c'etait pas correct il faut passer l'objet xmlhttp à la fonction qui va traiter la réponse sinon comment veut tu qu'elle sache quelle requette traiter en réponse xmlhttp.onreadystatechange=function() {stateChanged(xmlhttp,id_ecrire); //moi je prefere la methode POST http_request.open('POST', urla, true); //changer le type MIME de la requête pour envoyer des données avec la méthode POST , !!!! cette ligne doit etre absolument apres http_request.open('POST'.... http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); //on atteint l'objet a lire= le stagiaire selectionne dans la liste obj=document.getElementById(id_liste); data="id_stag="+obj.value; http_request.send(data); //en post on envoie les données ainsi } function stateChanged(xmlhttp,id_ecrire){ if (xmlhttp.readyState==4) { if (http_request.status == 200) { //il te manquait cette ligne //recup de la reponse du script php appele par ajax var note=xmlhttp.responseText; //on ecrit la note dans l'input note (qui est en readonly) document.getElementById(id_ecrire).value=note; } } } 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; } -
houps j'ai fais une erreur à cette ligne:
remplaces la par:
echo '<td class="intitula"> Stagiaire: </td><td ><select name="id_stg" onChange="javascript:shownote(this.value,\'note\')">';
-
BOnjour Alain,
Merci beaucoup pour l'effort et le temps que vous avez passé à m'aider.
je vais tester votre code et j'espère mettre mon sujet en résolu ,j'ai quelques erreurs je sais pas exactement la source.
Merci encore une fois -
j'avais pas testé, il restait plein d'erreurs, des copier coller de bout de code à moi sans changer des noms etc..
la page ajax.js:
function shownote(id_liste,id_ecrire){ xmlhttp=GetXmlHttpObject(); if (xmlhttp==null) { alert ("Browser does not support HTTP Request"); return; } var urla="note.php"; //urla=urla+"?id_stg="+stg; //urla=urla+"&sid="+Math.random(); //la c'etait pas correct il faut passer l'objet xmlhttp à la fonction qui va traiter la réponse sinon comment veut tu qu'elle sache quelle requette traiter en réponse xmlhttp.onreadystatechange=function() {stateChanged(xmlhttp,id_ecrire)}; //ERREUR LA //moi je prefere la methode POST xmlhttp.open('POST', urla, true); //changer le type MIME de la requête pour envoyer des données avec la méthode POST , !!!! cette ligne doit etre absolument apres http_request.open('POST'.... xmlhttp.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); //on atteint l'objet a lire= le stagiaire selectionne dans la liste obj=document.getElementById(id_liste); data="id_stg="+obj.value; xmlhttp.send(data); //en post on envoie les données ainsi } function stateChanged(xmlhttp,id_ecrire){ if (xmlhttp.readyState==4) { if (xmlhttp.status == 200) { //il te manquait cette ligne //recup de la reponse du script php appele par ajax var note=xmlhttp.responseText; //on ecrit la note dans l'input note (qui est en readonly) document.getElementById(id_ecrire).value=note; } } } 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; }
la page note.php:<?php include('connexion.php'); $id_stg = $_POST['id_stg']; //$_POST car methode POST Ajax $requette_stg = mysql_query("SELECT * FROM stagiaire WHERE id_stg = '".$id_stg."'"); $resultat_stg = mysql_fetch_array ($select_stg_sql); $note=$resultat_stg['note']; //on envoie la réponse à la requette Ajax tout simplement par un echo echo $note; ?>
la page :
<script language="javascript" src="ajax.js"></script> <script language="javascript"> function calculresultat(){ var resultat=document.getElementById('coeff').value * document.getElementById('note').value; //erreur la document.getElementById('nt').value=resultat; } function efface_old_resultats(id_note,id_res){ //a chaque changement dans la liste on efface le résultat precedent, car si on ne modifie pas le champ coef ça garde tout document.getElementById(id_note).value=''; document.getElementById(id_res).value=''; } </script> <?php 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" id="id_stg" onChange="javascript:shownote(\'id_stg\',\'note\'); efface_old_resultats(\'note\',\'nt\');">'; 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>'; //j'ai mis l'appel du calcul sur la modif du coef echo '<td class="intitula"> coefficient: </td><td><input class="infose" type="texte" id="coeff" name="coeff" onKeyUp="calculresultat();"> </td>'; echo '</tr>'; echo '<tr>'; echo '<td class="intitula"> Resultat: </td><td> <input type="texte" id="nt" name="resultat" > </td>'; echo '</tr>'; echo '<tr >'; //j'ai modifie et remplace par un input readonly (donc non modifiable !) echo '<td style="text-align: right;">Note:<input class="infose" type="texte" id="note" name="note" readonly /> </td>'; echo '<td><input type="submit" name="button" value="Ajouter"/></td>'; echo '</tr>'; echo '</table>'; echo '</form>'; } ?>
Mais l'inconvénient de l a méthode de calcul du résultat que je t'ai mis c'est que on est obligé de changer le coef à chaque fois.
il faudrait soit mettre l'appel de la fct calcul sur le onFocus de l'input resultat comme tu avait fait soit rajouter un bouton calculer -
Bonjour,
tout d'abord ,Merci Beaucoup Alain_42 et j'ai trouvé la solution
j'ai fait un petit changement :
dans le fichier ajax.js j'ai modifié la fonction stateChanged() comme suit :
function stateChanged()
{
if (xmlhttp.readyState==4)
{
document.getElementById('nt').value = parseFloat(document.getElementById('coeff').value) * xmlhttp.responseText ;
}
}