PHP+mySQL: Wie prüfen wieviele Online sind? und: Bestimmte Datenbankabfrage!

Kermit

Enthusiast
Thread Starter
Mitglied seit
14.07.2002
Beiträge
1.708
Ort
Schwarzwald!!! und Karlsruhe
Hi
Also meine neue Page nimmt langsam aber sicher gestalt an. Das Forum ist schon fast fertig. Jetzt sogar mit mySQL, else ;)

Ich will ne Funktion einbauen, die auf der Forumstartseite die aktuelle Anzahl der User ausgibt, die im Moment online sind, also auf meiner Seite rumsurfen. Ich hab schon im Netz gesucht aber ich kann das nicht nachvollziehen, was die da machen. Deshalb wäre ich froh wenn mir das wer erklrären könnte. Ein detailierter Lösungsweg reicht schon. Muss nicht unbedingt mit Source Code sein ;)

Jetzt zu meinem 2. Problem:
Ich will natürlich auch, dass wenn ein User Geburtstag hat, dass auf der Startseite steht. Dazu hab ich in der Datenbank in der user tabelle ein "DATE" Feld. Soweit so gut. Wie frag ich das jetzt aber ab? ICh kann mir das nur so vorstellen, dass ich halt x DB Anfragen machen muss die das Datum für jedes Jahr prüft und guckt ob wer zufällig geburtstag hat also z.b. so:
PHP:
for($i = 1924; $i < 2004; $i++){
$tag = date("j");
$monat = date("n");
$jahr = $i;
$datum = "$tag" . "." . "$monat" . "." . "$jahr";
$res = mysql_db_query("xxxxx", "SELECT username FROM user WHERE geburtstag = '$datum'");
}
Is jetzt etwas arg ausführlich, aber ich hoffe das man so besser versteht was ich will ;)

So jetzt die Frage:
Kann man nicht in der Datenbank einfach nur nach z.B. "17.04." suchen lassen und dann fischt er alle raus, die damit anfangen, also dass das Jahr nicht beachtet wird. Geht das? Weil so is das ja nicht vertretbar. Das wären 80 Datenbank abfragen pro Seitenaufruf allein wegen der Funktion da. Das bremst doch brutal, wenn da mal 50 User gleichzeitig drauf gehen, oder?

Schonmal Thx!

Gruß
Alex
 
Zuletzt bearbeitet:
Wenn Du diese Anzeige nicht sehen willst, registriere Dich und/oder logge Dich ein.
1: du brauchst eine sessiontabelle in der einen eintrag machst wenn jemand das erste mal auf die seite kommt, jedesmal wenn er eine neue seite aufruft wird der timestamp in der session aktualisiert. dann muss du um rauszufinden wieviele online sind einfach nur nach "select count(1) from sessions" abfragen und schon hast ein ergebniss...
natürlich musst die tabelle regelmässig leeren, bzw abgelaufene session löschen (zb. älter als 30 minuten)

2: speicher den timestamp vom GB und vergleich ihn mit dem timestampbereich des heutigen tages
 
burnout schrieb:
1: du brauchst eine sessiontabelle in der einen eintrag machst wenn jemand das erste mal auf die seite kommt, jedesmal wenn er eine neue seite aufruft wird der timestamp in der session aktualisiert. dann muss du um rauszufinden wieviele online sind einfach nur nach "select count(1) from sessions" abfragen und schon hast ein ergebniss...
natürlich musst die tabelle regelmässig leeren, bzw abgelaufene session löschen (zb. älter als 30 minuten)
Ok ich glaub das versteh ich sogar :d
Wie kann ich das machen mit dem regelmäßigen "Aufräumen"?

burnout schrieb:
2: speicher den timestamp vom GB und vergleich ihn mit dem timestampbereich des heutigen tages
Hast du dafür vielleicht doch nen bissel COde? Wie soll ich den Timestamp vom Geburtstag speichern? Meinst du alle Geburtstage von allen Usern aus der DB holen und dann vergleichen?
Jo so könnt ich mir das vorstellen. Mit ner schönen Schleife geht das auch ruck zuck. MEintest du das so, oder?

Thx
Alex
 
