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 :

Soucis lorsqu'on clique sur précédent


Sujet :

Langage PHP

  1. #1
    Lucas Panny
    Invité(e)
    Par défaut Soucis lorsqu'on clique sur précédent
    Bonjour,

    Lorsqu'on clique sur précédent, j'ai l'erreur
    Warning: include(bhbk/fr/values.php) [function.include]: failed to open stream: No such file or directory in /var/www/vhosts/mysite/httpdocs/index.php on line 3
    Je n'arrive à dénicher la vraie source du problème puisque bhbk/fr/values.php existe.
    Remarque aussi: le soucis du bouton back n'est que sous FF et Chrome, c'est OK sous IE et Safari

  2. #2
    Membre chevronné Avatar de guigo
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    612
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 612
    Par défaut
    Salut,
    tu dois avoir un pb de chemin !!! Je pense que tu le savais deja :-).
    Apres avoir fait précèdent retourne tu sur l'url que tu veux ?
    Verifie bien que tu ne soit pas dans le cas d'un include d'include, dans ce cas ton erreur pourrait venir de la.

    Guigo

  3. #3
    Lucas Panny
    Invité(e)
    Par défaut
    D'abord merci d'avoir réagi à mon post
    Si, le chemin existe, je ne comprends pourquoi ça marche avant puis on va dans une autre page et clic sur "Back", ça bogue avec ce message

    C'est pas je pense l'erreur d'include dans un include car le message serait comme ceci non "Fatal error: Cannot redeclare ..."

  4. #4
    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
    Par défaut
    Salut

    Théoriquement, ceci n'est pas lié au navigateur, car l'erreur (le include) est un mécanisme coté serveur, donc pas coté client.

    Peut être que sur IE et Safari, le message d'erreur ne débouche sur aucun visuel, mais le message y est malgré tout.
    Question d'interprétation du code HTML que renvoie l'erreur.
    Faudrait le vérifier dans le code source HTML (afficher la source).

    Ceci dit, peu importe.
    Comment le include est effectué, avec quel code ? (faudrait poster du code)
    S'il y a des variables, faudrait vérifier leurs valeurs (des echo).
    Peut être y a t-il un problème de droit (insuffisant) sur ce values.php.

  5. #5
    Lucas Panny
    Invité(e)
    Par défaut
    Citation Envoyé par RunCodePhp Voir le message
    Salut

    Théoriquement, ceci n'est pas lié au navigateur, car l'erreur (le include) est un mécanisme coté serveur, donc pas coté client.

    Peut être que sur IE et Safari, le message d'erreur ne débouche sur aucun visuel, mais le message y est malgré tout.
    Question d'interprétation du code HTML que renvoie l'erreur.
    Faudrait le vérifier dans le code source HTML (afficher la source).

    Ceci dit, peu importe.
    Comment le include est effectué, avec quel code ? (faudrait poster du code)
    S'il y a des variables, faudrait vérifier leurs valeurs (des echo).
    Peut être y a t-il un problème de droit (insuffisant) sur ce values.php.
    C'est sûr que c'est un problème au niveau php (serveur)
    Mais je trouve ça seulement bizarre qu'une page qu'on a déjà vu et qu'on revient dessus par bouton back et ça crashe après.
    Voilà le fichier php à erreur (line 3)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    <?php include("header1.php");?>
    <?php 
        include($gCheminPage); 
    ?>
    <?php include("footer1.php"); ?>
    $gCheminPage est obtenu par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    ................
        $gChemin         = $EntrepriseChemin . "/" . $ExerciceChemin . "/" . $LangueChemin;     // Synonyme2. Chemin pour un exercice donne de l'entreprise dans une langue donnée
        $gCheminPage     = $EntrepriseChemin . "/" . $ExerciceChemin . "/" . $LangueChemin . "/" . $Page;   // Chemin complet de la page en cours.
    Je précise que le chemin est OK.
    J'avais cru qu'il s'agit d'un include multiple j'ai remplacé l'include par include_once puis require_once mais niais

  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
    Par défaut
    Je précise que le chemin est OK.
    Je ne compte pas le nombre de fois où j'en étais sûr de tel truc ou tel autre.

    Faut faire un echo de tes variables $gChemin et $gCheminPage, c'est le minimum.
    Ensuite, essai provisoirement de mettre "en dur" ce chemin, et voir ce que ça donne.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <?php include("header1.php");?>
    <?php 
        include('mettre/le/chemin/en/dur/et/complet/values.php'); 
    ?>
    <?php include("footer1.php"); ?>
    Mettre le même chemin que celui génère $gCheminPage.

    Bref ... faut faire un minimum de débuggage.

  7. #7
    Lucas Panny
    Invité(e)
    Par défaut
    Vous aviez tous raison, le message d'erreur indique qu'il y a erreur, c'est sûr et je me suis encore entêté
    Pourquoi je n'ai pas utilisé la technique de débogage php => echo?
    L'erreur se situait dans la génération de $gCheminPage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $gCheminPage     = $EntrepriseChemin . "/" . $ExerciceChemin . "/" . $LangueChemin . "/" . $Page;   // Chemin complet de la page en cours.
    J'obtiens le même $EntrepriseChemin, $ExerciceChemin que la page avant recul (back) car les valeurs de ces variables sont obtenus par $_GET
    Est-ce normal ça?
    En fait, sous IE et Safari, un back ou forward ne recharge pas du tout la page, aucun transfert réseau n'est fait
    Pour FF et Chrome, un back et forward semble être différent de F5 (refresh) mais recharge à moitié la page, je ne pige plus

  8. #8
    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
    Par défaut
    Là, je ne vois pas vraiment.
    Mais tu ne dis pas explicitement quelles variables présentent des erreurs, tu n'as posté se que renvoie $gCheminPage par exemple.
    On ne sait si elle contient rien ou une valeur non désirée.

    Comme ça, je pisterais la ou les variables qui prosent problèmes, faire des echo toujours.
    Puis comme certaine sont initialisées en GET, faudrait faire un print_r($_GET) dès la 1ère ligne de code (pour éviter les pièges).

    Est-ce que dans tes pages où tu fais des retours il y a des header() ?
    Des formulaires ?

  9. #9
    Lucas Panny
    Invité(e)
    Par défaut
    Pas de header() ni de form car c'est un site php statique avec des URL du genre index.php?e=1&a=08 et ?p=message, etc.

    Voici le scénario de l'erreur;
    On est là: index.php?p=values
    dont le code contient <?php include($gCheminPage); ?>
    Puis on clique sur un lien dans cette page et on va à index.php?e=6&a=06&l=fr&p=index
    Un recul (back) doit ramener à: index.php?p=values
    Sauf que là $gCheminPage a pris les variables de la page avant recul index.php?e=6&a=06&l=fr&p=index

    Or les variables dans $gCheminPage = $EntrepriseChemin . "/" . $ExerciceChemin . "/" . $LangueChemin . "/" . $Page; obtiennent leurs valeurs de $_GET, je pense que c'est un méchanisme erroné des reculs/forwards ça non?
    Bon, comment ces variables obtiennent leurs valeurs:
    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
    <?php
        session_start();
      if (isset($_GET["e"])) {
            switch ($_GET["e"]) {
    ................................
                case "18" : 
                    $EntrepriseChemin = "lama"; 
                    break;
                case "19" : 
                    $EntrepriseChemin = "afh_services"; 
                    break;
                case "20" : 
                    $EntrepriseChemin = "afh_oi"; 
                    break;
                case "21" : 
                    $EntrepriseChemin = "sci_olympe"; 
                    break;
                case "22" : 
                    $EntrepriseChemin = "attica"; 
                    break;
                case "23" : 
                    $EntrepriseChemin = "atz_paris"; 
                    break;
                case "24" : 
                    $EntrepriseChemin = "atz_renne";
                    break;
               case "25" : ;
                    $EntrepriseChemin = "atz_bordeaux"
                   break;
                default : 
                    $EntrepriseChemin = "atz_lyon";
            }
        } else {
            $_SESSION["e"] = "1";
            $EntrepriseChemin = "atz_group";
        }
    ..........................
    Désolé si je ne peux montrer tout

  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
    Par défaut
    Si tu passe des paramètres en GET, c'est plus un si te statique. Mais c'est pas important.

    Tu donne des infos utiles, ok, mais pour ma part il manque l'essentiel, soit ce que contient $_GET, car ton problème a l'air directement lié (même si ça viendrait d'un caprice des navigateurs).
    Il faut faire un print_r($_GET), et ça en tout 1er (enfin, juste après le session_start sinon ça va faire planter le code), en en espérant qu'il n'y rien comme code logique avant ce session_start (à cause des pièges).
    En somme faut voir comment évolue ce GET, et particulièrement certaine valeur clés par rapport à celle du include().
    En faite, en ne vérifiant pas ça, rien ne dit finallement que la valeur en GET soit bonne au départ et qu'un code par là modifie une variable en court de route ce qui déboucherait sur une mauvaise valeur.

    Ensuite, tu n'as toujours pas poster ce que contient $gCheminPage, et ça dans les 2 cas : quand c'est correcte, et quand c'est pas correcte.


    Aussi, qu'à tu comme balises meta dans ton entête (le <head></head>), n'y aurait il pas quelque chose en rapport avec l'historique ?
    De même, utilise tu un header(), pas une redirection, mais en rapport avec le cache ?
    Ou du code Javascript en rapport avec l'historique ?

  11. #11
    Lucas Panny
    Invité(e)
    Par défaut
    Je répète le scénario de l'erreur avec le contenu de $gCheminPage.
    1- On est d'abord sur: index.php?p=values (la page sur laquelle lorsqu'on y recule affiche l'erreur)
    => $gCheminPage = bhbk/06/fr/values.php
    dont le code contient <?php include($gCheminPage); ?>
    2- Puis on clique sur un lien dans cette page et on va à index.php?e=6&a=06&l=fr&p=index
    3- Un recul (back) doit ramener à: index.php?p=values
    Sauf que là $gCheminPage a pris les variables de la page avant recul index.php?e=6&a=06&l=fr&p=index
    => $gCheminPage = battica/06/fr/values.php qui n'existe pas

    Là, le soucis est donc que le recul sous FF et Chrome c'est donc si on a fait passer index.php?e=6&a=06&l=fr&p=index à index.php?p=values
    Or, les composants du chemin $gCheminPage sont obtenus par $_GET et là c'est comme si FF et Chrome lui envoie des paramètres GET alors que ce n'est qu'un recul

  12. #12
    Membre Expert
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Par défaut
    Salut,

    Ce ne sont pas ces lignes qui cassent le code ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    case "25" : ; // Le point virgule en trop
    	$EntrepriseChemin = "atz_bordeaux" // Le point virgule en moins
    À remplacer par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    case "25" :
    	$EntrepriseChemin = "atz_bordeaux";
    ?

  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
    Par défaut
    Or, les composants du chemin $gCheminPage sont obtenus par $_GET et là c'est comme si FF et Chrome lui envoie des paramètres GET alors que ce n'est qu'un recul
    Oui, je vois bien le problème, et malheureusement je n'est pas d'explications.
    J'ai jamais remarqué ça d'ailleurs.

    Tu indique de que l'URL affiche, Ok, mais quand bien même cette URL comporte une erreur de logique, un comportement anormal, il aurait été bien d'afficher explicitement ce que contient $_GET avec un print_r().
    Ca, c'est mon avis, c'est le réflexe que j'aurais.

    Sinon, il serait pas mal de mettre un point d'arrêt à ta page, mais pas à n'importe quel moment.
    L'idée que j'ai, elle est ce quelle est.
    Tu navigue jusqu'à l'étape 2, donc juste avant de faire un back.
    Ensuite, rajouter un point d'arrêt dans la page index.php suivi d'un print_r($_GET).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // Code à rajouter juste avant le retour
    print_r($_GET);
    exit(); // Point d'arrêt
    Ensuite on clique sur Back du navigateur, et on constate ce qui est retourné/affiché.


    Aussi, là c'est à titre personnel, et même si cela ne change rien, j'aurais évité des noms trop simplistes des paramètres comme : e,a,l,p.
    J'aurais mis des noms explicite : p pour page, l pour langue (ou lang), etc ...

Discussions similaires

  1. Réponses: 4
    Dernier message: 06/01/2008, 00h39
  2. Réponses: 2
    Dernier message: 11/05/2007, 11h37
  3. afficher un message de confirmation quand l'utilisateur clique sur précédent
    Par gunsdeluxe dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 08/03/2007, 18h27
  4. Rafraichir la page quand l'utilisateur clique sur précédent
    Par BernardT dans le forum Balisage (X)HTML et validation W3C
    Réponses: 5
    Dernier message: 17/03/2006, 16h09
  5. délogage et clique sur précédent
    Par flo456 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 14/12/2005, 15h04

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