Page 1 sur 1

Perte variable de session

Posté : 09 déc. 2005, 00:48
par lord.anonymous
Bonsoir! Qui peut me dire pourquoi est ce que les variables de session ['classe'] et ['binome'] changent au cours de ce script?
<?php
session_start();

//inclusion des fichiers nécessaires
require("../log.php");

//Si la session n'existe pas (personne non identifiée), ou que l'utilisateur n'est pas le bon, renvoi à la page d'identification
if(!$_SESSION['classe']||!$_SESSION['binome']){
  echo 'Veuillez vous identifier.';
	header("location:connexion.htm");
}

//la session existe, la personne est identifiée
else{
//echo $_SESSION['classe'];
//echo $_SESSION['binome'];
$date = $_POST['date'];
$classe = $_POST['classe'];
$binome = $_POST['binome'];
$objectif = $_POST['objectif'];	
$conformes = $_POST['conformes'];
$rebuts = $_POST['rebuts'];
$commentaire = $_POST['commentaire'];
$conformes2 = $_POST['conformes2'];
$rebuts2 = $_POST['rebuts2'];
$commentaire2 = $_POST['commentaire2'];

// connection à la BDD
$link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
mysql_select_db($db) or die ('Erreur :'.mysql_error());

$select="UPDATE `suivi_pieces` SET `conformes` = '".$conformes."', `rebuts` = '".$rebuts."', `commentaires` = '".$commentaire."' WHERE (`date` ='".$date."'&&`classe` ='".$classe."'&&`rebuts` ='".$rebuts2."'&&`binome` ='".$binome."'&&`objectif` ='".$objectif."'&&`conformes` ='".$conformes2."'&&`commentaires` ='".$commentaire2."');";
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
$url="gestion3.php?objet=".$_SESSION['objet']."&piece=".$_SESSION['piece']."&phase=".$_SESSION['phase'];
echo '<font size="5" color="#339933">Les informations ont bien été modifiées';
}

?>
<html>
<head>
<title>Gestion production</title>
</head>
<body bgcolor="#99CCFF">
<p align="center"><a href="
<?php echo $url; ?>
">Retour</a>
<?php
//echo $_SESSION['classe'];
//echo $_SESSION['binome'];
?>
</body>
</html>


Au début j'ai les bonnes variables de session.
A la fin j'ai d'autres variables, mais normalement ça ne devrait pas changer??? Je ne comprends pas.
Pour information, j'ai réussi à détourner le problème, mais je ne comprends pas mon erreur.[/code]

Posté : 09 déc. 2005, 09:09
par Cyrano
Je n'ai pas encore vu pourquoi tes variables de sessions disparaissent, en revanche, une erreur m'a sauté aux yeux:
//...
if(!$_SESSION['classe']||!$_SESSION['binome']){
  echo 'Veuillez vous identifier.';
    header("location:connexion.htm");
} 
//...
Avec ce code, on va te voir revenir nous voir en nous demandant pourquoi tu as l'erreur "Warning , cannot send header etc..."

Tu ne peux rien envoyer vers le navigateur avant l'utilisation de la fonction header() : La formulation en outre est erronée et sort tout droit de JavaScript. Il faut essayer de ne pas mélanger , enlève le "location:" et ne laisse que le chemin du fichier.

Posté : 09 déc. 2005, 21:01
par Invité
Je n'ai pas encore vu pourquoi tes variables de sessions disparaissent, en revanche, une erreur m'a sauté aux yeux:
//...
if(!$_SESSION['classe']||!$_SESSION['binome']){
  echo 'Veuillez vous identifier.';
    header("location:connexion.htm");
} 
//...
Avec ce code, on va te voir revenir nous voir en nous demandant pourquoi tu as l'erreur "Warning , cannot send header etc..."

Tu ne peux rien envoyer vers le navigateur avant l'utilisation de la fonction header() : La formulation en outre est erronée et sort tout droit de JavaScript. Il faut essayer de ne pas mélanger , enlève le "location:" et ne laisse que le chemin du fichier.
Ok si tu veux mais là n'est pas le problème. Header fonctionne bien ici, je n'ai pas de message bidon pour le moment.
Mais la perte de la variable de session m'intrigue.