PHP:
<?php 

  function registerSession()
  {
    $sessionID = genSessionID();
    $sessionInsert = new mysql();

    $sessionTimeout = time() + TIMEOUT;

    $sessionInsertSQL = "INSERT INTO sessions
                         (
                           sess_sessionID,
                           sess_scoutID,
                           sess_timeout,
                           sess_ip
                         )
                         VALUES
                         (
                           '$sessionID',
                           '',
                           '$sessionTimeout',
                           '" . getenv("REMOTE_ADDR") . "'
                         )";

    $sessionInsert->Query($sessionInsertSQL);
    return($sessionID);
  }

  function sessionIsRegistred($sessionID)
  {
    global $site;
    $login = new mysql();
    $loginSQL = "SELECT sessions.sess_scoutID, sessions.sess_ip, scouts.scout_nick, scouts.scout_status FROM sessions, scouts WHERE sessions.sess_sessionID = '$sessionID' AND sessions.sess_scoutID = scouts.scout_id";
    $login->Query($loginSQL);
    $login->execRow();

    if($login->RSArray["sess_scoutID"] != "")
    {
      if($login->RSArray["sess_ip"] != getenv("REMOTE_ADDR"))
      {
        $site["sessionID"] = genSessionID();
        return array("sessionReg" => 0, "status" => 0);        
      }
      else
      {
        $array["sessionReg"]    = 1;
    	$array["id"]     = $login->RSArray["sess_scoutID"];
  	    $array["nick"]   = $login->RSArray["scout_nick"];	  
	    $array["status"] = $login->RSArray["scout_status"];	  
  	    return $array;
      } 
    }
    else
    {
      return array("sessionReg" => 0, "status" => 0);        
    }
  }
  
/*  function sessionUnregister($sessionID)
  {
    $login = new mysql();
    $loginSQL = "delete from sessions where sess_sessionID = '$sessionID'";
    $login->Query($loginSQL);
    if(isset($kook_scoutHash))  
    {
      setcookie("kook_scoutHash");
    } 
    $login->execRow();
  }	*/


  function updateSession($sessionID, $id)
  {
    $login = new mysql();
    $loginSQL = "UPDATE sessions set sess_scoutID = '$id'  WHERE sess_sessionID = '$sessionID'";
    $login->Query($loginSQL);
    $login->execRow();
  }

  function updateTimeout($sessionID)
  {
    $login = new mysql();
    $loginSQL = "UPDATE sessions set sess_timeout = '" . (time() + TIMEOUT) . "'  WHERE sess_sessionID = '$sessionID'";
    $login->Query($loginSQL);
    $login->execRow();
  }
  
  function killTimedout()
  {
    global $site;
    $sql = "DELETE FROM sessions WHERE sess_timeout <= '" . time() . "'";
    $kill = new mysql();
    $kill->Query("$sql");

    $db = new mysql();
    $sql = "SELECT scouts.scout_nick FROM log_site, scouts WHERE log_site.scout_id = scouts.scout_id AND scout_session = '" . $site["sessionID"] . "'";
    $db->Query($sql);
    $db->execRow();
    return $db->RSArray["scout_nick"];
  }
  
  function login($user, $pass, $sessionID)
  {
    $sql = "select * from scouts where scout_nick = '$user' and scout_pass = '" . md5($pass) . "'";
    $login = new mysql();
    $login->Query($sql);
	$login->execRow();
	if($login->rows == 1)
	{
      $sql = "delete from sessions where sess_scoutID = '" . $login->RSArray["scout_id"] ."'";
      $login->Query($sql);
	  updateSession($sessionID, $login->RSArray["scout_id"]);
      if($login->RSArray["scout_cookie"] == 1)
      {  
         setcookie("kookScoutHash", $login->RSArray["scout_hash"], time()+60*60*24*30,  "/");
      }
      return true;
	}
    
  }

  function kookLogin($scoutHash, $sessionID)
  {
    $sql = "select * from scouts where scout_hash = '$scoutHash' AND scout_cookie = '1'";
    $login = new mysql();
    $login->Query($sql);
	$login->execRow();
	if($login->rows == 1)
	{
      $sql = "delete from sessions where sess_scoutID = '" . $login->RSArray["scout_id"] ."' ";
      $login->Query($sql);
	  updateSession($sessionID, $login->RSArray["scout_id"]);
    }  
  }
  
  function insertNewUser($nick, $name, $mail, $pass)
  {
    global $site;
    $login = new mysql();
    $sql = "select scout_id from scouts where scout_nick = '$nick'";
    $login->Query("$sql");
	$login->execRow();	
	if($login->rows > 0)
	{
	  $return["message"] = "Dieser Benutzername ist breits vorhanden";
	  $return["reg"]     = 0;
	}	
	else
	{
      $time = time();
      $hash = md5($pass . $nick . $name . $mail . time());
	  $sql = "insert into scouts (scout_nick, scout_name, scout_email, scout_pass, scout_reg, scout_hash) VALUES ('$nick', '$name', '$mail', '" . md5($pass) . "', '$time', '$hash')";
      $login->Query("$sql");	  
	  $sql = "select scout_id from scouts where scout_nick = '$nick'";
      $login->Query("$sql");	  
	  $login->execRow();
	  updateSession($site["sessionID"], $login->RSArray["scout_id"]);	  	  
	  $return["reg"] = 1;
	}  
    return $return;	
  }

