user-online-script - wer ist wo

This site uses cookies. By continuing to browse this site, you are agreeing to our Cookie Policy.

  • So ich hab schon nach solch eim script gegoogled, hab aber leider nichts gefunden. undzwar hab ich schon ein script das mir die aktuellen user die grad online sind anzeigt. so, jetzt würde ich in der useronline tabelle eine zeile hinzufügen mit: where. k was muss ich jetzt machen? wär voll happy wenn mir das einer schon komplett posten würde.
    schonmal mit einem verzweifeltem danke und mfg Jusso
  • das script schreibt vermutlich beim auzfruf der datei in eine datenbank/eine textdatei die ip/den username des users und wohl auch noch die zeit (damit es nach einiger zeit wieder gelöscht werden kann). jetzt muss man halt noch eine spalte where anlegen und in dieser spalte $PHP_SELF (bzw. $_SERVER["PHP_SELF"] bei register_globals off) reinschreiben, also die variable, was die adresse des scripts, was gerade ausgeführt wird, ausgibt.
  • dateiinhalt von useronline.php:

    PHP Source Code

    1. <?php
    2. $datei = "datei.txt";
    3. // Der Name der Datei, in der die Daten gespeichert werden
    4. $dateiinhalt = implode("",file($datei));
    5. // Inhalt der Datei wird als String eingelesen
    6. $dateiinhalt .= $_SERVER["REMOTE_ADDR"];
    7. $dateiinhalt .= "|".time();
    8. $dateiinhalt .= "|".$_SERVER["PHP_SELF"]."\n";
    9. // Es wird der Datei eine Zeile hinzugefügt, in der IP, Zeit und momentane Adresse
    10. // gespeichert wird
    11. // Nun wird der veränderte Dateiinhalt in die Datei geschrieben
    12. $file = fopen($datei,"w");
    13. flock($file,2);
    14. fwrite($file,$dateiinhalt);
    15. flock($file,3);
    16. fclose($file);
    17. // Nun wird die Funktion definert, die anzeigt, wer online ist:
    18. function showonline() {
    19. global $datei;
    20. echo "Folgende Personen waren in der letzten Viertelstunde online:<br />";
    21. echo "<table>";
    22. echo "<tr><th>Wer</th><th>Wo</th></tr>";
    23. $afile = file($datei);
    24. for($i=0; $i<count($afile);$i++) {
    25.  $bfile = explode("|",$afile[$i]);
    26.  if($bfile[1]<time()-900) continue;
    27.  // Besuche, die länger als eine Viertelstunde her waren, werden ausgelassen
    28.  echo "<tr><td>";
    29.  echo $bfile[0];
    30.  echo "</td><td>";
    31.  echo $bfile[2];
    32.  echo "</td></tr>\n";
    33. }
    34. echo "</table>";
    35. }
    36. ?>
    Display All

    ist nicht perfekt udn auch nicht getestet, nur das was mir gerade eiongefallen ist. alle dateien, die für das script gewertet werden sollen mit einem

    PHP Source Code

    1. <?php
    2. include("useronline.php");
    3. ?>

    versehen. Dort wo die Onlineliste ausgegeben wird, die Funktion aufrufen:

    PHP Source Code

    1. <?php
    2. showonline();
    3. ?>

    hoffe das hilft dir als denkansatz.
    ps: man muss natürlich eine datei namens datei.txt anlegen, die auf 0666 chmodded ist, damit der webserver schreibzugriff hat
    pps: habe eben noch fehler im script gefunden und sie korrigiert
  • @wulfgang:
    was hältst du eigentlich von
    <a href='http://de.php.net/manual/de/function.uniqid.php' target='_blank'>uniqid()</a>
    ich habe bisher auch immer mit $_SERVER['REMOTE_ADDR'] gearbeitet, aber uniquid() klingt zuverlässiger

    zum script:
    aktuell wird die Datei ziemlich lang.
    Ich würde noch eine Funktion einbauen die alte Einträge löscht.
    Kenne mich aber mit Textdateien wenig aus (MySQL 4 ever :lol: )
  • @wulfgang:
    was hältst du eigentlich von
    <a href='http://de.php.net/manual/de/function.uniqid.php' target='_blank'>uniqid()</a>
    ich habe bisher auch immer mit $_SERVER['REMOTE_ADDR'] gearbeitet, aber uniquid() klingt zuverlässiger

    ganz witzig, aber in diesem falle wohl kaum sinnvoll, da man ja die ip wissen will. wenn da irgendwelche mikrosekunden angeziegt werden, hat das für den user wenig aussagekraft, um wen es da nun geht ^^

    zum script:
    aktuell wird die Datei ziemlich lang.
    Ich würde noch eine Funktion einbauen die alte Einträge löscht.
    Kenne mich aber mit Textdateien wenig aus (MySQL 4 ever  :lol: )

    jo stimmt... mal schaun :D
  • PHP Source Code

    1. <?php
    2. $db_host = "xx";
    3. $db_user = "xx";
    4. $db_passwd = "xx";
    5. $db_name = "xx";
    6. $tab = "user_online";
    7. $time_to_del = 30*60;
    8. $diff = time()-$time_to_del;
    9. $ip = $_SERVER['REMOTE_ADDR'];
    10. $ver = mysql_connect($db_host,$db_user,$db_passwd);
    11. mysql_select_db($db_name);
    12. mysql_query("DELETE FROM `".$tab."` WHERE time < ".$diff."");
    13. $qdrin = "SELECT COUNT(*) FROM `".$tab."`";
    14. $qdrin .= " WHERE `ip`='".$ip."'";
    15. list($drin) = mysql_fetch_row(mysql_query($qdrin));
    16. if($drin > 0) {
    17.  // IP steht bereits in DB
    18.  $query = "UPDATE `".$tab."` SET `time`='".time()."'";
    19.  $query .= " WHERE `ip`='".$ip."'";
    20.  mysql_query($query);
    21. } else {
    22.  // IP steht noch nicht in DB
    23.  $query = "INSERT INTO `".$tab."` SET";
    24.  $query .= " `time`='".time()."',`ip`='".$ip."'";
    25.  mysql_query($query);
    26. }
    27. $how_many = "SELECT COUNT(*) FROM `".$tab."`";
    28. list($i) = mysql_fetch_row(mysql_query($how_many));
    29. echo "".$i."";
    30. ?>
    Display All

    Nun ja eine spalte where hab ich auch schon erstellt nur weiß ich jetzt nicht mehr weiter. ;)
    mfg Jusso
  • erst nochmal zur txt version

    PHP Source Code

    1. <?php
    2. $datei = "datei.txt";
    3. // Der Name der Datei, in der die Daten gespeichert werden
    4. $dateiinhalt = implode("",file($datei));
    5. // Inhalt der Datei wird als String eingelesen
    6. $dateiinhalt .= $_SERVER["REMOTE_ADDR"];
    7. $dateiinhalt .= "|".time();
    8. $dateiinhalt .= "|".$_GET['section']."\n";
    9. // Es wird der Datei eine Zeile hinzugefügt, in der IP, Zeit und momentane Adresse
    10. // gespeichert wird
    11. // Nun wird der veränderte Dateiinhalt in die Datei geschrieben
    12. if($_GET['section'] != "weristwo")
    13. {
    14. $file = fopen($datei,"w");
    15. flock($file,2);
    16. fwrite($file,$dateiinhalt);
    17. flock($file,3);
    18. fclose($file);
    19. }
    20. // Nun wird die Funktion definert, die anzeigt, wer online ist:
    21. function showonline() {
    22. global $datei;
    23. echo "Folgende Personen waren in der letzten Viertelstunde online:<br />";
    24. echo "<table>";
    25. echo "<tr><th>Wer</th><th>Wo</th></tr>";
    26. $afile = file($datei);
    27. for($i=0; $i<count($afile);$i++) {
    28. $bfile = explode("|",$afile[$i]);
    29. if($bfile[1]<time()-900) continue;
    30. // Besuche, die länger als eine Viertelstunde her waren, werden ausgelassen
    31. echo "<tr><td>";
    32. echo $bfile[0];
    33. echo "</td><td>";
    34. echo $bfile[2];
    35. echo "</td></tr>\n";
    36. }
    37. echo "</table>";
    38. }
    39. ?>
    Display All
  • <!--QuoteBegin-Jusso+Jan 11 2004, 08:44 PM--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>QUOTE (Jusso @ Jan 11 2004, 08:44 PM)</td></tr><tr><td id='QUOTE'><!--QuoteEBegin-->

    Source Code

    1. if($drin > 0) {
    2.  // IP steht bereits in DB
    3.  $query = "UPDATE `".$tab."` SET `time`='".time()."'";
    4.  $query .= " WHERE `ip`='".$ip."'";
    5.  mysql_query($query);
    6. } else {
    7.  // IP steht noch nicht in DB
    8.  $query = "INSERT INTO `".$tab."` SET";
    9.  $query .= " `time`='".time()."',`ip`='".$ip."'";
    10.  mysql_query($query);
    11. }
    Display All
    [/quote]
    das ändern wir ab zu folgendem code:

    Source Code

    1. if($drin > 0) {
    2.  // IP steht bereits in DB
    3.  $query = "UPDATE `".$tab."` SET `time`='".time()."',`where`='".$where."'";
    4.  $query .= " WHERE `ip`='".$ip."'";
    5.  mysql_query($query);
    6. } else {
    7.  // IP steht noch nicht in DB
    8.  $query = "INSERT INTO `".$tab."` SET";
    9.  $query .= " `time`='".time()."',`ip`='".$ip."',`where`?'".$where."'";
    10.  mysql_query($query);
    11. }
    Display All
  • na ich benutz immernoch die textdatei und immer wenn etwas neues is dann so:

    Source Code

    1. if($_GET['section'] != "weristwo")
    2. {
    3. if($_GET['section'] != "news")
    4. {
    5. $file = fopen($datei,"w");
    6. flock($file,2);
    7. fwrite($file,$dateiinhalt);
    8. flock($file,3);
    9. fclose($file);
    10. }
    11. }...
    Display All

    :unsure: :unsure:
    plz hilft mir
  • <!--QuoteBegin-Jusso+Jan 14 2004, 06:51 PM--></div><table border='0' align='center' width='95%' cellpadding='3' cellspacing='1'><tr><td>QUOTE (Jusso @ Jan 14 2004, 06:51 PM)</td></tr><tr><td id='QUOTE'><!--QuoteEBegin--> na ich benutz immernoch die textdatei und immer wenn etwas neues is dann so: [/quote]
    formulier deinen satz mal richtig. verstehe gar nicht, was du meinst.
    ps....

    Source Code

    1. if($_GET['section'] != "weristwo")
    2. {
    3. if($_GET['section'] != "news")
    4. {

    kannst du in

    Source Code

    1. if($_GET['section'] != "weristwo" && $_GET['section'] != "news")
    2. {

    zusammenfassen
    // EDIT: aber ich verstehe den sinn der bedingung nicht!? ich würde sie löschen
  • So hier ist nochmal das ganze script

    PHP Source Code

    1. <?php
    2. $datei = "datei.txt";
    3. // Der Name der Datei, in der die Daten gespeichert werden
    4. $dateiinhalt = implode("",file($datei));
    5. // Inhalt der Datei wird als String eingelesen
    6. $dateiinhalt .= $_SERVER["REMOTE_ADDR"];
    7. $dateiinhalt .= "|".time();
    8. $dateiinhalt .= "|".$_SERVER["PHP_SELF"]."?section=".$_GET['section']."\n";
    9. // Es wird der Datei eine Zeile hinzugefügt, in der IP, Zeit und momentane Adresse
    10. // gespeichert wird
    11. // Nun wird der veränderte Dateiinhalt in die Datei geschrieben
    12. if($_GET['section'] != "weristwo" && $_GET['section'] != "news");
    13. {
    14. $file = fopen($datei,"w");
    15. flock($file,2);
    16. fwrite($file,$dateiinhalt);
    17. flock($file,3);
    18. fclose($file);
    19. }
    20. // Nun wird die Funktion definert, die anzeigt, wer online ist:
    21. function showonline() {
    22. global $datei;
    23. echo "Folgende Personen waren in der letzten Viertelstunde online:<br />";
    24. echo "<table>";
    25. echo "<tr><th>Wer</th><th>Wo</th></tr>";
    26. $afile = file($datei);
    27. for($i=0; $i<count($afile);$i++) {
    28. $bfile = explode("|",$afile[$i]);
    29. if($bfile[1]<time()-900) continue;
    30. // Besuche, die länger als eine Viertelstunde her waren, werden ausgelassen
    31. echo "<tr><td>";
    32. echo $bfile[0];
    33. echo "</td><td>";
    34. echo $bfile[2];
    35. echo "</td></tr>\n";
    36. }
    37. echo "</table>";
    38. }
    39. ?>
    Display All