Ankündigung

Einklappen
Keine Ankündigung bisher.

Counter mit PHP und MySQL

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Counter mit PHP und MySQL

    Hi,

    habe folgendes Problem:
    Ich habe einen Counter in PHP und MyQL. Dieser zeichnet die IP-Adresse, Tag, Monat, Jahr, Stunde und Minute auf.

    Jetzt soll der Counter eine Zeitsperre von 30min bekommen, dass also nur dann aufgezeichnet wird, wenn der letzte Besuch 30min zurück liegt.

    Im Moment ist es so, dass jede IP nur einmal aufgezeichnet wird.


    PHP-Code:
    <?php
     $sql 
    "SELECT * FROM counter WHERE IP='$ip'"
    $result mysql_query($sql); 
    $count mysql_num_rows($result); 
        if (
    $count == 1
        {
        
    #Ausgabe wenn die IP bereits in der Datenbank vorkommt 

    #Ausgabe wenn die IP bereits in der Datenbank vorkommt  Ende
        
    }
        else
        {
        
    #IP eintragen
        
    $db_link mysql_connect('localhost''user'xxx);

        if(
    $db_link)
        {
             

             if(
    mysql_select_db(MYSQL_DATABASE$db_link))
             {
                 echo 
    "Die Datenbank user wurde ausgewählt";
             }
           
        }
        else
        {
            echo 
    "Es konnte keine Verbindung aufgebaut werden";
        }


        
    $sql="
           INSERT INTO counter
            (IP,Browser,Host,System,Referer,Tag,Monat,Jahr,Stunde,Minute)
        VALUES
            ('
    $ip','$browser','$host','$system','$referer','$tag','$monat','$jahr','$stunde','$minute')";
           
    mysql_query($sql) or die(mysql_error()."
        Query: "
    .$sql);
        }

    ?>

    Wie kann man das anstellen, dass man überprüft ob seit dem letzten Besuch 30min vergangen sind?

    Im Prinzip würde ich jetzt einfach die Minuten nehmen und es anhand der Minuten machen. Aber was ist wenn der Besuch um 17:40 war und der nächste Besuch um 18:50? Dann sind es in den Minuten nur 10min unterschied.

    Hat da jemand eine Idee?

  • #2
    versuchs mal mit timestamps
    php: time()
    sql: NOW()

    Kommentar


    • #3
      reciht dir auch eine funktion die die differenz nur eines tages bewältigen kann?
      alos tage werden nicht berücksichtigt?
      solch eine kann ich dir gerne geben...

      aber es wäre wie karl-150 schon schreibt besser timestamps zu nehmen.
      Es gibt 10 Wege Binärcode zu verstehen. Ganz oder garnicht

      Kommentar


      • #4
        Hi,

        habs mit timestamps probiert. Hat auch anfangs funktioniert. Wurde in der angegebenen Zeit nix neues hinzugefügt. Aber nach ablauf der Zeit wurde dann bei jedem Seitenabruf ein neuer Datensatz eingefügt, also wie vorher. Habe wohl einen Fehler gemacht (Anfänger )

        PHP-Code:
        <?php

             $sql 
        "SELECT * FROM counter WHERE IP='$ip'"
        $result mysql_query($sql); 
        $count mysql_num_rows($result); 
            if (
        $count == 1
            {
            
        #Ausgabe wenn die IP bereits in der Datenbank vorkommt 
            
        $sql "SELECT
                        IP,
                        Browser,
                        Host,
                        System,
                        Referer,
                        Tag,
                        Monat,
                        Jahr,
                        Stunde,
                        Minute,
                        timestamp
                    FROM
                        counter
                    ;"
        ;

            
            
        $result mysql_query($sql) OR die(mysql_error());
             
               
        $row mysql_fetch_assoc($result);
               
        $dbtimestamp=$row['timestamp'];
        if(
        $timestamp-$row['timestamp']<=120)
        {
        }
        else
        {


        $sql="
               INSERT INTO counter
                (IP,Browser,Host,System,Referer,Tag,Monat,Jahr,Stunde,Minute,timestamp)
            VALUES
                ('
        $ip','$browser','$host','$system','$referer','$tag','$monat','$jahr','$stunde','$minute','$timestamp')";
               
        mysql_query($sql) or die(mysql_error()."
            Query: "
        .$sql);
            
            ;
        }


        #Ausgabe wenn die IP bereits in der Datenbank vorkommt  Ende
            
        }
            else
            {
            
        #Username noch frei
            
        $db_link mysql_connect('localhost''user''4e2ffa8a');

            if(
        $db_link)
            {
                 

                 if(
        mysql_select_db(MYSQL_DATABASE$db_link))
                 {
                     echo 
        "Die Datenbank user wurde ausgewählt";
                 }
               
            }
            else
            {
                echo 
        "Es konnte keine Verbindung aufgebaut werden";
            }


            
        $sql="
               INSERT INTO counter
                (IP,Browser,Host,System,Referer,Tag,Monat,Jahr,Stunde,Minute,timestamp)
            VALUES
                ('
        $ip','$browser','$host','$system','$referer','$tag','$monat','$jahr','$stunde','$minute','$timestamp')";
               
        mysql_query($sql) or die(mysql_error()."
            Query: "
        .$sql);
            }
            

        ?>

        Kommentar


        • #5
          kann mir niemand helfen?

          Kommentar


          • #6
            ich gebs auf, bleibt die seite vorerst ohne counter

            Kommentar


            • #7
              na dann :wink:

              Kommentar


              • #8
                joa

                Kommentar


                • #9
                  falls du es doch noch versuchen willst
                  ip als PRIMARY KEY setzen

                  /edit:
                  wenn du einen timestamp benutzt, kannst du dir die anderen datumsfelder natürlich sparen
                  hab mir nicht angesehen, welchen zweck dein script erfüllen soll, bedenke aber das ips meist dynamisch generiert werden, falls du sie als useridentifikation nutzen willst ...

                  Kommentar


                  • #10
                    PHP-Code:
                    <?php
                    $timeDif 
                    time() - 60*30// 30 min

                    $sql "SELECT * FROM counter WHERE IP='$ip' AND date >= '$timeDif'";
                    $result mysql_query($sql); 
                    $count mysql_num_rows($result);

                    if(
                    $count == 0) { /* Neuen User eintragen */ }
                    else { 
                    /* Bereits vor weniger als 30min eingetragen */ }
                    ?>
                    date speicherst du beim Eintragen als "timestamp" ab: $date = time(); (In die Datenbank eintragen!)

                    Gruß Dima

                    Kommentar


                    • #11
                      Zitat von I-Spy
                      date speicherst du beim Eintragen als "timestamp" ab: $date = time(); (In die Datenbank eintragen!)
                      oder eben doch NOW()

                      Kommentar

                      Lädt...
                      X