Identification avec tableau-->page blanche

Résolu
Patoch250 Messages postés 69 Statut Membre -  
Patoch250 Messages postés 69 Statut Membre -
Bonjour,

Avec l'aide généreuse de ktm620enduro que je remercie encore nous avons créer ce script PHP pour une identification avec redirection. Sur la machine de ktm620enduro le code fonctionne cependant pour ma part celle-ci affiche une page blanche. Je ne vois pas pourquoi quelqu'un à une idée?

<?

$login='bureau_sushiba';
$pass='troc';
$identifiants=array('','bureau_sushiba','standard_sushiba','responsable_sushiba','cuisine_sushiba');
$passwords=array('','756b25da610ecf7fe6f751ccc9947f6a','pass-2','pass-3','pass-4');
$headers=array('','FAQ-bureau.php','FAQ-standard.php','FAQ-responsable.php','FAQ-cuisine.php');
if (!preg_match('#[a-z0-9]+#i',$pass) or !preg_match('#[a-z_]+#i',$login))
die('mot de passe ou login inexistant ou invalide');
$pass=md5($pass);
if ($key = array_search($login, $identifiants))
{
if ($passwords[$key]==$pass)
{
$header=$headers[$key];
$_SESSION['_login'] = $login;
$_SESSION['_pass'] =$pass;
header('location: '.$header);
exit();

}
else die ('mauvais mot de passe');
}
else die('mauvais login');

?>

12 réponses

Résumé de la discussion

