IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Problème unset, session et include.


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Avatar de cahnory
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    203
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 203
    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

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Août 2005
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 514
    Par défaut
    Bonjour,
    donc chez vous, ce genre de code ne fonctionne pas :

    Code index.php : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.

  3. #3
    Membre confirmé
    Avatar de cahnory
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    203
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 203
    Par défaut
    Arf, cet exemple marche, je doit avoir une erreur ailleur...

    Alors voilà, prenons ma page d'accueil :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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à

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Août 2005
    Messages
    514
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 514
    Par défaut
    Et avec ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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']);	 
     
      }
     
    ?>

  5. #5
    Membre confirmé
    Avatar de cahnory
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    203
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 203
    Par défaut
    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 ?

  6. #6
    Membre confirmé
    Avatar de cahnory
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    203
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 203
    Par défaut
    Je viens de faire un petit test amusant mais déconcertant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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 :'(

Discussions similaires

  1. [Servlets - JSP] Problème de session
    Par the java lover dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 28/11/2011, 09h54
  2. Problème de session
    Par kephy dans le forum Langage
    Réponses: 11
    Dernier message: 24/11/2005, 10h08
  3. Problème de session
    Par meda dans le forum Langage
    Réponses: 13
    Dernier message: 25/10/2005, 18h25
  4. problème de session en cours
    Par bertrand_declerck dans le forum Bases de données
    Réponses: 2
    Dernier message: 19/07/2005, 14h36
  5. Gros problème de session/cookies
    Par valfredr dans le forum XMLRAD
    Réponses: 18
    Dernier message: 03/06/2004, 09h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo