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 :

Redondance incrémentation dans Compteur [PHP 5.0]


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 147
    Points : 52
    Points
    52
    Par défaut Redondance incrémentation dans Compteur
    Bonjour

    J'ai mis en place un compteur dans un code PHP dont voici le principe:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?php
    // ...
    // Compteur de demandes
    $fp = fopen("compteur.txt","r+"); // 1.On ouvre le fichier en lecture/écriture
    $nbvisites = fgets($fp,11);       // 2.On récupère le nombre dans le fichier
    $nbvisites++;                     // 3.On incrémente le nombre de visites(+1)
    fseek($fp,0);                     // 4.On se place en début de fichier
    fputs($fp,$nbvisites);            // 5.On écrit dans le fichier le nouveau nb
    fclose($fp);                      // 6.On ferme le fichier
    // Rediriger vers la page index
    echo "<SCRIPT LANGUAGE='JavaScript'>document.location.href='index.html' </SCRIPT>";
    ?>
    Le problème est que le compteur s'incrémente plusieurs fois au lieu de s'incrémenter qu'une seule fois lorsqu'on passe une fois dans le code.

    Comment empêcher une redondance d'incrémentation ?

    Merci

    Cordialement

  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
    Comment est appellé ce code ?

  3. #3
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 147
    Points : 52
    Points
    52
    Par défaut re
    Je l'appelle directement par un lien http:

    exemple:http://....../compteur.php

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Par "s'incrémente plusieurs fois", tu veux dire que tu ouvres la page une fois et ton compteur avance de 3 ou 4, ou tu ouvres plusieurs la page et à chaque fois ça incrémente de 1.

  5. #5
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 147
    Points : 52
    Points
    52
    Par défaut re
    Quand j'ouvre la page une fois le compteur s'incrémente de 2 ou 3...

  6. #6
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Bizarre... J'ai essayé sans la redirection Javascript et en faisant à un echo($nbvisites); à la place, et ça marche parfaitement bien.

    Est-ce que tu as aussi le problème sans la redirection ?

  7. #7
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 147
    Points : 52
    Points
    52
    Par défaut re
    J'ai essayé en local et le problème ne semble pas se produire.

    Mais cela se produit lorsqu'il est posé sur le serveur distant (Chez Free)

    Voilà le codage un peu plus développé. Dans chaque cas il y un traitement différent qui correspond à mes besoins:
    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
     
        // lecture de l'ip en cours
        $ip = isset($_SERVER['REMOTE_ADDR']) ? trim($_SERVER['REMOTE_ADDR']) : '';
        $ip1 = $ip;
        $ip = ip2long($ip);
     
            $filename = 'ips/'.$ip.'.txt';  // Nom du fichier avec IP
            if (file_exists($filename))  // Test si fichier existe
            {
                //Cas 1 - j'ai enlevé du code pour une meilleur compréhension
                // Dans chaque cas il y a un codage différent
                // Compteur de demandes
                $fp = fopen("compteur.txt","r+"); // 1.On ouvre le fichier en lecture/écriture
                $nbvisites = fgets($fp,11);       // 2.On récupère le nombre dans le fichier
                $nbvisites++;                     // 3.On incrémente le nombre de visites(+1)
                fseek($fp,0);                     // 4.On se place en début de fichier
                fputs($fp,$nbvisites);            // 5.On écrit dans le fichier le nouveau nb
                fclose($fp);                      // 6.On ferme le fichier
     
    			// Rediriger vers la page index
    			echo "<SCRIPT LANGUAGE='JavaScript'>document.location.href='index.html' </SCRIPT>";
     
            } else
                        // Cas 2  - j'ai enlevé du code pour une meilleur compréhension
                        // Compteur de demandes
                            $fp = fopen("compteur.txt","r+"); // 1.On ouvre le fichier en lecture/écriture
                            $nbvisites = fgets($fp,11);       // 2.On récupère le nombre dans le fichier
                            $nbvisites++;                     // 3.On incrémente le nombre de visites(+1)
                            fseek($fp,0);                     // 4.On se place en début de fichier
                            fputs($fp,$nbvisites);            // 5.On écrit dans le fichier le nouveau nb
                            fclose($fp);                      // 6.On ferme le fichier
     
    			            // Rediriger vers la page index
    			            echo "<SCRIPT LANGUAGE='JavaScript'>document.location.href='index.html' </SCRIPT>";
    ?>
    Donc je ne vois pourquoi il y a redondance.

    Merci

  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
    Pourquoi le code du compteur est repeté dans le if et dans le else ?

  9. #9
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 147
    Points : 52
    Points
    52
    Par défaut Re
    C'est mon code qui nécessite cela.

    Les 2 cas sont différents mais nécessite l'incrémentation du compteur tout de même.


    Je ne peux pas le coder qu'une seule fois puisque je dois sortir vers ma page index selon le cas 1 o u 2 !!!

  10. #10
    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
    Dans tous les cas tu fais l'incrementation et la redirection donc ces deux elements pourraient être mis une seule fois apres le test.

  11. #11
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 147
    Points : 52
    Points
    52
    Par défaut re
    Oui en effet, cela est envisageable et serait mieux...

    Je vais revoir mon code pour arrivé à cette fin et voir si cela améliore l'incrémentation

    je reviendrai ...

    Merci

  12. #12
    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
    Est-ce que tu as essayé sans redirection comme te l'a indiqué Celira ?

  13. #13
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 147
    Points : 52
    Points
    52
    Par défaut
    oui j'ai essayé et j'ai eu le problème

  14. #14
    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
    Bon quand même c'est plus propre de faire une redirection HTTP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    header('Location: index.html');
    exit();

  15. #15
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 147
    Points : 52
    Points
    52
    Par défaut
    ok merci, je vais tenter...

    Surtout voir demain comment n'avoir l'incrémentation et redirection qu'une seule fois dans mon code

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
     
    <?php
     
        // lecture de l'ip en cours
        $ip = isset($_SERVER['REMOTE_ADDR']) ? trim($_SERVER['REMOTE_ADDR']) : '';
        $ip1 = $ip;
        $ip = ip2long($ip);
     
            $filename = 'ips/'.$ip.'.txt';  // Nom du fichier avec IP
            if (file_exists($filename))  // Test si fichier existe
            {
                    $ip_blacklist = file('ips/'.$ip.'.txt');
     
                    // test si l'ip existe dans le fichier
                    if ( $ip == $ip_blacklist[0] )
                    {
                            //Code 1
                            //.................
                            //.................
                                            // Compteur de demandes
                                            $fp = fopen("compteur.txt","r+"); // 1.On ouvre le fichier en lecture/écriture
                                            $nbvisites = fgets($fp,11);       // 2.On récupère le nombre dans le fichier
                                            $nbvisites++;                     // 3.On incrémente le nombre de visites(+1)
                                            fseek($fp,0);                     // 4.On se place en début de fichier
                                            fputs($fp,$nbvisites);            // 5.On écrit dans le fichier le nouveau nb
                                            fclose($fp);                      // 6.On ferme le fichier
     
    			                            // Rediriger vers la page index
    			                            header('Location: index.html');
                                            exit;
                     }
            } else
                        // Code 2
                        //.....................
                        //....................
                            // Compteur de demandes
                            $fp = fopen("compteur.txt","r+"); // 1.On ouvre le fichier en lecture/écriture
                            $nbvisites = fgets($fp,11);       // 2.On récupère le nombre dans le fichier
                            $nbvisites++;                     // 3.On incrémente le nombre de visites(+1)
                            fseek($fp,0);                     // 4.On se place en début de fichier
                            fputs($fp,$nbvisites);            // 5.On écrit dans le fichier le nouveau nb
                            fclose($fp);                      // 6.On ferme le fichier
     
    			            // Rediriger vers la page index
    			            header('Location: index.html');
                            exit;
    ?>
    Faut que je trouve l'astuce

    Merci

  16. #16
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 275
    Points
    3 275
    Par défaut
    Si ce test là :

    if ($ip == $ip_blacklist[0]) {
    ne passe pas, il se passe quoi ?

  17. #17
    Membre du Club
    Inscrit en
    Novembre 2007
    Messages
    147
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 147
    Points : 52
    Points
    52
    Par défaut
    Si l'ip connectée est balcklistée, alors:
    Je regarde si le blocage supérieur à 1 heure
    si oui je débloque l'ip et je ré-autorise l'ip et incrémente mon compteur et je lance la suite d'un code d'envoi mail avec des données demandées
    si non, je bloque la suite de la demande et je retourne à l'index

    Si l'ip connectée n'est pas bloquée
    J'incrémente le compteur et je lance la suite d'un code d'envoi mail avec des données demandées

  18. #18
    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
    Encore une fois, ne répète pas du code, fais une fonction pour ton compteur par exemple.

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

Discussions similaires

  1. Incrémenter un compteur dans une table
    Par LiseUEMPT dans le forum Access
    Réponses: 6
    Dernier message: 26/11/2013, 21h15
  2. Incrémenter le compteur dans un <span>
    Par Juju54350 dans le forum jQuery
    Réponses: 17
    Dernier message: 26/07/2011, 10h12
  3. [TPW] Incrémentation du compteur dans une boucle for
    Par sukhoimk dans le forum Turbo Pascal
    Réponses: 5
    Dernier message: 15/07/2011, 17h58
  4. [batch] incrémentation dans une boucle for
    Par bart64 dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 08/09/2004, 20h05

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