zufalls Userid-Script so ok?

  • 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:

    • bei Login timestamp in db Tabelle tragen
    • bei jedem Seiten reload timestamp in db aktualisieren
    • über cronjob aller z.B. 5minuten das db array auslesen, mit aktuellem timestamp vergleichen
    • wenn länger als 30min db timestamp her dann offline setzen für den user

    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:

    PHP
    "UPDATE users SET online_status='false' WHERE (lastAction<".time()+(60*5).")";

    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 ;)

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • 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:

    PHP
    $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.

    Der, der weiß dass er nichts weiß, weiß mehr als der, der nicht weiß, dass er nichts weiß.

    Wer nach etwas fragt, geht grundsätzlich das Risiko ein, es auch zu bekommen!

  • 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

    Was is jetzt kaputt?^^
    ...
    Also es liegt an der Zeile:

    PHP
    $sql2 = "SELECT * FROM gastbuchnutzer WHERE (lastaction<'".time()-(60*5)."')";


    Weil da entsteht das '-300' aber was daran dem server jetzt nicht passt weiß ich auch nicht!?

  • 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