Eine Art ipliste speichern..

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

  • Eine Art ipliste speichern..

    Hallöchen...


    Ich grüble nun schon die ganze Zeit aber komme auf keinen grünen Zweig wie ich das umsetzen soll. In einem Projekt das mit einem Login arbeitet, wird jeweils die aktuelle IP in die Datenbank gespeichert - nicht nur die auch noch anderes, dazu gleich mehr. Nun möchte ich das dahingehend ändern, dass ich jeweils die letzten 10 benutzten IPs speicheren kann und das ohne, dass ich das komplette System umschreiben muss. Damit es so einfach wie möglich ist habe ich mir damals einige Funktionen gebastelt die sich dann einfach einfügen lassen und nicht jedesmal unnötig viel Code benötigen.

    Lange Rede kurzer Sinn...
    Hier mal die Funktion die den Login regelt..
    PHP-Code:
    function login($userid)
    {
        
    $sql="UPDATE xyz
        SET UserSession='"
    .session_id()."',
        LastActive='"
    .time()."',
        UserIP='"
    .$_SERVER['REMOTE_ADDR']."',
        logins = logins +1,
        bantime=NULL
        WHERE UserId="
    .$userid;
         
    mysql_query($sql);

    Wie man hier sieht, wird die letzte jeweils mit der neuen IP überschrieben. Wie gesagt, ich möchte die letzten ~10 IPs speichern, und die der Reihe nacht so das ich die dann auch in der richtigen Reihenfolge aufgeführt bekomme. Mir ist klar, dass ich dazu ggf. eine neue Tabelle anlegen muss, doch wie genau ich die anlegen könnte.., dahinter steig' ich nicht - mir fehlt einfach ein für mich machbarer Ansatz einer Lösung. Denn die Funktion muss ja erkennen, wieviele Datensätze schon gefüllt sind (1-10) und wenn ja, dann welcher zur überschreiben ist, wenn nein, wohin der nächste muss.

    Kann sein das ich da mal wieder viel zu umständlich denke, keine Ahnung.. Jedenfalls steh' ich total aufm Schlauch.

    Habt ihr ggf. einen Lösungsansatz oder gar eine komplett andere Idee die nicht so umständlich ist? <g>


    Danke schonmal im Voraus.



    medium22

  • #2
    Weiss nicht ob ich Dein Problem richtig verstanden habe...

    Aber ich würde der Tabelle ein Feld Timestamp verpassen und dieses mit dem Atribut "ON UPDATE CURRENT_TIMESTAMP" versehen. Damit wird bei jedem Update der aktuelle Timestamp gesetzt. Beim Insert müsstest Du dieses Feld eben mit dem aktuellen Timestamp füllen, da es nur beim Update automatisch berfüllt wird.

    Oder den Timestamp immer "von Hand" neu befüllen.

    Danach ein Order by timestamp (desc/asc? muss ich immer testen, merk ich mir nie ) und mit einem LIMIT die 10 letzten holen.

    Kommentar


    • #3
      Japp,

      normalisieren!!!

      neue tabelle

      user_id, ip, timestamp
      bei jedem login wird da wild reingeschrieben. (was, sollte klar sein.)

      und halt regelmäßig cronen und löschen.

      Kommentar


      • #4
        Hallöchen..


        Wunderbar!
        Ich sollte vielleicht nicht im so kompliziert denken dann würds auch einfacher gehen.

        Danke euch!
        Falls jemand sehen mag wie ich es nun gelöst habe einfach schreiben.



        medium22

        Kommentar


        • #5
          immer! sicher sucht jemand früher oder später nach sowas...

          Kommentar


          • #6
            Hast auch wieder recht. <g>


            Also.., zuerst habe ich eine neue Tabelle erstell:
            PHP-Code:
            CREATE TABLE `iplist` (
              `
            UserIdtext NOT NULL,
              `
            UserIPtext NOT NULL,
              `
            timesteptimestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP
            ENGINE=MyISAM DEFAULT CHARSET=latin1
            Danach habe ich der oben genannten Funktion eine weitere Anweisung mitgegeben die sie jeweils beim Login zu speichern hat.

            PHP-Code:
            function login($userid)
            {
                
            $sql="UPDATE xyz
                SET UserSession='"
            .session_id()."',
                LastActive='"
            .time()."',
                UserIP='"
            .$_SERVER['REMOTE_ADDR']."',
                logins = logins +1,
                bantime=NULL
                WHERE UserId="
            .$userid;
                 
            mysql_query($sql);
                
            mysql_query("INSERT INTO iplist 
                                SET UserId = '
            $userid', 
                                UserIP = '"
            .$_SERVER['REMOTE_ADDR']."'");

            Diese Funktion wird nur beim Login aufgerufen!

            Für die Ausgabe der IP-Liste habe ich folgendes gebastelt.

            PHP-Code:
            $abfrage2 mysql_query("SELECT UserId, UserName FROM xyz 
                                                     WHERE UserId = "
            .$_GET['UserId']." LIMIT 1");
            $fetch mysql_fetch_array($abfrage2);
            $abfrage1 mysql_query("SELECT * FROM iplist 
                                                     WHERE UserId = "
            .$fetch['UserId'].
                                                     ORDER BY timestep DESC 
                                                     LIMIT 10"
            );
            echo 
            "<B>IPLIST von ".$fetch['UserName']."</B><BR /><BR />";
            while (
            $row =  mysql_fetch_array($abfrage1))
            {
            $ip $row["UserIP"];
            $date $row["timestep"];
            echo 
            "$date | $ip <BR />";
             } 
            Das ist nur der eigentliche Teil der Ausgabe, das Zeugs davor und danach habe ich weggelassen da es den Rahmen sprengen würde. Funktioniert so wunderbar.


            medium22

            Kommentar


            • #7
              beschäftige dich mal mit JOIN, dann kannst du bei der Ausgabe mit einer Abfrage alle benötigten Informationen aus der DB auslesen

              Kommentar


              • #8
                `UserId` text NOT NULL,
                `UserIP` text NOT NULL,
                und noch ne kleine verbesserung: int bzw. char sind wohl besser.

                Kommentar

                Lädt...
                X