?>
meine methoden zur user verwaltung übrigens.... als anregung...kannst aber so nicht nutzen, weil ich meine datenbankklasse nicht rausgeb :p

und wegen datum...da post ich später was ;)
 
burnout schrieb:
PHP:
<?php 

  function registerSession()
  {
    $sessionID = genSessionID();
    $sessionInsert = new mysql();

    $sessionTimeout = time() + TIMEOUT;

    $sessionInsertSQL = "INSERT INTO sessions
                         (
                           sess_sessionID,
                           sess_scoutID,
                           sess_timeout,
                           sess_ip
                         )
                         VALUES
                         (
                           '$sessionID',
                           '',
                           '$sessionTimeout',
                           '" . getenv("REMOTE_ADDR") . "'
                         )";

    $sessionInsert->Query($sessionInsertSQL);
    return($sessionID);
  }

  function sessionIsRegistred($sessionID)
  {
    global $site;
    $login = new mysql();
    $loginSQL = "SELECT sessions.sess_scoutID, sessions.sess_ip, scouts.scout_nick, scouts.scout_status FROM sessions, scouts WHERE sessions.sess_sessionID = '$sessionID' AND sessions.sess_scoutID = scouts.scout_id";
    $login->Query($loginSQL);
    $login->execRow();

    if($login->RSArray["sess_scoutID"] != "")
    {
      if($login->RSArray["sess_ip"] != getenv("REMOTE_ADDR"))
      {
        $site["sessionID"] = genSessionID();
        return array("sessionReg" => 0, "status" => 0);        
      }
      else
      {
        $array["sessionReg"]    = 1;
    	$array["id"]     = $login->RSArray["sess_scoutID"];
  	    $array["nick"]   = $login->RSArray["scout_nick"];	  
	    $array["status"] = $login->RSArray["scout_status"];	  
  	    return $array;
      } 
    }
    else
    {
      return array("sessionReg" => 0, "status" => 0);        
    }
  }
  
/*  function sessionUnregister($sessionID)
  {
    $login = new mysql();
    $loginSQL = "delete from sessions where sess_sessionID = '$sessionID'";
    $login->Query($loginSQL);
    if(isset($kook_scoutHash))  
    {
      setcookie("kook_scoutHash");
    } 
    $login->execRow();
  }	*/


  function updateSession($sessionID, $id)
  {
    $login = new mysql();
    $loginSQL = "UPDATE sessions set sess_scoutID = '$id'  WHERE sess_sessionID = '$sessionID'";
    $login->Query($loginSQL);
    $login->execRow();
  }

  function updateTimeout($sessionID)
  {
    $login = new mysql();
    $loginSQL = "UPDATE sessions set sess_timeout = '" . (time() + TIMEOUT) . "'  WHERE sess_sessionID = '$sessionID'";
    $login->Query($loginSQL);
    $login->execRow();
  }
  
  function killTimedout()
  {
    global $site;
    $sql = "DELETE FROM sessions WHERE sess_timeout <= '" . time() . "'";
    $kill = new mysql();
    $kill->Query("$sql");

    $db = new mysql();
    $sql = "SELECT scouts.scout_nick FROM log_site, scouts WHERE log_site.scout_id = scouts.scout_id AND scout_session = '" . $site["sessionID"] . "'";
    $db->Query($sql);
    $db->execRow();
    return $db->RSArray["scout_nick"];
  }
  
  function login($user, $pass, $sessionID)
  {
    $sql = "select * from scouts where scout_nick = '$user' and scout_pass = '" . md5($pass) . "'";
    $login = new mysql();
    $login->Query($sql);
	$login->execRow();
	if($login->rows == 1)
	{
      $sql = "delete from sessions where sess_scoutID = '" . $login->RSArray["scout_id"] ."'";
      $login->Query($sql);
	  updateSession($sessionID, $login->RSArray["scout_id"]);
      if($login->RSArray["scout_cookie"] == 1)
      {  
         setcookie("kookScoutHash", $login->RSArray["scout_hash"], time()+60*60*24*30,  "/");
      }
      return true;
	}
    
  }

  function kookLogin($scoutHash, $sessionID)
  {
    $sql = "select * from scouts where scout_hash = '$scoutHash' AND scout_cookie = '1'";
    $login = new mysql();
    $login->Query($sql);
	$login->execRow();
	if($login->rows == 1)
	{
      $sql = "delete from sessions where sess_scoutID = '" . $login->RSArray["scout_id"] ."' ";
      $login->Query($sql);
	  updateSession($sessionID, $login->RSArray["scout_id"]);
    }  
  }
  
  function insertNewUser($nick, $name, $mail, $pass)
  {
    global $site;
    $login = new mysql();
    $sql = "select scout_id from scouts where scout_nick = '$nick'";
    $login->Query("$sql");
	$login->execRow();	
	if($login->rows > 0)
	{
	  $return["message"] = "Dieser Benutzername ist breits vorhanden";
	  $return["reg"]     = 0;
	}	
	else
	{
      $time = time();
      $hash = md5($pass . $nick . $name . $mail . time());
	  $sql = "insert into scouts (scout_nick, scout_name, scout_email, scout_pass, scout_reg, scout_hash) VALUES ('$nick', '$name', '$mail', '" . md5($pass) . "', '$time', '$hash')";
      $login->Query("$sql");	  
	  $sql = "select scout_id from scouts where scout_nick = '$nick'";
      $login->Query("$sql");	  
	  $login->execRow();
	  updateSession($site["sessionID"], $login->RSArray["scout_id"]);	  	  
	  $return["reg"] = 1;
	}  
    return $return;	
  }

