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 :

Empecher une page de s'afficher plusieurs fois


Sujet :

Langage PHP

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 33
    Points : 25
    Points
    25
    Par défaut Empecher une page de s'afficher plusieurs fois
    Bonjour,
    Avec les variables sessions j'essaie d'empecher un utilisateur d'ouvrir deux fois la même page dans un autre onglet.
    Seulement le problème c'est que $_SESSION['visite'] est automatiquement remis à 0 lorsque j'ouvre un autre onglet or d'après ce que j'ai compris les variables de sessions sont liées aux navigateurs et non aux onglets.
    Voici le code en question ...
    Merci d'avance

    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
    if ($_GET['p'] == "validationpointentier.php") {
    ?>
                <script type="text/javascript">
                    function visiter()
                    {
                    <?php $_SESSION['visite'] = 0; ?>;
                    }
                window.onbeforeunload = function (){visiter()};
                </script>
    <?php
                if ($_SESSION['visite'] != 1) {
                    include("./controleur/$_GET[p]");
                    $_SESSION['visite'] = 1;
                } else {
                    echo "Vous ne pouvez pas visiter deux annonceurs en même temps";
                }
    }

  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
    Tu ne peux pas mettre du PHP dans une fonction Javascript.
    Il faudrait passer par Ajax.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 33
    Points : 25
    Points
    25
    Par défaut
    Oui cette partie ne fonctionnait pas car le php et exécuté sur le serveur et le JavaScript sur le client, mais le problème ne venait quand même pas de la.
    Après plusieurs essais je n'ai toujours pas réussi à faire marcher les variables de sessions d'un onglet à l'autre.
    Du coup j'ai voulu passer par la base de donnée. J'en reviens donc au topic juste au dessus de moi ^^ sauf que je ne voudrais pas utilisé d'ajax mais juste du java script.

    J'ai donc mon fichier java script qui s'execute quand la page se ferme :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    <script type="text/javascript">
            function visiter()
            {
                window.open('./controleur/regarde.php');
            }
            window.onbeforeunload = function (){visiter()};
        </script>

    et mon fichier php regarde.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    session_start();
     
    $requete = "Update ...";
    $result = $db->query($requete);
    ?>
    <script type="text/javascript">
        window.close()
    </script>

    Cependant ça ne fonctionne pas, et je ne vois pas vraiment l'erreur ...

  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
    mais le problème ne venait quand même pas de la
    si puisque ta variable en session était toujours remise à zéro.

    Dans ton second code, je ne vois pas la partie qui empêche l'onglet.

    Je ne vois pas pourquoi tu ne veux pas utiliser Ajax ... ce que tu fais est un pseudo-ajax-moche.
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 33
    Points : 25
    Points
    25
    Par défaut
    @code 1
    J'ai du mal à comprendre pourquoi il serait toujours remis à 0, mais tu as raison vu que c'était le cas ^^

    @code 2
    En fait j'ai mis une variable dans la base de donnée. Donc dès qu'il clic je passe la variable à true, et je fais un teste pour savoir avant d'afficher la page si c'est a true ou non. Bref ça fonctionne, sauf que mon problème est de repasser cette variable à false grâce au code que j'ai mis ci dessus.

    Et je n'utilise pas ajax car je ne connais pas du tout, j'ai regarder sur le net et je me suis très vite perdu, la méthode est surement moche mais au moin je la comprends ^^, sauf qu'elle ne fonctionne pas, j'ai l'impression qu'on ne peux pas ouvrir une page sur l'événement window.onbeforeunload ...

  6. #6
    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
    @code 1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <?php $_SESSION['visite'] = 0; ?>;
    Cette ligne est toujours exécutée au début du code.

    Pour ajax :
    http://siddh.developpez.com/articles/ajax/
    En resumé, l'objet javascript xmlhttprequest te permet d'executer des scripts PHP à la demande de javascript (donc sans faire des ouvertures/fermetures de page).
    N'oubliez pas de consulter les FAQ PHP et les cours et tutoriels PHP

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 33
    Points : 25
    Points
    25
    Par défaut
    @code1
    Hmm oki, merci


    Bon si l'ajax est la seul solution, je vais me plonger dedans

  8. #8
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2011
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 33
    Points : 25
    Points
    25
    Par défaut
    Évidemment ça ne fonctionne pas du premier coup ^^.
    Donc en gros j'ai copier coller leur exemple en remplaçant juste la page que je souhaite ouvrir.

    Code JS :
    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
    <script type="text/javascript">
            function getXhr(){
                var xhr = null;
                if(window.XMLHttpRequest) // Firefox et autres
                    xhr = new XMLHttpRequest();
                else if(window.ActiveXObject){ // Internet Explorer
                    try {
                        xhr = new ActiveXObject("Msxml2.XMLHTTP");
                    } catch (e) {
                        xhr = new ActiveXObject("Microsoft.XMLHTTP");
                    }
                }
                else { // XMLHttpRequest non supporté par le navigateur
                    alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
                    xhr = false;
                }
                return xhr
            }
     
            function visiter()
            {
                var xhr = getXhr()
                xhr.onreadystatechange = function(){
                    // On ne fait quelque chose que si on a tout reçu et que le serveur est ok
                    if(xhr.readyState == 4 && xhr.status == 200){
                        alert(xhr.responseText);
                    }
                }
     
                xhr.open("GET","./controleur/regarde.php",true);
                xhr.send(null);
            }
            window.onbeforeunload = function (){visiter()};
        </script>
    Code PHP :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <?php
    session_start();
    $requete = "update ....";
    $result = $db->query($requete);
    echo "FINIS";
    ?>
    Donc logiquement je devrais voir apparaître "Finis" dans une boite de dialogue. Mais je ne recrois rien, et le update ne c'est pas fait non plus. Le problème viendrait donc du côté de l'ajax ...

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 16/05/2014, 15h55
  2. Crosstab s'affiche plusieurs fois
    Par soumou dans le forum iReport
    Réponses: 9
    Dernier message: 23/09/2008, 00h57
  3. Réponses: 6
    Dernier message: 04/06/2008, 15h03
  4. [FLASH 8] Afficher plusieurs fois le même clip
    Par Devil Shark dans le forum Flash
    Réponses: 16
    Dernier message: 27/02/2007, 08h07
  5. [VB6] Empêcher une fenêtre de s'ouvrir plusieurs fois ?
    Par cotmar dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 05/04/2006, 14h20

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