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 de Header chez certains utilisateurs de mon appli web [PHP 5.2]


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 13
    Points : 15
    Points
    15
    Par défaut Problème de Header chez certains utilisateurs de mon appli web
    Bonjour,
    J'ai un problème de redirection dans mon appli web.
    Voilà comment ça fonctionne:
    Lorsque l'utilisateur se connecte à l'appli il tombe sur une page qui lui demande un login et un mdp. cette page je ne la gère pas moi-même (afin de ne pas me mettre au courant des mdp de tout le monde) mon appli commence à la page d'après.
    Cette page est index.php. Dans cette page, je recupère le login de l'utilisateur de la page précedente (celle que je ne gère pas) grâce à la variable $_SERVER['PHP_AUTH_USER']. Puis je vérifie que son login est bien dans ma base, si c'est le cas je prend son login, son email et son type d'utilisateur (simple utilisateur ou administrateur) que je met dans des variables de session et je l'oriente vers la page accueil.php sinon vers la page echec.php.

    Voici le code d'index.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
     
    <?php
    @session_start();
    	$login=@substr($_SERVER['PHP_AUTH_USER'],15);
    	include("sql/connexion.php");
    	$user = "select * from user_gpa where LOGIN = '".$login."'";
    	$res_user = @mysql_query($user);
    	$ligne = @mysql_fetch_array($res_user);
        @extract($ligne);
        $_SESSION["ACT_ID"] = $LOGIN;
        $_SESSION["ACT_EMAIL"] = $EMAIL;
        $_SESSION["GPA_USER"] = $GPA_USER;
    	if ($GPA_USER=='oui' || $GPA_USER=='admin'){
    		header('Location: accueil.php');
    		exit();
    		}		
    	else{
    		header('Location: echec.php');
    		exit();
    		}
    ?>
    Voici le début du code d'accueil.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php @session_start() ;
    if ($_SESSION['GPA_USER']!='oui' && $_SESSION['GPA_USER']!='admin'){
    	header('Location: echec.php');
    	exit();
    	}
    //reste du code HTML et PHP
    ?>

    Ce code marche chez la plupart des utilisateurs. Le problème est qu'une minorité d'utilisateur est orienté vers la page d'echec.php alors qu'il sont dans la base!!! Cela doit etre du à une version d'IE qui doit etre vieille selon moi.
    Encore plus bizarre: lorsqu'ils tombent sur la page d'echec il leur suffit de taper dans l'URL accueil.php et ils tombent sur cette page et leur variable de session fonctionnent bien dans la suite de l'appli!

    Pouvez-vous m'aider à que TOUT les utilisateurs tombe directement sur la page d'accueil.php si ils sont dans la base SVP?
    Merci d'avance.

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Pourquoi as-tu autant de lignes ou tu masques les erreurs ?
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 13
    Points : 15
    Points
    15
    Par défaut
    Bonjour, parce qu' on m'a dit que si il y a un affichage avant le header() cela perturbe l'affichage. J'ai donc enlever tout affichage potentiel.

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    C'est quand même génant d'avoir des erreurs et de faire comme si ce n'était pas le cas non ?
    Sur un site en production on n'affiche effectivement pas les erreurs, mais on le fait globalement, pas fonction par fonction.
    Et pour voir les erreurs qui se produisent, on log les erreurs dans un fichier.
    Quand on cherche à debuguer, c'est quand même bien de voir les erreurs qui se produisent.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 13
    Points : 15
    Points
    15
    Par défaut
    Oui c'est vrai. Mais j'avais esperé que quelqu'un était déja tombé sur ce type de problème et qu'il avait trouvé une solution.

  6. #6
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    +1

    Masquer les messages d'erreurs est la pire chose à faire, le débuggage sera alors impossible.

    Faut te pencher sur ces directives du php.ini, qui peut être modifié soit dans un .htaccess ou via les fonctions php ini_set().
    Il te faut configurer ça de 2 manières :
    Une config pour le projet en production (les messages dans un log)
    Une config différente pour celui en développement (dans un log + affiché)

    error_reporting
    display_errors
    log_errors
    error_log
    ignore_repeated_errors
    et la fonction die(), et même trigger_error()

    C'est un minimum.

    Il te faut savoir à quoi elles servent, et pas de @ devant les fonctions (à moins de le faire en bonne connaissance) sinon ça va être la cata

    Pour pouvoir t'aider, il faut avoir les messages d'erreurs retournés, c'est justement fait pour aider à comprendre la nature de l'erreur.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  7. #7
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 13
    Points : 15
    Points
    15
    Par défaut
    Ok merci des conseils, je vais ecrire les erreurs dans un fichier à part et je reviendrais pour vous dire ce qu'elles disent.

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    comme le problème n'est pas évident à identifier tu peux aussi loguer les informations de l'utilisateur avant de le rediriger :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    $file = fopen("log.txt","a");
    $log = "-----------------\r\n";
    $log .= "login : " . $_SERVER['PHP_AUTH_USER'] . "\r\n";
    $log .= "navigateur : " . $_SERVER['HTTP_USER_AGENT'] . "\r\n";
    foreach ($_SESSION as $name=>$value) {
         $log .= $name . ' : ' . $value . "\r\n";
    }
    fwrite($file, $log);
    fclose($file);
    header('Location: echec.php');
    exit();
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  9. #9
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 13
    Points : 15
    Points
    15
    Par défaut
    Très bon code sabotage! Je l'ai mis dans ma page index.php et on va voir ce qu'il y a d'écrit d'ici à la fin de la journée dans ce log.txt .
    Merci!

  10. #10
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Citation Envoyé par Pierrot_77
    Ok merci des conseils, je vais ecrire les erreurs dans un fichier à part et je reviendrais pour vous dire ce qu'elles disent.
    Il ne faudrait pas mal interpréter mes propos tout d'même, car j'ai jamais qu'il fallait créer un fichier pour enregistrer les erreurs.
    Je t'ai juste invité à te pencher sur les différentes possibilités qu'offre Php pour gérer les messages d'erreurs.

    A savoir que Php offre la possibilité d'enregistrer tous les messages d'erreurs dans un fichier php_error.log, ce qui devrait être le cas d'ailleurs.
    Ton hébergeur devrait te permettre de le consulter, ou/et le télécharger.

    On peu donc dire qu'il est inutile de recréer ce qu'il existe déjà. Faut juste prendre un peu de temps du comment tout ça est configuré pour en profiter.

    Cependant, le fait de mettre un @ devant une fonction provoquant une erreur, il est fort probable que le message ne soit pas enregistré dans ce fichier log.

    D'où l'intérêt de supprimer ces @, de même de savoir comment est configurer son serveur sur la manière de gérer ces erreurs, et éventuellement y apporter quelques corrections sur ces directives.

    Je me répète un peu, mes la gestion des erreurs est bien souvent un aspect négligé par les codeurs. Ils sont pourtant essentiels, on peu difficilement les ignorés.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  11. #11
    Membre à l'essai
    Inscrit en
    Février 2010
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Février 2010
    Messages : 13
    Points : 15
    Points
    15
    Par défaut
    Bon, apparement il s'agissait d'une erreur dans le code PHP que j'ai mis plus haut. On utilise en fait un SSO qui nous donne le login du user (pour lui donner ensuite accès ou pas à l'appli). Le problème venait du fait que la variable $login n'était forcement de cette forme:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $login=@substr($_SERVER['PHP_AUTH_USER'],15);
    Car un même utilisateur peut se logguer avec un seul mdp mais avec des logins différents et je ne prenais en compte qu'un seul type de login.
    Ce n'est pas de ma faute on ne m'avait rien dit.

    Faux problème donc, merci de votre aide, grâce à vous j'ai mieux ciblé le problème, je tiendrais plus compte des rapports d'erreur la prochaine fois.

  12. #12
    Membre averti
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    319
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2006
    Messages : 319
    Points : 351
    Points
    351
    Par défaut
    Citation Envoyé par RunCodePhp Voir le message
    [...] la gestion des erreurs est bien souvent un aspect négligé par les codeurs. Ils sont pourtant essentiels, on peu difficilement les ignorés.
    T'as raison, ne négligeons pas les codeurs !

  13. #13
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Citation Envoyé par Oscar Hiboux
    T'as raison, ne négligeons pas les codeurs !
    Excellent


    Le métier des intellectuels est de chercher la vérité au milieu de l'erreur.[Romain Rolland]
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

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

Discussions similaires

  1. Réponses: 17
    Dernier message: 20/11/2014, 11h42
  2. J'ai un problème avec la mise en ligne de mon site web
    Par elodie13 dans le forum Internet
    Réponses: 29
    Dernier message: 28/08/2006, 19h08
  3. [Framework] que des SELECT dans mon appli Web.
    Par ohyes_ dans le forum JDBC
    Réponses: 16
    Dernier message: 03/08/2006, 19h25
  4. Réponses: 5
    Dernier message: 26/04/2006, 16h36

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