wer ist wo online
gox
- php
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
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...
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 ;)