gox: wer ist wo online

hallo, das ist ein ausschnitt aus mein "wer ist wo online" script, funktioniert auch wunderbar, er macht:

wenn ip nicht vorhanden ein insert
wenn ip vorhanden ein update
wenn älter als 900sec macht er ein delete

aber ich hab da probleme wenn eine ip vorhanden ist und man nach 901 sec die seite neu aufruft mit der gleichen ip, macht er zwar ein delte, aber kein insert?

also, warum macht er wenn man das script nach 900 sec wieder aufruft zwar ein delete, aber kein insert mehr?

<?php
        while($row = $sqlq->fetch()){
            $ztime = $row['lastactivity'] + 900;
            if ( $ztime < mktime() ){
                $sql_del = "DELETE FROM
                                wiw
                            WHERE
                                lastactivity = '".$row['lastactivity']."'";
                mysql_query($sql_del) OR die(mysql_error());
            }
            if ((($row['ipaddress'] == $REMOTE_ADDR) AND ($userid == $row['userid']))){
                $exist = '1';
            }
        }
            if ($exist == '1'){
                $sqlud = "UPDATE
                              wiw
                          SET
                              lastactivity = UNIX_TIMESTAMP(),
                              request_uri  = '$REQUEST_URI'
                          WHERE
                              userid = $userid";
                mysql_query($sqlud) OR die(mysql_error());
            } else {
                $sqlins = "INSERT INTO
                               wiw
                           (userid, ipaddress, request_uri, lastactivity)
                       VALUES
                          ($userid,
                           '$REMOTE_ADDR',
                           '$REQUEST_URI',
                           UNIX_TIMESTAMP())";
                mysql_query($sqlins) OR die(mysql_error());
            }
?>

hoffe jemmand sieht mein denkfehler.

mfg gox

  1. tachen,

    aber ich hab da probleme wenn eine ip vorhanden ist und man nach 901 sec die seite neu aufruft mit der gleichen ip, macht er zwar ein delte, aber kein insert?

    ...weil $row noch die Zeile aus der Datenbank enthält und so die if-Abfrage True ergibt und $exists auf True gesetzt wird... Folge: Es wird versucht eine nicht vorhandene Zeile upzudaten, anstelle eine neue anzulegen...

    Viele Grüße
    David

    PS: Nur ein Tipp, du kannst noch einiges an dem Quellcode tunen bzw. schöner schreiben...

    1. danke für deine hilfe, nun gehts, aber wie meinst du das mit schöner schreiben? was kann man da noch verbessern?

      hier wäre mein aktueller code:

      while($row = $sqlq->fetch()){
                  $ztime = $row['lastactivity'] + 900;
                  if ( $ztime < mktime() ){
                      $sql_del = "DELETE FROM
                                      wiw
                                  WHERE
                                      lastactivity = '".$row['lastactivity']."'";
                      mysql_query($sql_del) OR die(mysql_error());
                  }
                  if ((($row['ipaddress'] == $REMOTE_ADDR) AND ($userid == $row['userid']) AND ($ztime > mktime()))){
                      $exist = '1';
                  }
              }
                  if ($exist == '1'){
                      $sqlud = "UPDATE
                                    wiw
                                SET
                                    lastactivity = UNIX_TIMESTAMP(),
                                    request_uri  = '$REQUEST_URI'
                                WHERE
                                    userid = $userid";
                      mysql_query($sqlud) OR die(mysql_error());
                  } else {
                      $sqlins = "INSERT INTO
                                     wiw
                                 (userid, ipaddress, request_uri, lastactivity)
                             VALUES
                                ($userid,
                                 '$REMOTE_ADDR',
                                 '$REQUEST_URI',
                                 UNIX_TIMESTAMP())";
                      mysql_query($sqlins) OR die(mysql_error());
                  }
          }

      mir fellt da nix ein was ich umschreiben könnte so das sich der code verkürzen wurde, aber bin immer offen für neue ideen ;)