?>
meine methoden zur user verwaltung übrigens.... als anregung...kannst aber so nicht nutzen, weil ich meine datenbankklasse nicht rausgeb :p

und wegen datum...da post ich später was ;)
Wow :eek:
Was genau bedeuten den diese "->" Pfeile? Kenn ich gar nicht :hmm:

EDIT:
Was ist denn diese "Datenbankklasse"?
 
Zuletzt bearbeitet:
Das mit dem Geburtstag hab ich jetzt hinbekommen :d THX!

Und zwar so:
PHP:
	$jahr = date("Y");
	$monat = date("n");
	if(strlen($monat) == 1){
		$monat = "0" . "$monat";
	}
	$tag = date("j");
	if(strlen($tag) == 1){
		$tag = "0" . "$tag";
	}
	$datum = "$monat" . "-" . "$tag";
	$res3 = mysql_db_query("xxxxxxxx", "SELECT nick, geburtstag FROM user");
	$num3 = mysql_num_rows($res3);
	if($num3 != 0){
		$nicks = " ";
		$treffer = 0;
		for($i = 0; $i <= ($num3 - 1); $i++){
			$geburtstag = mysql_result($res3, $i, "geburtstag");
			$alter = substr($geburtstag, 0, 4);
			$geburtstag = substr($geburtstag, 5, 5);
			if($geburtstag == $datum){
				$treffer++;
				$nick = mysql_result($res3, $i, "nick");
				$alter = $jahr - $alter;
				$nicks .= "<a href = 'profil.php?user=$nick' target = '_parent'>" . "$nick" . "</a>" . "($alter)" . ", ";
			}
		}
		if($treffer != 0){
			$len = strlen($nicks);
			$nicks = substr($nicks, 0, ($len - 2));
			echo	"$nicks";
		}
		else{
			echo	"*-";
		}
	}
	else{
		echo	"Fehler!";
	}

Gruß
Alex
 
Zuletzt bearbeitet:
man kann alle user die sich einloggen oder allgemein die Seite betreten eine Variable inner MysqlDB erhöhen, so hätte man immer die aktuelle Anzahl der user in der DB, nun muss man natürlich alle User löschen die z.b. länger als 5 Minuten nicht mehr aktualisiert worden sind.
Am besten gehts per IP und Timestamp
 
Hardwareluxx setzt keine externen Werbe- und Tracking-Cookies ein. Auf unserer Webseite finden Sie nur noch Cookies nach berechtigtem Interesse (Art. 6 Abs. 1 Satz 1 lit. f DSGVO) oder eigene funktionelle Cookies. Durch die Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir diese Cookies setzen. Mehr Informationen und Möglichkeiten zur Einstellung unserer Cookies finden Sie in unserer Datenschutzerklärung.


Zurück
Oben Unten refresh