Les sessions et l'ajax

Résolu/Fermé
Saramery - 11 févr. 2010 à 10:56
saramery Messages postés 4 Date d'inscription jeudi 11 février 2010 Statut Membre Dernière intervention 12 février 2010 - 12 févr. 2010 à 17:52
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 dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
11 févr. 2010 à 14:02
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 jeudi 11 février 2010 Statut Membre Dernière intervention 12 février 2010
11 févr. 2010 à 15:34
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 dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
11 févr. 2010 à 16:00
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 jeudi 11 février 2010 Statut Membre Dernière intervention 12 février 2010
11 févr. 2010 à 16:17
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 dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
11 févr. 2010 à 17:19
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 dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
11 févr. 2010 à 17:21
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 jeudi 11 février 2010 Statut Membre Dernière intervention 12 février 2010
11 févr. 2010 à 18:00
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 dimanche 3 février 2008 Statut Membre Dernière intervention 13 février 2017 894
11 févr. 2010 à 19:06
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 jeudi 11 février 2010 Statut Membre Dernière intervention 12 février 2010
12 févr. 2010 à 17:52
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