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 :

Mon header("Location: page.php"); ne fonctionne pa


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 122
    Points : 67
    Points
    67
    Par défaut Mon header("Location: page.php"); ne fonctionne pa
    Bonjour,

    J'utilise le code suivant pour me connecter à une partie privée d'un site mais j'ai un problème au niveau de la redirection à la suite de l'authentification.

    L'authentification fonctionne correctement mais la redirection qui devrait se faire avec la fonction header("Location: page.php"); mais ca ne fonctionne pas...

    Voici la page en question :

    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
     
    <?php
    session_start();
    if (isset($HTTP_POST_VARS['user'])&& isset($HTTP_POST_VARS['pass'])){
    	// Si l'utilisateur a essayé d'ouvrir une session
    	$user = $HTTP_POST_VARS['user'];
    	$pass = $HTTP_POST_VARS['pass'];
    	//appel de la page de connexion à la base
    	include("site_fns.php");
    	//Connexion au serveur mySQL
      	$db_conn = db_connect();
      	mysql_select_db($cd_db, $db_conn);
       	//envoi de la requête destinée à savoir si la base de donnée contient un enregistrement qui correspond
      	$query = 'select * from cd_auth '
               	."where user = '$user' "
    		   	." and pass = password('$pass')";
      	$result = mysql_query($query, $db_conn);
    if (mysql_num_rows($result)>0) {
      // S'il est enregistré dans la base de donnée
      $HTTP_SESSION_VARS['valid_user']= $user;
      header("Location: index_adm.php");
     }
    }
    ?>
    <html>
    <head>
    <title></title>
    </head>
    <body bgcolor="#005BDD">
    <br><br>
    <table width="100%">
    <tr>
    <td align="center" bgcolor="#EFEEE7"><br><font face="Arial, Helvetica, sans-serif"><b>ACCES A LA PARTIE PRIVEE DU SITE<br></b></font><br><br></td>
    </tr>
    <tr>
    <td height="20"></td>
    </tr>
    <tr>
    <td  align="center" bgcolor="#ffffff">
    <?
    if (isset($HTTP_SESSION_VARS['valid_user'])) {
    	echo '<br>Vous êtes connecté en tant que : <a href="index_adm.php" title="cliquer pour revenir sur votre compte">'.$HTTP_SESSION_VARS['valid_user'].'</a>'; 
    }
    else {
    if (isset($user)) {
    	// Si sa tentative d'ouverture de session a échoué
    	echo 'Identifiant ou mot de passe incorrect.</font>';
    }
    else {
      	//L'utilisateur n'a pas de session ouverte
      	echo '<font Face="Arial" Size="2"><b>IDENTIFICATION</b></font><br><br>';
      	echo '<font face="Arial" Size="2"><b>Information de Session : </b>vous n\'êtes pas connecté.</font>';
    }
    }
    echo '
    <!--Affichage du formulaire d\'ouverture de session-->
    <br><br>
    <form method="post" action="auth.php">
    	<table border="0">
    		<tr>
    			<td align="right"><font face="Arial" Size="2">Nom d\'utilisateur :</font></td>
    			<td><input type="text" name="user"></td>
    		</tr>
    			<td align="right"><font face="Arial" Size="2">Mot de passe :</font></td>
    			<td><input type="password" name="pass"></td>
    		<tr>
    			<td colspan="2" align="center"><input type="submit" value="Entrer"></td>
    		</tr>
    	</table>
    </form>';
    ?>
    </td>
    </tr>
    </table>
    </body>
    </html>
    Merci de vos suggetions

  2. #2
    Rédactrice
    Avatar de xave
    Femme Profil pro
    Développeur Web
    Inscrit en
    Mai 2002
    Messages
    871
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 46
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Mai 2002
    Messages : 871
    Points : 1 094
    Points
    1 094
    Par défaut
    Y a un message d'erreur quelconque ou rien, la page blanche?

  3. #3
    Membre averti Avatar de gofono_bass
    Inscrit en
    Décembre 2005
    Messages
    383
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Décembre 2005
    Messages : 383
    Points : 448
    Points
    448
    Par défaut
    Salut,
    Il y a une erreur qui s'affiche? laquelle?
    sinon t'es sur que tu n'as rien envoyé avant le header()? par exemple dans ton include.

    En passant, si tu as une version de php pas trop vieille, utilises plutot $_POST(et $_GET) et $_SESSION au lieu de $HTTP_POST_VARS et $HTTP_SESSION_VARS

  4. #4
    Membre régulier Avatar de Jimmy_S
    Inscrit en
    Octobre 2005
    Messages
    214
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 214
    Points : 85
    Points
    85
    Par défaut
    Edit : Trompé de topic ^^

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 285
    Points : 300
    Points
    300
    Par défaut
    Citation Envoyé par Jimmy_S
    Edit : Trompé de topic ^^
    Tu aurais meme pu supprimer ton message en cliquant sur la ptite croix

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 285
    Points : 300
    Points
    300
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if (mysql_num_rows($result)>0) {
      // S'il est enregistré dans la base de donnée
      $HTTP_SESSION_VARS['valid_user']= $user;
      header("Location: index_adm.php");
     }
    si tu ne rentres pas dans cette condition, c'est que la condition ne le permet pas... (donc, que ton utilisateur n'existe pas...)

    Sinon, tu dois avoir une erreur qui te retourne une entete...

    change ca:

    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
    session_start();
    if (isset($HTTP_POST_VARS['user'])&& isset($HTTP_POST_VARS['pass'])){
    	// Si l'utilisateur a essayé d'ouvrir une session
    	$user = $HTTP_POST_VARS['user'];
    	$pass = $HTTP_POST_VARS['pass'];
    	//appel de la page de connexion à la base
    	include("site_fns.php");
    	//Connexion au serveur mySQL
    	$db_conn = db_connect();
    	mysql_select_db($cd_db, $db_conn) or die(mysql_error());
    	//envoi de la requête destinée à savoir si la base de donnée contient un enregistrement qui correspond
    	$query = "
    		select 
    			* 
    		from 
    			cd_auth 
    		where 
    			user = '".$user."' and 
    			pass = password('".$pass."')";
    	$result = mysql_query($query, $db_conn) or die("Erreur dans la requete.\n".mysql_error());
    if (mysql_num_rows($result)>0) {
    	// S'il est enregistré dans la base de donnée
    	$HTTP_SESSION_VARS['valid_user']= $user;
    	header("Location: index_adm.php");
    	}
    }

  7. #7
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 122
    Points : 67
    Points
    67
    Par défaut
    En fait, j'ai testé et je rentre bien dans cette condition :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (mysql_num_rows($result)>0) {
      // S'il est enregistré dans la base de donnée
      $HTTP_SESSION_VARS['valid_user']= $user;
      header("Location: index_adm.php");
     }
    En fait, j'ai pas d'erreur qui s'affiche, l'utilisateur existe bien car en fait, je rentre également dans la condition suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    if (isset($HTTP_SESSION_VARS['valid_user'])) {
       echo '<br>Vous êtes connecté en tant que : <a href="index_adm.php" title="cliquer pour revenir sur votre compte">'.$HTTP_SESSION_VARS['valid_user'].'</a>';
    }
    Donc en cliquant sur le lien, j'accède bien à ma page protégée.
    Par contre le header ne me redirige pas automatiquement vers cette page après authentification comme il devrait le faire.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 285
    Points : 300
    Points
    300
    Par défaut
    je comprends pas, si tu rentre dans le premier block logiquement tu ne rentres pas dans le second, puisque tu rediriges...

    Tu rediriges sur la même page ?

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 122
    Points : 67
    Points
    67
    Par défaut
    ca redirige pas, je sais pas pourquoi.

    Et je redirige pas sur la même page bienentendu.

    Mais théoriquement mon header est bien placé non ?

  10. #10
    Membre éclairé Avatar de Yobs
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    675
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Avril 2004
    Messages : 675
    Points : 846
    Points
    846
    Par défaut
    Est ce que ton php est configuré pour afficher les erreurs?

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Février 2003
    Messages
    285
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2003
    Messages : 285
    Points : 300
    Points
    300
    Par défaut
    petite curiosité...
    ta fonction db_connect(), elle renvoit quoi ?

  12. #12
    Membre régulier

    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 52
    Points : 97
    Points
    97
    Par défaut
    ne pas oublier le exit(); apres le header. J'ai déjà eu le cas ou la redirection ne se faisait pas à cause de son absence.

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 122
    Points : 67
    Points
    67
    Par défaut
    ok, je vais utiliser exit();

    Pour répondre à la question de Sio_Sempai, db_connect estune fonction me permettant de mettre dans une page différente la connexion à la base.

    Comme ca, je n'ai pas à répéter le sacrosaint mysql_connect('host','user','pass'); à chaque fois que je dois me connecter à la base.

  14. #14
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Je pense que Sion_Sempai voulait dire que tu as peut-être une erreur de connexion à ta base de données mais que tu ne la gères pas, ce qui laisse s'exécuter le reste de la page alors qu'il y a déjà eu une erreur.
    Utilises-tu or die(mysql_error()) à la suite de mysql_connect(), mysql_select_db() et mysql_query() ?

  15. #15
    Nouveau Candidat au Club
    Inscrit en
    Mars 2006
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 1
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Veiller à ce que du HTML ne soit pas généré avant l'instruction header(). Comme c'est correct à première vue, une piste a explorer me parait être la page appellée par la fonction include : site_fns.php
    Controler si aucun HTML n'est généré dans cette page.Par exemple, même des sauts de ligne aprés le ?> final suffisent à causer l'erreur.

    zh.

  16. #16
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 122
    Points : 67
    Points
    67
    Par défaut
    Salut,

    La connexion à ma basede donnée est correct pour répondre à Kirkis.

    Je vais explorer la piste de Zhub.

    Merci

  17. #17
    Membre du Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    122
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 122
    Points : 67
    Points
    67
    Par défaut
    Merci pour vos contributions.

    Je viens de résoudre mon problème.

  18. #18
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Citation Envoyé par zhub
    Bonjour,

    Veiller à ce que du HTML ne soit pas généré avant l'instruction header(). Comme c'est correct à première vue, une piste a explorer me parait être la page appellée par la fonction include : site_fns.php
    Controler si aucun HTML n'est généré dans cette page.Par exemple, même des sauts de ligne aprés le ?> final suffisent à causer l'erreur.

    zh.
    Correction : ce sont les affichages avant le premier <?php qui peuvent poser problème, non ceux situés après le dernier ?>

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

Discussions similaires

  1. Problème avec la taille de mon swf dans une page php
    Par Gizmil dans le forum Dynamique
    Réponses: 2
    Dernier message: 14/10/2007, 21h54
  2. Réponses: 7
    Dernier message: 22/05/2007, 00h15
  3. Erreur de redirection (header("location /page.php");)
    Par pierrot10 dans le forum Langage
    Réponses: 6
    Dernier message: 16/08/2006, 08h43
  4. [Système] Page PHP ne s'inclut pas à côté de mon menu
    Par cyberdevelopment dans le forum Langage
    Réponses: 2
    Dernier message: 11/08/2006, 13h33
  5. Réponses: 6
    Dernier message: 08/08/2006, 09h14

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