Posté : 09 déc. 2005, 21:21
par Truc
[ Header fonctionne bien ici, je n'ai pas de message bidon pour le moment.
Très étonnant étant donné que tu affiche (echo) juste avant !!

Autre chose bizarre, l'opérateur "et" en SQL est "AND" et non "&&".

Sinon tu as 4 lignes, en commentaires, sur les variables de session:
//echo $_SESSION['classe'];
//echo $_SESSION['binome']; 
la 1ere série affiche le bon contenu et le second affichage (en bas de page) est erroné, c'est bien cela ?

Posté : 09 déc. 2005, 22:12
par Invité
[ Header fonctionne bien ici, je n'ai pas de message bidon pour le moment.
Très étonnant étant donné que tu affiche (echo) juste avant !!

Autre chose bizarre, l'opérateur "et" en SQL est "AND" et non "&&".

Sinon tu as 4 lignes, en commentaires, sur les variables de session:
//echo $_SESSION['classe'];
//echo $_SESSION['binome']; 
la 1ere série affiche le bon contenu et le second affichage (en bas de page) est erroné, c'est bien cela ?
Oui c'est cela. C'est là que ça me dérange. Autrement pour le header, pour celui ci je n'ai pas testé, mais le répertoire est protégé par htaccess. donc normalement personne ne devrait y accéder. J'avoue que je n'ai pas testé celui là, je pensais à un autre header qui fait partie de mon script final. Pour le && en SQL, eh bien ça marche?!? J'ai toujours fait comme ça et pas de soucis jusque là.

A Cyrano: pour easyphp1.8, il faut la syntaxe suivant: header("location:page.htm"), et si je vire le location: ça foire. Et je ne comprends pas pourquoi tu dis que c'est codé Javascript?

Posté : 09 déc. 2005, 22:17
par lord.anonymous
Au fait les messages de Invité c'est moi, bien entendu.
Pour le Header, c'est rectifié mais le problème n'avait jamais apparu jusqu'ici! Je vais mettre mes pages à jour.

Posté : 10 déc. 2005, 01:33
par Truc
voila une proposition de correction, entre autre il manquait la fermeture des balises <p> et <font>, de plus un affichage (echo: message de confirmation) avant <HTML>:
<?php
session_start();

//inclusion des fichiers nécessaires
require("../log.php");

//Si la session n'existe pas (personne non identifiée), ou que l'utilisateur n'est pas le bon, renvoi à la page d'identification
if(!$_SESSION['classe'] && !$_SESSION['binome'])
{  
    header("location:connexion.htm");	
}
else //la session existe, la personne est identifiée
{
	//echo $_SESSION['classe'];
	//echo $_SESSION['binome'];
	$date = $_POST['date'];
	$classe = $_POST['classe'];
	$binome = $_POST['binome'];
	$objectif = $_POST['objectif'];    
	$conformes = $_POST['conformes'];
	$rebuts = $_POST['rebuts'];
	$commentaire = $_POST['commentaire'];
	$conformes2 = $_POST['conformes2'];
	$rebuts2 = $_POST['rebuts2'];
	$commentaire2 = $_POST['commentaire2'];
	
	// connection à la BDD
	$link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
	mysql_select_db($db) or die ('Erreur :'.mysql_error());
	
	$select="UPDATE `suivi_pieces` 
		SET `conformes` = '".$conformes."', `rebuts` = '".$rebuts."', `commentaires` = '".$commentaire."' 
		WHERE `date` ='".$date."' AND `classe` ='".$classe."' AND `rebuts` ='".$rebuts2."' AND `binome` ='".$binome."' 
		AND `objectif` ='".$objectif."' AND `conformes` ='".$conformes2."' AND `commentaires` ='".$commentaire2."'";
		
	$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
	
	$url="gestion3.php?objet=".$_SESSION['objet']."&piece=".$_SESSION['piece']."&phase=".$_SESSION['phase'];
		
	?>
	<html>
	<head>
	<title>Gestion production</title>
	</head>
	<body bgcolor="#99CCFF">	
		<p align="center">
			<font size="5" color="#339933">Les informations ont bien été modifiées</font>
			<br />
			<a href="<?php echo $url; ?>">Retour</a>	
		</p>
	</body>
	</html>
<?
	//echo $_SESSION['classe'];
	//echo $_SESSION['binome'];
}
?>
essaie avec ce code et dis nous si ça change quelque choses, a défaut le code est plus correct :wink:

Posté : 10 déc. 2005, 10:28
par lord.anonymous
Ok j'ai fait le test et ça marche. Curieux que ça perde les variables de session pour des balises html non refermées.
Autrement, j'ai fait encore autrement au final, avec une fonction header("location:$url").
<?php
session_start();

//inclusion des fichiers nécessaires
require("../log.php");

//Si la session n'existe pas (personne non identifiée), ou que l'utilisateur n'est pas le bon, renvoi à la page d'identification
if(!$_SESSION['classe']||!$_SESSION['binome']){
 	header("location:../connexion.htm");
}

//la session existe, la personne est identifiée
else{
$date = $_POST['date'];
$classe = $_POST['classe'];
$binome = $_POST['binome'];
$objectif = $_POST['objectif'];	
$conformes = $_POST['conformes'];
$rebuts = $_POST['rebuts'];
$commentaire = $_POST['commentaire'];
$conformes2 = $_POST['conformes2'];
$rebuts2 = $_POST['rebuts2'];
$commentaire2 = $_POST['commentaire2'];

// connection à la BDD
$link = mysql_connect ($host,$user,$pass) or die ('Erreur : '.mysql_error() );
mysql_select_db($db) or die ('Erreur :'.mysql_error());

$select="UPDATE `suivi_pieces` SET `conformes` = '".$conformes."', `rebuts` = '".$rebuts."', `commentaires` = '".$commentaire."' WHERE (`date` ='".$date."'&&`classe` ='".$classe."'&&`rebuts` ='".$rebuts2."'&&`binome` ='".$binome."'&&`objectif` ='".$objectif."'&&`conformes` ='".$conformes2."'&&`commentaires` ='".$commentaire2."');";
$result = mysql_query($select,$link) or die ('Erreur : '.mysql_error() );
$url="gestion3.php?objet=".$_SESSION['objet']."&piece=".$_SESSION['piece']."&phase=".$_SESSION['phase'];
header("location:$url");
}

?>



Ca marche sans soucis, j'évite une page supplémentaire avec le lien retour, ça me recharge la page "gestion3.php?variables..."
Et je ne perds pas les valeurs en session.