Précédent   Forum des professionnels en informatique > PHP > Langage > Sessions
Sessions Forum d'entraide sur les sessions avec PHP. Avant de poster -> FAQ sessions, Cours sessions et Sources sécurité
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/02/2008, 12h44   #1
Membre confirmé
 
Avatar de cahnory
 
Inscription : mai 2007
Messages : 199
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : mai 2007
Messages : 199
Points : 287
Points : 287
Envoyer un message via ICQ à cahnory
Par défaut Problème unset, session et include.

Bonjour, je rencontre un ptit problème au taff. Pour gérer les erreurs et succes de validation des formulaires d'un backoffice je fait généralement ceci :
$_SESSION['success'][] = 'Évènement ajouté avec succes';
ensuite, j'ai un fichier genre show_messages.php que j'inclu à la fin de toute mes pages et qui affiche tout les message d'erreur et de succes contenu dans la session. Pas de problème ça marche.
Maintenant, apres avoir affiché mes messages j'aimerai vider ces deux tableaux. Ce que je fait :
un unset($_SESSION['success']);
et un autre pour les erreurs à la fin de mon fichier show_messages.php
Et là plus rien ne s'affiche alors que je le fait apres mes echo (en fait des set_vars avec le template phpbb mais j'ai testé avec des echo aussi).
J'ai testé de mettre ces mêmes unset dans une des pages qui inclu show_messages.php, apres l'include, et là ça fonctionne. Mes messages s'affiches et les array sont supprimés.
Je pourrai me contenter de ça mais j'ai beaucoup de page et ça va donc en contradiction avec l'idée de gérer ça dans un autre fichier.
Quelqu'un sait d'où ça peut venir ? comment y remédier ? Apres de nombreuses recherches je n'ai pas entendu parlé de ce problème alors je me tourne vers vous.
Merci à ceux qui s'intéresseront à mon cas
cahnory est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2008, 13h18   #2
Membre expérimenté
 
Inscription : août 2005
Messages : 515
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 515
Points : 557
Points : 557
Bonjour,
donc chez vous, ce genre de code ne fonctionne pas :

Code index.php :
1
2
3
4
5
6
7
8
9
<?php
 
  session_start();
 
  $_SESSION['sucess'][] = 'Test reussi avec succes';
 
  include('show_messages.php');
 
?>

Code show_messages.php :
1
2
3
4
5
6
7
8
9
<?php  
 
  if (isset($_SESSION['sucess']))
  {
    print_r($_SESSION['sucess']);  
    unset($_SESSION['sucess']);
  }
 
?>

C'est vrai que là, je suis intrigué, pourriez-vous nous montrer quelques lignes de code?

Cordialement,
DaRiaN.
DaRiaN est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2008, 13h52   #3
Membre confirmé
 
Avatar de cahnory
 
Inscription : mai 2007
Messages : 199
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : mai 2007
Messages : 199
Points : 287
Points : 287
Envoyer un message via ICQ à cahnory
Arf, cet exemple marche, je doit avoir une erreur ailleur...

Alors voilà, prenons ma page d'accueil :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 
 
<?php
	require('inc/authentification.inc.php');
 
	$root_folder = './';
	$template_file = 'accueil.htm';
	$section_link = './';
	require_once($root_folder.'inc/SQL.conf.php');
 
	require($root_folder.'inc/template.inc.php');
	$template = new Template($root_folder.'templates');
 
	// Appel du template principal
	$template->set_filenames(array(
		'body' => 'index.htm'
	));
	include($root_folder.'inc/affichage.inc.php');
	// Appel du template spécifique à cette page
	$template->set_filenames(array(
		'content' => $template_file
	));
 
	$template->assign_var_from_handle('PAGE', 'content');
	// Affichage des données
	$template->pparse('body');
 
?>
On test si le visiteur est logué avec authentification.inc.php

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
<?php
	session_start();
 
	if(!isset($_SESSION['admin']) || $_SESSION['ip'] != $_SERVER['REMOTE_ADDR']){
		$_SESSION['erreur'][] = 'Vous devez être connecté pour accéder à cette page.';
		$_SESSION['redirection'] = $_SERVER['PHP_SELF'];
		if(!empty($_SERVER['QUERY_STRING'])){
			$_SESSION['redirection'] .= '?'.$_SERVER['QUERY_STRING'];
		}
		header('location: '.$root_folder.'login.php');
	}else{
		$authentified = true;
	}
?>
et, sur chaque page on retrouve mon script d'affichage :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 
<?php
 
		foreach($_SESSION['erreur'] as $key => $value){
			$template->assign_block_vars('erreur_bloc', array(
				'ERREUR' => $value
			));
		}
 
		unset($_SESSION['erreur']);
 
		for($i = 0; isset($_SESSION['reussite'][$i]); $i++){
			$template->assign_block_vars('succes_bloc', array(
				'SUCCES' => $_SESSION['reussite'][$i]
			));
		}
		unset($_SESSION['reussite']);
 