Un script d'identification en PHP qui redirige les utilisateurs affiche une page blanche sur certaines configurations, signalant un problème lié à l'initialisation des sessions et à la gestion des identifiants. L'analyse montre que la valeur retournée par array_search et la présence d'une chaîne vide en première position influent sur la validation, ce qui peut masquer une redirection incorrecte. La solution consiste à tester le résultat avec if ($key !== false) et à vérifier login et mdp, en veillant à conserver la chaîne vide en index 0. Il faut aussi appeler session_start() au début et s'assurer que $_SESSION est disponible avant utilisation, afin d'éviter des notices et des blocages lors de l'identification et des erreurs d'accès.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. Gremy87 Messages postés 360 Statut Membre 38
     
    Bonjour,

    euh Waou.....

    je copie-colle ce script, page blanche.
    je met en commentaire successivement les lignes, page blanche
    j'arrive a la dernière ligne a mettre en commentaire, page blanche
    je met tout en commentaire et met un echo "coucou" en 1ere ligne, page blanche.

    juste Waou ^^
    0
    1. Patoch250 Messages postés 69 Statut Membre
       
      qu'est ce que ca veut dire?
      0
    2. Gremy87 Messages postés 360 Statut Membre 38
       
      la réponse est en dessous ^^
      0
  2. Gremy87 Messages postés 360 Statut Membre 38
     
    trouvé^^

    ca vient des balises php

    remplace <? par <?php et ca ira tout seul

    je dois avouer que ca fait peur au début ^^

    ca marche chez ktm620enduro parce que son serveur web/php doit etre configurer pour reconnaitre ces balises et pas le tien ; ) (ni le mien d'ailleurs^^)

    RISE OF THE GEEK IS COMMING SOON!!! BWAHAHAHAHA
    0
    1. Patoch250 Messages postés 69 Statut Membre
       
      c'est vrai que ça m'a fait peur ! merci beaucoup ca marche ! Niveau sécurité c'est comment?
      0
    2. Gremy87 Messages postés 360 Statut Membre 38
       
      je dois avouer que j'ai pas trop regarder le code mais ca me parait très correct =)
      0
    3. Patoch250 Messages postés 69 Statut Membre
       
      par contre quand je clique sur envoyer meme si je remplit pas le formulaire il m'affiche la page
      0
    4. Gremy87 Messages postés 360 Statut Membre 38
       
      j'ai copié le code, modifié la balise et ca m'as redirigé direct aussi. le reste je sais pas trop, je connais pas ton appli ;)
      0
    5. Patoch250 Messages postés 69 Statut Membre
       
      c'est juste un formulaire qui redirige selon ton login et mot de passe
      0
  3. Gremy87 Messages postés 360 Statut Membre 38
     
    euh ben oui c'est normal

    if ($key = array_search($login, $identifiants))
    cherche $login dans le tableau $identifiants et dans le tableau il y a '' donc si tu mets rien ca valide les tests et donc redirige

    0
    1. Patoch250 Messages postés 69 Statut Membre
       
      je ne vois pas très bien ce que tu veut dire
      0
    2. Patoch250 Messages postés 69 Statut Membre
       
      parce que sans ce vide pour la premiere ligne du tableau ca ne marche pas
      0
  4. Gremy87 Messages postés 360 Statut Membre 38
     
    if ($key = array_search($login, $identifiants))

    ce test regarde si dans le tableau $identifiants que tu as définit plus haut avec cette ligne:

    $identifiants=array('','bureau_sushiba','standard_sushiba','responsable_sushiba','cuisine_sushiba');

    si tu ne remplit pas ton formulaire $login va valoir '' (vide).
    ce vide EST dans ton tableau, la première valeur.

    donc le test va être validé, pareil pour le mot de passe et si l'on valide les 2 tests on est a la redirection.

    donc c'est normal que si tu ne remplis pas ton formulaire et que tu valides ca te rediriges

    compris?
    0
    1. Patoch250 Messages postés 69 Statut Membre
       
      oui mais quand j'enlève ce vide il me met mauvais login tout le temp
      0
    2. Patoch250 Messages postés 69 Statut Membre
       
      Pas de solution?
      0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Gremy87 Messages postés 360 Statut Membre 38
     
    *fais des tests* ^^
    0
  7. Gremy87 Messages postés 360 Statut Membre 38
     
    Bon je viens de tester tout ce plus en détail. la version de départ était bonne. il faut bien laisser la chaine vide en 1ere valeur car array_search renvoi la position de la chaine et vu que le tableau commence a 0 la valeur de retour sera 0 et le test ne sera pas validé.

    je viens de tester en remettant la chaine vide et en mettant un login mdp vide aussi, et ça me jette correctement. je ne vois pas pourquoi toi ça t'acceptais.
    0
    1. Patoch250 Messages postés 69 Statut Membre
       
      j'ai mi comme ca en ca me renvoi bien login ou mdp invalide ou inexistant mais faut bien que je lui donne une valeur au variable $login et $pass n'est ce pas?
      0
    2. Patoch250 Messages postés 69 Statut Membre
       
      <?php

      $login='';
      $pass='';
      $identifiants=array('','bureau_sushiba','standard_sushiba','responsable_sushiba','cuisine_sushiba');
      $passwords=array('','756b25da610ecf7fe6f751ccc9947f6a','pass-2','pass-3','pass-4');
      $headers=array('','FAQ-bureau.php','FAQ-standard.php','FAQ-responsable.php','FAQ-cuisine.php');
      if (!preg_match('#[a-z0-9]+#i',$pass) or !preg_match('#[a-z_]+#i',$login))
      die('mot de passe ou login inexistant ou invalide');
      $pass=md5($pass);
      if ($key = array_search($login, $identifiants))
      {
      if ($passwords[$key]==$pass)
      {
      $header=$headers[$key];
      $_SESSION['_login'] = $login;
      $_SESSION['_pass'] =$pass;
      header('location: '.$header);
      exit();

      }
      else die ('mauvais mot de passe');
      }
      else die('mauvais login');

      ?>
      0
  8. Gremy87 Messages postés 360 Statut Membre 38
     
    et bien ta valeur vient bien de ton formulaire. c'est bien en fait un $_POST['login'] et $_POST['pass'], non?
    0
    1. Patoch250 Messages postés 69 Statut Membre
       
      oui je crois
      0
    2. Gremy87 Messages postés 360 Statut Membre 38
       
      et bien normalement ca ne sera pas vide, et lorsque ca le sera, il sera jeté, tout vas bien non?
      0
    3. Patoch250 Messages postés 69 Statut Membre
       
      $_SESSION['_login'] = $login;
      $_SESSION['_pass'] =$pass;
      0
    4. Gremy87 Messages postés 360 Statut Membre 38
       
      c'est plutôt d'où viennent les valeurs de $login et de $pass qui est important
      0
    5. Patoch250 Messages postés 69 Statut Membre
       
      je met quoi comme valeur des variable $login et $pass?
      0
  9. Gremy87 Messages postés 360 Statut Membre 38
     
    <?php
    if (!isset( $_SESSION['_login']) && isset( $_SESSION['_pass']))
    die ('Invalide');
    }
    ?>
    0
    1. Patoch250 Messages postés 69 Statut Membre
       
      salut,
      je viens d'essayer j'ai plus d'erreur de syntaxe mais j'ai quand même accès à toutes les pages en tapant l'url
      0
    2. Patoch250 Messages postés 69 Statut Membre
       
      voila l'erreur qu'il m'affiche

      Notice: Undefined index: login in C:\Program Files\EasyPHP-5.3.1\www\INTRANET\templates\identification2.php on line 3

      Notice: Undefined index: mdp in C:\Program Files\EasyPHP-5.3.1\www\INTRANET\templates\identification2.php on line 4
      mot de passe ou login inexistant ou invalide
      0
  10. Gremy87 Messages postés 360 Statut Membre 38
     
    Bonjour,

    vérifie l'état de tes variables $_SESSION['_login'] et $_SESSION['_pass'] avec un print_r($_SESSION) et cherche pourquoi elles ont ces valeurs.

    tu verra quelle page les leur a donnée
    0
    1. Patoch250 Messages postés 69 Statut Membre
       
      je le met ou ca?
      0
    2. Gremy87 Messages postés 360 Statut Membre 38
       
      sur une page que tu appel via son adresse, la ou tu ne voudrais pas avoir accès en fait
      0
    3. Patoch250 Messages postés 69 Statut Membre
       
      je l'ai mis sur une des pages comme tu viens de me dire et voila ce que j'ai :
      Notice: Undefined variable: _SESSION in C:\Program Files\EasyPHP-5.3.1\www\INTRANET\templates\identification2.php on line 5
      0
    4. Gremy87 Messages postés 360 Statut Membre 38
       
      t'as du oublie le session_start() tout en haut de la page, non?
      0
    5. Patoch250 Messages postés 69 Statut Membre
       
      excuse moi encore mais sur quel page?
      0
  11. Gremy87 Messages postés 360 Statut Membre 38
     
    lol, bon je t'explique le fonctionnement des session parce que la t'as l'air perdu...

    pour que les sessions soient pris en comptes sur n'importe quelle page il faut que tout au debut, vraiment tout au debut, tu mette un
    <?php
    session-start();
    ?>

    a partir de la tu peux utiliser un tableau associatif qui s'appel $_SESSION[]

    donc pour pouvoir utiliser ce $_SESSION tu dois avoir mis le session_start()

    donc la met le session start tout en haut de la page ou tu as mis ca : print_r($_SESSION)
    0
    1. Patoch250 Messages postés 69 Statut Membre
       
      Ok merci, bon maintenant il m'affiche en haut de la page Array()
      0
    2. Gremy87 Messages postés 360 Statut Membre 38
       
      ok ça ça veut dire que tes variables de session n'existent pas donc

      <?php
      if (isset( $_SESSION['_login']) && isset( $_SESSION['_pass']))
      {
      }
      else
      {
      echo "Vous n'etes pas identifié";
      }
      ?>

      a la place du print_r($_SESSION)

      devrait te dire que tu n'est pas identifié.

      si ensuite tu redirige directement vers ta page d'identification, ca ira =)
      0
    3. Patoch250 Messages postés 69 Statut Membre
       
      Merci, par contre il ne manque pas quelque chose entre les deux accolade?
      <?php
      if (isset( $_SESSION['_login']) && isset( $_SESSION['_pass']))
      {
      }
      Parce que quand je met ca à la place de print_r($_SESSION) il m'interdit meme quand je me logue correctement
      0
    4. Patoch250 Messages postés 69 Statut Membre
       
      non c bon ca marche ! juste un petit détail j'ai mi ca dans mes pages

      <?php
      session_start();
      if (isset( $_SESSION['_login']) && isset( $_SESSION['_pass']))
      {
      }
      else
      {
      echo "Vous n'etes pas identifié";
      header("location: accueil.php") ;
      }


      ?>


      Niveau secu ca marche par contre j'ai pa le message echo "Vous n'etes pas identifié"; qui s'affiche
      0
  12. Gremy87 Messages postés 360 Statut Membre 38
     
    Quand tu te log correctement tu mets des valeurs a tes variables de session $_SESSION['_login'] et $_SESSION['_pass'].

    ensuite en haut de TOUTES les pages que tu ne veux pas avoir accès sans être identifié tu mets

    <?php
    session_start();
    if (isset( $_SESSION['_login']) && isset( $_SESSION['_pass']))
    {
    }
    else
    {
    header("location:tapage_didentification.php");
    }
    ?>
    //tout le code HTML de ta page

    si tu est identifié rien ne se passe et ta page s'affiche, si tu ne l'est pas tu est redirigé vers tapage_didentification.php

    ok?
    0
    1. Patoch250 Messages postés 69 Statut Membre
       
      ok pour ca mais par contre il n'y a pas de msg qui s'affiche informant l'utilisateur qu'il n'est pas connecté
      0
    2. Patoch250 Messages postés 69 Statut Membre
       
      c bon j'ai mis ca et ca marche bien !
      <?php
      session_start();
      if (isset( $_SESSION['_login']) && isset( $_SESSION['_pass']))
      {
      }
      else
      {
      echo '<p><b style="color:red">espace sécurisé</b><br />Connecté vous pour accéder à cette page</p>';
      include("accueil.php") ;
      exit();
      }
      ?>
      0
    3. Patoch250 Messages postés 69 Statut Membre
       
      Je te remercie ! Sans toi j'aurais mis 23 mois pour y arriver! Merci et surement à bientot sur le forum. Pettie question on sait jamais tu sais comment on installe phpBB en local?
      0
    4. Gremy87 Messages postés 360 Statut Membre 38
       
      http://www.phpbb-fr.com/

      t'as tous les tutos qu'il faut.

      de rien
      0
  13. Gremy87 Messages postés 360 Statut Membre 38
     
    pour ca dans ton header(location:....) tu rajoutes une variable GET

    exemple:
    header("location:tapage_didentification.php?nonident=true");

    et dans ta page d'identification ( celle-ci tapage_didentification.php )

    tu mets:

    if (isset($_GET['nonident']))
    {
    echo "<p>Vous n'estes pas identifié</p>";
    }
    0
    1. Patoch250 Messages postés 69 Statut Membre
       
      Encore merci à bientôt !
      0