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 :

redirection après authentification pas possible


Sujet :

Langage PHP

  1. #1
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut redirection après authentification pas possible
    Bonjour,

    ma page demande à l'utilisateur de s'authentifier et si c'est correct, je voudrais rediriger vers le contenu...sauf que la redirection n'est pas autorisée :
    Warning: Cannot modify header information - headers already sent by (output started at C:\wamp\www\eis2\eisnew\header.inc.php:96) in C:\wamp\www\eis2\eisnew\page\authenticate.php on line 49
    authenticate.php :
    Code php : 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
     
    <?php 	require_once(dirname(__DIR__).'\_includes\html0-topPHP.php'); // INIT + FONCTIONS et autres config en PHP
    ?>
    <?php 	require_once(dirname(__DIR__).'/_includes/html1-debut.php'); // contient le DEBUT du code HTML, le contenu de <head> SANS la balise </head> ?>
     
    <?php 	require_once(dirname(__DIR__).'/_includes/html2-milieu.php'); // contient la balise </head>et le DEBUT du <body>, A PARTIR DE la balise </head> ?>
     
    <?php 	function authentification()
    {
    		global $bdd;
     
    		$auth=false;
    		...
            	$_SESSION['auth']=$auth;
     
     return $auth;
    }
     $auth=authentification();
     header ("Location: $_SERVER[HTTP_REFERER]" );
     exit(); ?>
     
    <?php 	require_once(dirname(__DIR__).'/_includes/html3-fin.php'); // contient la FIN du code HTML, jusqu'au </body></html> ?>

    comment puis-je faire ? La ligne 49 correspond ici à la 19. Et ma page a la structure suivante :
    Code php : 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 ( ! $_SESSION["auth"]) 
    	{
    		// formulaire d'authentification	
    	}
     
    else {
    	include dirname(__DIR__)."\\language.".$lang.".inc.php"; (__DIR__)."\\language.".$lang.".inc.php<br/>";
    	include dirname(__DIR__)."\\header.inc.php";
    	include dirname(__DIR__)."\\menupage.php";
          }
     
    // changement de fichier
     
    if ($_SESSION["auth"])
    	{ 
    	//contenu
    	}
    ?>	
     
    <?php 	require_once(dirname(__DIR__).'/_includes/html3-fin.php'); // contient la FIN du code HTML, jusqu'au </body></html> ?>
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  2. #2
    Invité
    Invité(e)
    Par défaut
    Les espaces et passages à la ligne EN DEHORS des <?php ... ?> sont considérés comme un envoi de code HTML.

    D'autre part, tes scripts PHP (en surtout les header('location....) doivent se mettre JUSTE APRES html0-topPHP.php :

    Code php : 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
    <?php // en tout début de fichier (RIEN AVANT)
     require_once(dirname(__DIR__).'\_includes\html0-topPHP.php'); // INIT + FONCTIONS et autres config en PHP 
     
    function authentification()
    {
    		global $bdd;
    		$auth=false;
    		...
            	$_SESSION['auth']=$auth;
           return $auth;
    }
     $auth=authentification();
     header ("Location: $_SERVER[HTTP_REFERER]" );
     exit(); 
     
    ?>
    Le reste du code vient APRES.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <?php 	require_once(dirname(__DIR__).'/_includes/html1-debut.php'); // contient le DEBUT du code HTML, le contenu de <head> SANS la balise </head> ?>
     
    <?php 	require_once(dirname(__DIR__).'/_includes/html2-milieu.php'); // contient la balise </head>et le DEBUT du <body>, A PARTIR DE la balise </head> ?>
     
    ....CONTENU DE LA PAGE....
     
    <?php 	require_once(dirname(__DIR__).'/_includes/html3-fin.php'); // contient la FIN du code HTML, jusqu'au </body></html> ?>

  3. #3
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    super,

    je le savais mais n'y avais pas pensé...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  4. #4
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Bonsoir,

    je reviens sur cette discussion sachant que j'ai le même problème ailleurs. Tu me recommandais de placer mes scripts PHP et surtout les headers juste après html0-topPHP.php mais en fait, ça se trouve avant les parties head et body du code (la partie html). Or le code PHP que j'ai à placer (et qui inclut à sa fin une redirection) contient (tout comme au début de cette discussion l'authentification d'ailleurs) du traitement qui selon ma logique irait plutôt dans la partie body. Tu me recommandais donc de faire autrement que ce que je ferais intuitivement. mon intuition est-elle fausse ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  5. #5
    Invité
    Invité(e)
    Par défaut
    Ne pas confondre "traitement" et "affichage".

    On parle ici de "logique" (de programmation). Pas d'"intuition".

  6. #6
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Merci pour cette réponse fort matinale (quand même vue y a plusieurs heures...). Avant de répondre, je l'ai testée et ça marche.

    Comme je n'ai pas retrouvé la page précédemment modifiée, je note ici le nom de la nouvelle page afin de pouvoir la retrouver si nécessaire : page/calendar-pdo/admin/enterdata.php.

    Ce que j'appelais "intuition" était en fait ma logique (biaisée ! ). Par contre, je suis un peu surpris car si j'ai bien compris, on y met des traitements mais pas d'affichage, or dans mon script PHP, même s'il y a 99% de traitement, il y a quand même un peu d'affichage. Exemple :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    if (empty($deb)) { 
    	echo '<a href="'.SITE_URL_HTTP.'/index.php?page=planning&lang='.$_SESSION['lang'].'">'.$str[311].'</a><br/><br/>';
    	die($str[315]);
    }
    Que dit la logique de programmation ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  7. #7
    Invité
    Invité(e)
    Par défaut
    Qu'on sépare le traitement de l'affichage.


    1/ Traitement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    //...
    $donnee_a_afficher = '........';
    //...
    2/ Affichage (à l'intérieur de <html>...</html>)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php echo $donnee_a_afficher; ?>
    Ce que tu sembles avoir du mal à comprendre c'est que :
    • le traitement peut se faire n'importe où dans la page
    • mais l'affichage ne peut se faire qu'entre les balises <html>...</html> !

    Et que, une fois qu'on a affiché quelque chose, on ne peut plus faire de redirection de type header('location...').

  8. #8
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    C'est exactement ce que j'avais compris d'où ma surprise exprimée au post 6 vu que je fais un affichage (echo) puis une redirection avec header et que le serveur n'a pas râlé...
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  9. #9
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Bonjour Jérôme,

    saurais-tu m'expliquer pourquoi, comme je le disais dans le post #6, je fais un affichage, puis une redirection et que ça marche quand même ?
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  10. #10
    Invité
    Invité(e)
    Par défaut
    Sans voir le code (vu que, COMME D'HABITUDE, tu as mis des "..." !), je dirais qu'il y a sans doute des conditions,
    et que :
    • SOIT tu affiches (echo...),
    • SOIT tu rediriges (header...),
    • mais pas les deux


    Ca reste néanmoins une mauvaise idée que de vouloir faire de l'affichage au sein d'un tel traitement (= susceptible de réclamer des redirections*, entre autres).

    * Comme cela a DEJA été dit :
    • une redirection DOIT se faire AVANT tout affichage, donc AVANT la balise <DOCTYPE...>
    • OR, AUCUN affichage ne doit se faire AVANT la balise <DOCTYPE...> !

    CQFD.

  11. #11
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Redirection après authentification avec la sécurité Realm
    Par bruneltouopi dans le forum Glassfish et Payara
    Réponses: 7
    Dernier message: 21/04/2013, 14h25
  2. [2.x] Redirection après authentification
    Par kolodz dans le forum Symfony
    Réponses: 1
    Dernier message: 10/05/2012, 17h15
  3. Redirection apres authentification
    Par nander dans le forum Balisage (X)HTML et validation W3C
    Réponses: 1
    Dernier message: 22/03/2011, 20h20
  4. Redirection apres authentification
    Par roronnoa dans le forum Développement Web en Java
    Réponses: 4
    Dernier message: 26/11/2008, 11h18
  5. Réponses: 9
    Dernier message: 25/06/2008, 13h40

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