Les sessions et l'ajax

Résolu
Saramery -  
saramery Messages postés 4 Date d'inscription   Statut Membre Dernière intervention   -
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 .

9 réponses

Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
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
0
saramery Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
 
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
0
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
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
0
saramery Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
 
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>';
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
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;
}
0
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
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\')">';
0
saramery Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
 
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
0
Alain_42 Messages postés 5361 Date d'inscription   Statut Membre Dernière intervention   894
 
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
0
saramery Messages postés 4 Date d'inscription   Statut Membre Dernière intervention  
 
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 ;
}
}
0