?>
Dans le cas présent, la page de login :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
 
<?php
 
session_start();
 
$page_title = 'Login';
$root_folder = './';
$template_file = 'login.htm';
require('inc/SQL.conf.php');
require_once($root_folder.'inc/general.func.php');
if(isset($_POST['login']) || isset($_POST['pass'])){
	connexion();
	$_POST = protect_data($_POST);
	$sql = "SELECT id, pass FROM ".$admins_tbl." WHERE login='".$_POST['login']."'";
	$req = mysql_query($sql) or die('Erreur SQL !<br>'.$sql.'<br>'.mysql_error()); 
	if($admin = mysql_fetch_assoc($req)){
		if($admin['pass'] == md5($_POST['pass'])){
			$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];
			$_SESSION['admin'] = $admin['id'];
			//echo 'vous etes bien logé';
			if(!empty($_SESSION['redirection'])){
				header('Location: '.$_SESSION['redirection'].'');
			}else{
				header('Location: ./');
			}
		}else{
			$_SESSION['erreur'][] = 'Mauvais mot de pass.';
		}
	}else{
			$_SESSION['erreur'][] = 'Mauvais login.';
	}
}
	include($root_folder.'inc/template.inc.php');
 
	$template = new Template($root_folder.'templates');
 
	// modèle à utiliser auquel on adjoint un nom arbitraire
	$template->set_filenames(array(
    'body' => 'index.htm'
	));
	// Appel du template spécifique à cette page
 
	$template->set_filenames(array(
		'content' => $template_file
	));
	$template->assign_vars( array(
		'LOGIN' => $_POST['login']
	));
 
	$template->assign_var_from_handle('PAGE', 'content');
 
	require($root_folder.'inc/affichage.inc.php');
	// Affichage des données
	$template->pparse('body');
 
?>
J'avou être un peu perdu sur ce coup là
cahnory est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2008, 14h01   #4
Membre expérimenté
 
Inscription : août 2005
Messages : 515
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 515
Points : 557
Points : 557
Et avec ce code :

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
 
  if (isset($_SESSION['erreur'])
  {
 
    foreach ($_SESSION['erreur'] as $key => $value)
     $template->assign_block_vars('erreur_bloc', array('ERREUR' => $value));
 
    unset($_SESSION['erreur']);
 
  }
 
  if (isset($_SESSION['reussite'])
  {  	
 
    for ($i = 0; $i < count($_SESSION['reussite']); $i++)
     $template->assign_block_vars('succes_bloc', array('SUCCES' => $_SESSION['reussite'][$i]));
 
    unset($_SESSION['reussite']);	 
 
  }
 
?>
DaRiaN est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/02/2008, 14h14   #5
Membre confirmé
 
Avatar de cahnory
 
Inscription : mai 2007
Messages : 199
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : mai 2007
Messages : 199
Points : 287
Points : 287
Envoyer un message via ICQ à cahnory
Toujours pas de message comme si le unset annulait les echo/set_vars précédament faits...

En virant le unset dans ton exemple mes messages s'affichent bien... comment un unset placé à postériori peut-il agire de la sorte ?
cahnory est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/02/2008, 13h05   #6
Membre confirmé
 
Avatar de cahnory
 
Inscription : mai 2007
Messages : 199
Détails du profil
Informations personnelles :
Âge : 27

Informations forums :
Inscription : mai 2007
Messages : 199
Points : 287
Points : 287
Envoyer un message via ICQ à cahnory
Je viens de faire un petit test amusant mais déconcertant :
Code :
1
2
3
4
5
6
7
8
	function affichage(){
		$template = $GLOBALS['template'];
		$template->assign_var_from_handle('PAGE', 'content');
		$template->pparse('body');
		header('location: nimportequoi.php');
		//unset($_SESSION['errors']);
		//unset($_SESSION['success']);
	}
voici la fonction que j'appelle à la fin de ma page, celle-ci est dans le script show_messages.php

Comme vous vous en doutait si vous avez déjà utilisé ce moteur de template j'ai une belle erreur comme quoi le header est déjà sent. Cette erreur se trouve après ma page (logique vu que pparse('body') se charge de l'afficher). En plus de ça mes messages d'erreurs s'affichent correctement car le unset est en com. Mais voilà, si je supprime le header et les // de com et bien mes erreurs ne s'affiche plus... Alors comment expliquer ça ? l'erreur du header montre bien que normalement à ce moment là la page est affichée, oui mais comment les unset peuvent-ils alors empêcher l'affichage des erreurs ? Je suis perdu :'(
cahnory est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h12.


 
 
 
 
Partenaires

Hébergement Web