Page 1 sur 1

Problème de session après DELETE

Posté : 30 juin 2012, 17:05
par Azuriel
Bonjour, encore une fois je reviens vers vous afin de vous demander votre aide.

Alors, sur ma page : supprimer_admininistrateur.php que voici :
<?php
session_start(); 

// On inclue le fichier config et fonction
include 'config.php';
include 'fonction.php';

if(!isset($_SESSION['login'])) // Si tu n'es pas connecté tu n'as rien à faire ici
{
	// On definie l'erreur
	define ("ERREUR", "<h4 class=\"alert_warning\">Vous devez être connecté pour accéder à cette partie de l'annuaire ! <a href=\"connexion.php\">Connexion</a></h4>");
	include 'erreur.php';
	exit;
}

else if ($_SESSION['id']!=1) // Si ce n'est pas le créateur on affiche une erreur
{ 
	// On definie l'erreur
	define ("ERREUR", "<h4 class=\"alert_warning\">Vous n'avez pas le niveau requis pour accéder à cette page ! <a href=\"accueil.php\">Retour à l'accueil</a></h4>");
	include 'erreur.php';
	exit;
}

$id = $_GET['id'];  // On recupere l'id de l'administrateur

	if ($_GET['id']==1)	// Si c'est le créateur on refuse la suppresion
	{
		// Le créateur ne peut être supprimé
		$message = '<h4 class="alert_error">Le créateur ne peut être supprimé !</h4>';
	}
	else
	{
		// Sinon on supprime l'administrateur 
		$requete = "DELETE FROM ".$admin." WHERE ID = ".$id."";
			 
		// Exécution de la requête
		$req_exec = mysql_query($requete) or die(mysql_error());

			// Requête pour compter le nombre d'enregistrements répondant à l'id de ladministrateur
			$requete2 = "SELECT count(*) as nb FROM ".$admin." WHERE ID = ".$id."";
		 
			// Exécution de la requête
			$req_exec2 = mysql_query($requete2) or die(mysql_error());
		 
			if ($req_exec2['nb'] == 0) // Si le comptage = 0, l'administrateur à été supprimer.
			{
				// L'administrateur à été supprimé
				$message = '<h4 class="alert_success">L\'administrateur à été supprimé correctement.</h4>';           
			}		
			else 
			{
				// L'administrateur n'a pas été supprimé
				$message = '<h4 class="alert_error">Il y a eu une erreur lors de la suppresion ! Réessayer.</h4>';
			}
	}		  
			  
// On definie quelque valeurs comme le titre et le la page en cours
define("TITRE", "Supprimer un administrateur");
define("ARIANE", "<a href=\"accueil.php\">Accueil administration</a> <div class=\"breadcrumb_divider\"></div> <a class=\"current\">". TITRE ."</a>");

// On affiche le haut de page (header.php)
include 'header.php';

// On inclue la collone de droite
include 'colonne.php';

?>

 
 <section id="main" class="column">
		
		<?php if(isset($message)) echo $message ?>	
			
		<div class="spacer"></div>
</section>


</body>

</html>
Je supprime un administrateur de ma table, le code fonctionne correctement à une exception près : je n'ai plus de session !
J'ai essayé de chercher moi-même et je pense que le problème de session provient de la "session id" car après avoir exécuté la page ci-dessus je reste connecter, mais je n'ai plus le niveau requis pour accéder à cette page ?

Je ne vois vraiment pas comment régler le problème, donc si quelqu'un à une solution :wink:

Re: Problème de session après DELETE

Posté : 30 juin 2012, 18:43
par Mazarini
Je ne vois pas de raison à la perte de la session.
Eventuellement ajoute un var_dump($_SESSION); avant le </body>

Ajoute la meme chose juste après le session_start() de la page ou tu perds la session (session_start() oublié ?).

Re: Problème de session après DELETE

Posté : 30 juin 2012, 18:51
par Azuriel
Bonjour Mazarini,

Alors voici ce qu'il retourne :
array(2) {
  ["login"]=>
  &string(7) "azuriel"
  ["id"]=>
  &string(2) "12"
}
Et la une erreur bizarre à mon avis l'id qui est censé être 1 car je suis le créateur donc, id 1 devient 12 ?
On dirait que l'id prend la valeur de l'id de l'administrateur qui est supprimer ?

Une piste sur ce qui provoque ce problème ?

Bon c'est bon, c'est régler
juste avant le script mon id est de 1 et après il prend la valeur de l'id de l'admin qu'on surprime, j'ai donc changer

$id par $id_admin dans le script pour supprimer l'admin et tous fonctionne.

Bref c'est régler merci et bon appétit.

Re: Problème de session après DELETE

Posté : 01 juil. 2012, 08:45
par Ryle
Le problème lié à la configuration de ton serveur php, la propriété register global doit actuellement être à ON, ce qui fait que la variable $id fait aussi bien référence à $_POST['id'], $_GET['id'], $_SESSION['id'], ... Quand tu changes la valeur de $id, il change alors également la valeur en session $_SESSION['id'] qui pointe sur la même valeur.

Cette propriété est désormais désactivée par défaut et devrait même disparaître dans la prochaine version de php, puisqu'elle peut poser des problèmes de sécurité (ex : l'utilisateur peut altérer la session en passant des paramètres dans l'url)

Re: Problème de session après DELETE

Posté : 01 juil. 2012, 16:43
par Azuriel
Bonjour Ryle,

Effectivement la propriété register global est sur on, je ferais attention maintenant je te remercie pour ton explication :wink:

Bonne journée

Re: Problème de session après DELETE

Posté : 01 juil. 2012, 17:09
par AB
La plupart des serveurs offrent la possibilité de modifier cette configuration via un fichier .htaccess. Cela offre une bien meilleure sécurité.
Classiquement la ligne à ajouter est
php_flag register_globals off

mais certains hébergeurs possèdent leur propre syntaxe par exemple pour ovh c'est
SetEnv REGISTER_GLOBALS 0
Renseigne-toi chez ton hébergeur.

Re: Problème de session après DELETE

Posté : 01 juil. 2012, 18:10
par Azuriel
Je peut changer directement il me suffit de cliquer sur off.
Si ça améliore la sécurité je vais le désactiver.

Re: Problème de session après DELETE

Posté : 01 juil. 2012, 23:19
par Ryle
Ca améliore effectivement la sécurité, mais cela peut avoir certains impacts sur ton code...

En effet, cela t'oblige à préciser d'où proviennent les données que tu souhaites utiliser en indiquant explicitement $_GET['xxx'], $_POST['xxx'], $_SESSION['xxx'] plutôt que de faire $xxx pour récupérer cette valeur... ça peut donc te donner un peu de travail en plus, mais au final c'est pas plus mal pour la lisibilité et la maintenance de ton code :)

Re: Problème de session après DELETE

Posté : 01 juil. 2012, 23:46
par Azuriel
J'ai toujours écrit de cette façon $_SESSION['xxx'] donc sa ne me dérange pas.
A partir de maintenant je désactiverais cette option, merci pour ces explications et bonne soirée