Partage
  • Partager sur Facebook
  • Partager sur Twitter

page blanche pour certains utilisateurs

    9 avril 2021 à 15:10:34

    Bonjour, 

    Je patauge dans la semoule alors je viens crier mon problème, à la recherche d'une idée miraculeuse :-°

    Sur mon site internet, on se connecte via un portail public. Une fois les identifiants de connexion remplies, l'utilisateur reçoit un URL via sa messagerie qui le dirige vers le cœur du site (double authentification). L'accueil du site c'est la page : profil.php

    Problème : La page profil.php se charge bien sauf pour deux utilisateurs. Ils voient une page blanche vide à l'adresse profil.php

    De mon côté, impossible de reproduire le problème sur mon PC (ni sur les pc à dispo) et ces utilisateurs sont des clients, donc je ne peux pas creuser à la mano, avec le Dev Tool. (j'aimerais éviter de le faire devant eux pour avoir l'air de montrer que je sais ce que je fais... ) J'ai exactement les mêmes caractéristiques de compte qu'eux (même droit etc)

    La page profil.php : 

    <?php
    session_start();
    include("debut.php");
    include_once("connexion.php");
    $db_authentification = getConnectBdd_authentification();
    
    if (isset($_GET["key_pass"]) && isset($_GET["email"]) && isset($_GET["action_pass"]) && ($_GET["action_pass"]=="connect"))
    {
       echo '1.from email /';
       $key = $_GET["key_pass"];
       $email = $_GET["email"];
       $action_pass = $_GET["action_pass"];
    
       $select_chekkey = $db_authentification->prepare("SELECT email,key_pass, expDate, action_pass FROM check_key WHERE (email = ? AND action_pass = ? AND key_pass=? )");
       $select_chekkey->execute(array($email, $action_pass, $key));
       $result_right_utilisateur = $select_chekkey->fetch();
    
       $date_today= mktime(date("m") ,date("d"), date("Y"));                      
       $date_today = date("Y-m-d",$date_today);
       $date_today = strtotime($date_today);
       $date_expdate = strtotime($result_right_utilisateur['expDate']);
       $nb_jours = ($date_today - $date_expdate); 
       if (empty($result_right_utilisateur))
       {
          $error_link_message = 'Vous essayez d\'utiliser un lien expiré. Merci de recommencer votre connexion.';
       } else 
       {
          if ($nb_jours != 0) //si ce n'est pas le meme jour
          {
             $error_link_message = 'Vous essayez d\'utiliser un lien expiré, il n\'est valable qu\'un jour. Merci de recommencer votre connexion.';
          } else {
          // action du lien
             echo '2. valid link /';
             $del_key = $db_authentification->prepare("DELETE FROM check_key WHERE (email = ? AND action_pass = ?)");
             $del_key->execute(array($email, 'connect'));
                                 
             $link_message = "Connexion réussie";
    
             //définition des variables session necessaires 
          }
       }
       ?>
       <!-- function to delete the GETs in the url -->
       <script>    
           if(typeof window.history.pushState == 'function') {
               window.history.pushState({}, "Hide", "https://efor-clinicaltrials.com/profil.php");
           }
       </script>
       <?php
       if ((isset($error_link_message)) AND ($error_link_message!=""))
       { 
          echo '<script>location.href="index.php?error='.$error_link_message.'";</script>' ;
          exit();
       }
    }
    else {
       echo '0./not coming from an email link';
    }
    ?>
    
    <?php
    if ((!isset($_SESSION['email'])) OR (($_SESSION['droit'] != 'INVEST') AND ($_SESSION['droit'] != 'ADMIN') AND ($_SESSION['droit'] != 'PROMO') AND ($_SESSION['droit'] != 'MONITO')))
    {
       $error_link_message = "Vous n'êtes pas autorisé à naviguer sur la plateforme.";
       echo '<script>location.href="index.php?error='.$error_link_message.'";</script>' ;
       exit();
    } else
    {
       echo '5./';
       include("menu.php");
       include_once("is_log_action.php");
       is_log_action();
       include_once("log.php");
       addLogEvent($_SESSION['email'],'is connected');
       echo '6.page loading/';
       ?>
       <body>
       <!-- Top content -->
       CONTENT
    </body>
    <?php
    echo '7. end load/';
    }
    echo '00. file end/';
    ?>

    Je définis le <head> dans le fichier debut.php (inclusion tout au début du fichier profil.php)

    <!DOCTYPE html>
    
    <html>
    <head>
    	<meta charset="utf-8">
            <meta http-equiv="X-UA-Compatible" content="IE=edge">
            <meta name="viewport" content="width=device-width, initial-scale=1">
            <link rel="stylesheet" href="assets/css/normalize.css" />
            <link rel="stylesheet" media="screen" type="text/css" title="design" href="assets/css/design.css" />       
            <link rel="stylesheet" href="assets/css/w3.css">
            <link rel="stylesheet" href="assets/font-awesome/css/cyrillic-text.css">
            <link rel="stylesheet" href="assets/bootstrap/css/bootstrap.min.css">
            <link rel="stylesheet" href="assets/font-awesome/css/font-awesome.css">
            <link rel="stylesheet" href="assets/css/animate.css">
            <link rel="stylesheet" href="assets/css/style.css">
            <link rel="shortcut icon" href="assets/ico/favicon.png">
    </head>
    <script src="assets/js/jquery-1.11.1.min.js"></script>
    <script src="assets/bootstrap/js/bootstrap.min.js"></script>
    <script src="assets/js/jquery.backstretch.min.js"></script>
    <script src="assets/js/wow.min.js"></script>
    <script src="assets/js/waypoints.min.js"></script>
    <script src="assets/js/scripts.js"></script>
    

    Ce que je ne comprends pas, c'est que j'ai la preuve que l'utilisateur est entré dans la boucle où se situe le <body>. Car juste avant (dans la même boucle) (après le echo '5./'), j'ajoute le mail de l'utilisateur dans un fichier de log et ca écrit bien dedans . Mais la page est vide ...

    J'ai ajouté des 'echo' à chaque boucle de mon code et je vais demander à l'utilisateur de ressayer de se connecter pour voir quel message il voit. Mais je pense que ça ne va pas beaucoup m'avancer. 

    Les deux utilisateurs utilisent Chrome (comme moi), avec des PC windows, pas très récent, ils utilisent peut-être la même connexion internet (mais ca fonctionne pour d'autres utilisateurs de la bas)

    Je crois que j'ai tout dit, si vous avez une lueur d'idée n'hésitez pas à venir la partager :D



    -
    Edité par Lucile21 9 avril 2021 à 15:14:15

    • Partager sur Facebook
    • Partager sur Twitter
      11 avril 2021 à 14:04:57

      Bonjour les redirection étant faite en Javascript arrivé sur une page blanche peut se produire sur un navigateur ou l'utilisateur à  soit manuellement désactivé le Javascript soit un navigateur assez anciens pour ne pas supporté ce javascript là. (où ne supportant pas javascript tout court).

      Je ne peut pas testé le comportement de profil lorsque le lien et réellement valide pour le testé de ton côté tu peut dans les paramètre de ton navigateur retiré l'autorisation d'exécuté du javascript pour ton site voir:

      Et testé de chargé un lien vers profil qui lui et valide de mon côté je ne peut chargé que des lien non valides parce que je ne peut pas m'inscrire (la contrainte de l'addresse email qui doit avoir un format spécifique), mais avec un lien vers profil (non valide) constitué uniquement de:

      https://efor-clinicaltrials.com/profil.php

      Le navigateur charge une page blanche constitué ainsi:



      Je ne trouve pas d'où vient le echo 0./

      Il et présent à la fin du view-source du document cela ressemble à un echo de debug en PHP.

      Peut être que les 2 utilisateurs arrivent sur page blanche parce que soit leur navigateur block les redirection,

      soit il ne supporte pas le javascript (très anciens navigateur quand même) soit il l'ont manuellement bloqué.

      Peut être qu'intégré les redirections côté serveur pour les rendres indépendante du navigateur via la fonction header de PHP pourrait réglé ce problème.


      -
      Edité par SamuelGaborieau3 11 avril 2021 à 14:06:31

      • Partager sur Facebook
      • Partager sur Twitter

      suggestion de présentation.

        12 avril 2021 à 17:02:23

        Bonjour, merci d'avoir investigué sur mon problème :) 

        > quand je teste profil.php 

        >>avec le javascript désactivé, en effet la redirection ne se fait pas. (le echo 0./ correspond '0./not coming from an email link'; ligne 57; le code de la page n'était pas exactement le même que )

        >>avec le javascript activé, la redirection fonctionne

        par contre :

        > quand je teste avec un lien valide, javascript ou pas, je n'ai pas de beug. La page et les variables se chargent bien

        Exemple avec le javascript désactivé  :

        Donc j'en conclus que le javascript n'est pas la source de mon problème ?

        J'ai ensuite changer les redirections avec des headers.Cette fois, javascript activé ou pas, toutes les redirections sont fonctionnelles (lien valide ou non)

        Je ne peux pas te donner les accès de connexion/d'inscription pour des raisons de sécurité. Cependant je peux t'envoyer en mp un lien unique (mais valable qu'un jour). Dis moi si tu veux bien regarder ?

        -
        Edité par Lucile21 12 avril 2021 à 17:03:36

        • Partager sur Facebook
        • Partager sur Twitter
          13 avril 2021 à 10:38:25

          Bonjour, effectivement vue le comportement que tu reçoit Javascript ne doit pas être directement le problème (en tout cas pas au niveau des redirections), je n'ai pas de "vraie" autre idée:(...

          Je me disais dans un premier temps que comme le beug arrive uniquement chez certains client le problème venant forcément de Javascript (où d'un langage côté client), mais peut être un problème PHP qui arrive que dans un certains contexte.

          Le seul autre morceau de code qui me fait un peut tilté et la ligne  16 qui fetch des données utilisateurs dans la base de données en fonction des variables présente dans l'URL:

          $result_right_utilisateur = $select_chekkey->fetch();

          Le résultat de ce fetch et immédiatement exploité pour calculé une notion de temps écoulé avec des date via:

             $date_today= mktime(date("m") ,date("d"), date("Y"));                     
             $date_today = date("Y-m-d",$date_today);
             $date_today = strtotime($date_today);
             $date_expdate = strtotime($result_right_utilisateur['expDate']); // exploite le fetch précédent
             $nb_jours = ($date_today - $date_expdate);


          mais sur la ligne juste en dessous tu vérifie que le fetch na pas renvoyé une donnée vide via empty (ligne 23):

          if (empty($result_right_utilisateur))

          Si $result_right_utilisateur peut être vide la ligne qui définit $date_expdate plante car cela revient à faire:

          $date_expdate = strtotime(NULL['expDate']);

          La condition qui vérifie la validité du fetch devrait être fait avant d'exploité le résultat je pense.
          Peut-être que certains client arrive dans ce cas de figure où le fetch à renvoyé NULL et que PHP à planté,

          En fonction des paramètres que tu utilises en production les messages d'erreurs/warnings de PHP peuvent ne pas s'affiché,

          mais si l'erreur et bloquante la suite du code n'est pas interprété et le contenue n'est pas généré par PHP (ce qui peut expliqué la page blanche).

          En principe si tu essaie d'utilisé un lien qui à expiré tu devrais arrivé dans ce block là:

          if (empty($result_right_utilisateur)) {
                $error_link_message = 'Vous essayez d\'utiliser un 
              lien expiré. Merci de recommencer votre connexion.';
          }

          Mais lorsque le lien et valide tu le supprime réellement dans la base de donnée (ligne 34/35):

                   echo '2. valid link /';
                   $del_key = $db_authentification->prepare("DELETE FROM check_key WHERE (email = ? AND action_pass = ?)");
                   $del_key->execute(array($email, 'connect'));

          Alors peut être que si tu utilise une première fois un lien qui n'est pas expiré (le code fonctionne le lien et supprimé) et que ensuite tu le ré utilise quand il à expiré

          Le fetch du $select_checkkey renvoi NULL (car le lien à déjà été supprimé) et sont exploitation via $result_right_utilisateur['expDate'] déclenche une erreur.

          Pour que le fetch du $select_checkkey soit fait il faut juste que les donnée existe dans l'URL (ligne 7):

          if (
          	isset($_GET["key_pass"]) &&
              isset($_GET["email"]) &&
              isset($_GET["action_pass"]) &&
              ($_GET["action_pass"]=="connect")
          ) {
          // ...
          }

          ça n'assure pas que la donnée existe en base de donnée.

          Peut être que les deux client qui arrivent sur page blanche n'ont pas bien compris qu'il fallait re généré le lien et qu'il essaie de ré utilisé le même à chaque fois (un lien qui à été supprimé) et qu'il rentre dans ce cas là et que les autres client n'ont pas essayé de ré utilisé un lien qui à déjà était supprimé et ne rencontre pas ce problème.

          Je ne suis pas sur que le problème vienne de là c'est le seul autre début d'idée que j'ai :).

          Si le problème persiste plus de gens seront en capacité de t'aidé sur la partie PHP du forum que sur la partie HTML/CSS, tu peut essayé de ré ouvrir le sujet sur la partie PHP peut être.

          -
          Edité par SamuelGaborieau3 13 avril 2021 à 11:02:43

          • Partager sur Facebook
          • Partager sur Twitter

          suggestion de présentation.

          page blanche pour certains utilisateurs

          × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
          × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
          • Editeur
          • Markdown