Cronjobs kannst du nicht im Quellcode nachsehen *hust* ...
Javascript wäre zu unzuverlässig für sowas. Wenn dann schon eher eine Aktivitätstabelle in der Datenbank ;P
Im grunde nicht soo kompliziert.
Cronjobs kannst du nicht im Quellcode nachsehen *hust* ...
Javascript wäre zu unzuverlässig für sowas. Wenn dann schon eher eine Aktivitätstabelle in der Datenbank ;P
Im grunde nicht soo kompliziert.
Im Grunde?
...
Ich hab von Datenbanken langsam die *** voll.
Nein Scherz, aber mir fällt grad nichts ein wie ich einen Ansatz hinbekomme.
Also meine Idee wo ich aber kein Plan habe wie es geht:
So an sich würde ich es schaffen, bis zu dem cronjob.
Tabellenfelder wären:
Userid, letzte aktivität timestamp
Oder ist in dem Ansatz schon was falsch?
Nein, daran ist nichts falsch, bis auf diese tatsachen:
Zitat
über cronjob aller z.B. 5minuten das db array auslesen, mit aktuellem timestamp vergleichen
1. in einer datenbank steht kein array
2. Du willst alles auslesen ?!? Denk mal nach was das fürn aufwand macht. Anscheinend hast du SQL nicht richtig gelernt
Bei jedem Seitenaufruf, egal von wem, püfst du, ob der aktuelle timestamp in ein muster von z.B 5min passt. Wenn ja, dann feurst du einfach dashier an die DB:
EDIT:
P.S.:
Warum keinen Cronjob? Wenn niemand online ist, sprich niemand eine Seite aufruft, dann interessierts ja auch niemanden, wer jetzt on/off ist
Doch ich habe SQL gelernt.
Nur grad falsches Wort gehabt ... sry
Mit dem Update habe ich ja schon paar mal drin! Und der Einwand gegen Cronjobs ist verständlich!^^
Mein Problem ist nur das ich in mehreren Tabellen den online Status (bei mir mit 1 / 0) habe. Aber nicht in jeder Tabelle die lastaction einfügen kann.
Sprich ich müsste dann noch ein Select machen wo ich die Userid auslese für betreffende werte:
$sql1 = "SELECT * FROM gastbuchnutzer WHERE (lastAction<".time()+(60*5).")";
$ausgabe1 = mysql_query($sql1);
while($row1 = mysql_fetch_array($ausgabe1))
{
$sql2 = "UPDATE gastbucheintrage SET online='0' WHERE (userid=".$row1['userid'].")";
mysql_query($sql2);
}
Ich habe es noch nicht getestet. Aber so müsste es doch funktionieren oder?
Tut es. Aber
Warum soll ich nicht "SELECT *" schreiben
Es ginge auch mit einem Query, mit JOIN. Oder du verbesserst deine Tabellenstruktur so, dass du den online-status nur in einer abelle brauchst. Denn den immer auszulesen ist mit weniger rechenkraft verbunden als ihn jedesmal upzudaten.
<?php
error_reporting(E_ALL);
session_start ();
if (isset($_SESSION['user_angemeldet']))
{
$connectionid = mysql_connect ("localhost", "darkemperor", "PW");
if (!mysql_select_db ("darkemperor", $connectionid))
{
die ("Keine Verbindung zur Datenbank");
}
$sql1 = "UPDATE gastbuchnutzer SET lastaction='".time()."' WHERE (userid='".$_SESSION['user_userid']."')";
mysql_query($sql1);
$sql2 = "SELECT * FROM gastbuchnutzer WHERE (lastaction<'".time()-(60*5)."')";
$ausgabe2 = mysql_query($sql2);
while($row2 = mysql_fetch_array($ausgabe2))
{
$sql3 = "UPDATE gastbucheintrage SET online='0' WHERE (userid='".$row2['userid']."')";
mysql_query($sql3);
$sql4 = "UPDATE gastbuchnutzer SET online='0' WHERE (userid='".$row2['userid']."')";
mysql_query($sql4);
}
}
elseif (!isset($_SESSION['user_angemeldet']) || !$_SESSION['user_angemeldet'])
{
header ("Location: logreg.php");
exit;
}
?>
Alles anzeigen
Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in /users/darkemperor/www/checkuser.php on line 18
Was ist falsch?
...
1.Punkt geht: er updatet die lastaction für den user der das script ausführt!
Aber schon am 2. Punkt scheitert es.
Wo liegt der Fehler?
Ausführen tut er aber alle anderen nachfolgenden Scripts! Also ist es kein Fehler der die ganze Seite sondern nur den auto Logout behindert!
MfG
Danke im Voraus ...
Ok jetzt habsch nen noch größeres Problem!
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-300')' at line 1
<?php
error_reporting(E_ALL);
session_start ();
if (isset($_SESSION['user_angemeldet']))
{
$connectionid = mysql_connect ("localhost", "darkemperor", "PW");
if (!mysql_select_db ("darkemperor", $connectionid))
{
die ("Keine Verbindung zur Datenbank");
}
$sql1 = "UPDATE gastbuchnutzer SET lastaction='".time()."' WHERE (userid='".$_SESSION['user_userid']."')";
mysql_query($sql1) OR die(mysql_error());
$sql2 = "SELECT * FROM gastbuchnutzer WHERE (lastaction<'".time()-(60*5)."')";
$ausgabe2 = mysql_query($sql2) OR die(mysql_error());
while($row2 = mysql_fetch_array($ausgabe2))
{
$sql3 = "UPDATE gastbucheintrage SET online='0' WHERE (userid='".$row2['userid']."')";
mysql_query($sql3) OR die(mysql_error());
$sql4 = "UPDATE gastbuchnutzer SET online='0' WHERE (userid='".$row2['userid']."')";
mysql_query($sql4) OR die(mysql_error());
}
}
elseif (!isset($_SESSION['user_angemeldet']) || !$_SESSION['user_angemeldet'])
{
header ("Location: logreg.php");
exit;
}
?>
Alles anzeigen
Was is jetzt kaputt?^^
...
Also es liegt an der Zeile:
Weil da entsteht das '-300' aber was daran dem server jetzt nicht passt weiß ich auch nicht!?
Danke ... jetzt geht alles!^^
...
Habs jetzt auch verstanden was falsch war ... time() ist ja eine Funktion und keine Variable!
Mache keine Querys in deiner Schleife damit hast zu zig unnötige Querys, lieber in eine Arrray bündeln und unten auf der Seite 1 Query der alles abhandelt
mfg