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 :

header("Location: ...") sans effet


Sujet :

Langage PHP

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2005
    Messages : 41
    Par défaut header("Location: ...") sans effet
    Bonjour,
    j'ai un problème avec un header qui fonctionne en local(easy php) mais pas sur le site distant. J'ai une page index.php avec un formulaire de saisie login/mot de passe qui renvoie vers une page log.php laquelle vérifie l'identité de l'utilisateur, ouvre une session php et redirige vers une page d'accueil avec une fonction header(header("Location: accueil.php") ;). En local, tout se passe bien, mais sur le site distant, la redirection ne se fait pas(tout le reste fonctionne) et on reste coincé sur la page log.php
    Voici mon fichier log.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
    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
    
    <?php
    echo'<html>
    <head>
    <meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type" />
    <title>affichage par projet</title>
    <link type="text/css" rel="stylesheet" href="style.css ">
    </head>
    <body>';
    include("connection.php");
    
    /*
     si les champs de login et de mot de passe ne sont pas vides
     on insère l'utilisateur.
     */
    if($_POST["login"] != "" && $_POST["pwd"] != "")
    {
    	$login     = $_POST["login"] ;
    	$pass      = md5($_POST["pwd"]) ;
    
    	//création de la requête SQL
    	$sql = "SELECT * FROM user WHERE login_user = '".$login."' AND pass_user = '".$pass."'"	;
    	//exécution de la requête SQL
    	$requete = @mysql_query($sql) or die($sql."<br>".mysql_error()) ;
    	//on récupère le résultat
    	$result = mysql_fetch_object($requete) ;
    	//si la requête s'est bien passée
    	if(is_object($result))
    	{
    		//début de la sessions
    		session_start() ;
    		//enregistrement d'une variable de session, ici le login de l'utilisateur
    		$_SESSION["login"] = $login ;
                    //redirection vers la page d'accueil
                    header("Location: accueil.php") ;//c'est ici que ça coince
                    echo '<a href="accueil.php">'.$login.'</a>';//j'ai rajouté cette ligne pour vérifier que ma session fonctionne, elle ne se trouve pas normalement dans le script
    		
    	}//fin if
    	//sinon on retourne à la page d'inscription
    	else
    	{
    		header("Location: index.php") ;
    	}//fin else
    }//fin if
    /*
     sinon on retourne à la page d'inscription
     */
    else
    {
    	header("Location: index.php") ;
    }//fin else
    ?>
    Merci pour vos réponses,

    Michel

  2. #2
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Par défaut
    1) utiliser la fonction recherche
    2) lire le manuel http://www.php.net/fr/header

    Je cite :
    N'oubliez jamais que header() doit être appelée avant que le moindre contenu ne soit envoyé, soit par des lignes HTML habituelles dans le fichier, soit par des affichages PHP. Une erreur très classique est de lire un fichier avec include() ou require(), et de laisser des espaces ou des lignes vides, qui produiront un affichage avant que la fonction header() ne soit appelée. Le même problème existe avec les fichiers PHP/HTML standards.
    3) Pour trouver les erreurs il faut les afficher :/ (voir manuel de error_reporting())

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    41
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mai 2005
    Messages : 41
    Par défaut
    Merci pour la réponse,

    J'avais bien lu la page du manuel concernant la fonction header. Et j'avais supprimé dans un premier temps tout code html. Mais comme ça ne fonctionnait toujours pas, je l'avais réintégré. C'est pourquoi j'avais posté ce message. J'ai supprimé maintenant les blancs entre les lignes de code php et ça fonctionne. Apparemment, c'était ça le problème. Je ne comprend pas par contre pourquoi en local, ça fonctionne avec les blancs et le code html placé avant la fonction header. Quelle est la différence? Et comment faire alors une redirection dans le cours d'un script?


    Merci,

    MichelK

  4. #4
    Membre Expert

    Homme Profil pro
    Inscrit en
    Janvier 2004
    Messages
    1 249
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2004
    Messages : 1 249
    Par défaut
    Si ta page commence par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <?php
    echo'<html>
    <head>
    <meta content="text/html; charset=iso-8859-1" http-equiv="Content-Type" />
    <title>affichage par projet</title>
    <link type="text/css" rel="stylesheet" href="style.css ">
    </head>
    <body>';
    les headers suivants ne fonctionneront pas.

    SI ca fonctionne chez toi (ce qui a l'air d'etre le cas) c'est pour une seule et unique raison, c'est que la sortie est bufferisée et donc pas envoyée tout de suite au navigateur.
    Cependant, ce n'est pas portable, ca dependra de la config du serveur, etc...

    Il convient donc de faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    // traitement SANS echo
    header(...)
    // affichage avec echo

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

Discussions similaires

  1. window.location sans effet
    Par freretruc dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 04/10/2006, 17h28

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