Kann man das irgendwie einfacher schreiben?

Feldhofe

Erfahrenes Mitglied
Hallo!

Dieser Scriptteil dient dazu, täglich beim ersten Aufruf der Seite nach Null Uhr die Besucherzahlen, die bisher bei "heute" standen, auf "gestern" umzutragen. Da ich eine ganze Menge derartger Counter einsetze, ist das Script sehr lang, dehalb die Frage: geht das einfacher??

Gruß
Feldhofe

PHP:
if ($hochdatum <= $nulluhr)
{

// Gesamtseite
mysql_query("update zahlen set gestern='$heute' where ort='startseite'");
mysql_query("update zahlen set heute='1' where ort='startseite'");

// Charts
$charts=mysql_query("select heute from zahlen where ort='charts'");
while ($rowcharts=mysql_fetch_row($charts))
{
mysql_query("update zahlen set gestern='$rowcharts[0]' where ort='charts'");
mysql_query("update zahlen set heute='1' where ort='charts'");
}

// 2001
$charts2001=mysql_query("select heute from zahlen where ort='2001'");
while ($rowcharts=mysql_fetch_row($charts2001))
{
mysql_query("update zahlen set gestern='$rowcharts[0]' where ort='2001'");
mysql_query("update zahlen set heute='1' where ort='2001'");
}

// 2000
$charts2000=mysql_query("select heute from zahlen where ort='2000'");
while ($rowcharts=mysql_fetch_row($charts2000))
{
mysql_query("update zahlen set gestern='$rowcharts[0]' where ort='2000'");
mysql_query("update zahlen set heute='1' where ort='2000'");
}

// 1999
$charts1999=mysql_query("select heute from zahlen where ort='1999'");
while ($rowcharts=mysql_fetch_row($charts1999))
{
mysql_query("update zahlen set gestern='$rowcharts[0]' where ort='1999'");
mysql_query("update zahlen set heute='1' where ort='1999'");
}

// 1998
$charts1998=mysql_query("select heute from zahlen where ort='1998'");
while ($rowcharts=mysql_fetch_row($charts1998))
{
mysql_query("update zahlen set gestern='$rowcharts[0]' where ort='1998'");
mysql_query("update zahlen set heute='1' where ort='1998'");
}

// Siedler
$chartssiedler=mysql_query("select heute from zahlen where ort='siedler'");
while ($rowcharts=mysql_fetch_row($chartssiedler))
{
mysql_query("update zahlen set gestern='$rowcharts[0]' where ort='siedler'");
mysql_query("update zahlen set heute='1' where ort='siedler'");
}

// Gästebuch
$chartsgb=mysql_query("select heute from zahlen where ort='gb'");
while ($rowcharts=mysql_fetch_row($chartsgb))
{
mysql_query("update zahlen set gestern='$rowcharts[0]' where ort='gb'");
mysql_query("update zahlen set heute='1' where ort='gb'");
}

// Feldhofe
$feldhofe=mysql_query("select heute from zahlen where ort='feldhofe'");
while ($rowcharts=mysql_fetch_row($feldhofe))
{
mysql_query("update zahlen set gestern='$rowcharts[0]' where ort='feldhofe'");
mysql_query("update zahlen set heute='1' where ort='feldhofe'");
}

// Webmaster
$webmaster=mysql_query("select heute from zahlen where ort='webmaster'");
while ($rowcharts=mysql_fetch_row($webmaster))
{
mysql_query("update zahlen set gestern='$rowcharts[0]' where ort='webmaster'");
mysql_query("update zahlen set heute='1' where ort='webmaster'");
}

// Chat
$chat=mysql_query("select heute from zahlen where ort='chat'");
while ($rowcharts=mysql_fetch_row($chat))
{
mysql_query("update zahlen set gestern='$rowcharts[0]' where ort='chat'");
mysql_query("update zahlen set heute='1' where ort='chat'");
}
 
ähm ... verstehe jetzt net so ganz, was Du da genau speicherst .... sind das Forumseinträge oder sowas ?

Ich würde einfach bei JEDEM Eintrag einfach ganz simpel das Datum speichern, und dann nur in der Anzeige schreiben:

PHP:
if ($datum==$heute) echo "heute"; else echo $datum;

damit sparst Du Dir schonmal die ganze "Umkopiererei" ;)

hilft das?


Dunsti
 
Nein, das Ganze funktioniert etwas anders:
In die aktuelle Besucherliste werden die Besucher mit Ankunftsdatum, IP etc. gespeichert.
Damit werden die Momentanbesucher (also die innnerhalb der letzten 5 Minuten angekommenen) gezählt.
Diese Liste löscht sich immer wieder alle Einträge, die älter als 5 Minuten sind, sodaß sie nicht zu lang werden kann.

Die Bedingung am Anfang [if ($hochdatum <= $nulluhr)] besagt nur, daß Folgendes ausgeführt wird, wenn $hochdatum (das höchste Datum in der DB) kleiner als das aktuell eingetragene ist, also z.B. noch Datum 24.01. hat, während aktuell schon der 25.01. ist.

Dann sollen die vollkommen getrennten Listen übertragen werden. Für jeden Counter gibt es nämlich drei Speicherwerte: Gesamt, heute und gestern. Gesamt wird bei jedem Besucher +1 gezählt, heute genauso, nur beim oben eintretenden Fall, daß soeben der erste Besucher des neuen Tages die Seite aufruft, wird der Wert "Heute" auf "Gestern" gesetzt.

Alle Klarheiten beseitigt?? :)

Gruß
Feldhofe

P.S. Das Problem war jetzt, ob man diese Übertrags-Anweisungen der einzelnen Listen nicht einfacher gestalten könnte.
 
Um die Momentbesucher zu zählen würde ich mit Sessions arbeiten.
Die Session ID übergibst du in jedes Dokument.

Dann machst du eine Session Tabelle.
id
sid
cr_date

Die SessionID kannst du auch mit einer User Datenbank verknüpfen. Also Optional noch die UserID hin.

id
sid
cr_date
userid

Ich nehme mal an das du ein Login auf deiner Seite hast. Somit holst du erstmal die ID in eine SessionVariable.

Dann schreibst du ein Script was auf jeder Seite eingefügt wird. Zum Beispiel so:

PHP:
$time = time();

if (!$sessionid) {
	mt_srand((double)microtime()*1000000);
	$sessionid = md5(str_replace(".","", $REMOTE_ADDR) +
	mt_rand(100000, 999999));
	$sql = 	"INSERT INTO session (session, lastaction) ".
			"VALUES ('$sessionid', $time)";
	mysql_query($sql, $db) or error("Die Session konnte nicht in die Datenbank geschrieben werden");	
	
} else {
	$sql = 	"UPDATE session SET lastaction=$time ".
			"WHERE session='$sessionid'";
	mysql_query($sql, $db) or error("Die Session konnte nicht aktualisiert werden!");
}

function addtime($min) {
	$time = time();
	$ad = $min * 60;
	$kill = $time - $ad;
	return $kill;
}

$sql1 = "SELECT * FROM session WHERE lastaction < ".addtime(30);
$result = @mysql_query($sql1, $db) or error("Aktualit&auml;stpr&uuml;fung schlug fehl!");

if (mysql_num_rows($result)) {

	while ($rows = mysql_fetch_row($result)) {
		$sql2 = "DELETE FROM session WHERE session='$rows[1]'";
		mysql_query($sql2, $db) or error("L&ouml;schung einer alten Session schlug fehl!");		
		$sql3 = "DELETE FROM wkb WHERE sid='$rows[1]'";
		mysql_query($sql3, $db) or error("L&ouml;schung alter Daten im Wkb schlug fehl!");
		$sql4 = "DELETE FROM adressen WHERE sessionid='$rows[1]'";
		mysql_query($sql4, $db) or error("L&ouml;schung alter Adressdaten schlug fehl!");		
	}
}

Das Script ist noch aus einer PHP3 Anwendung und basiert auf einer selbst generierten SessionID. Aber vielleicht kannst du damit was anfagen. Dir jetzt alles hier zu coden wäre zu viel und du hättest ja nichtsmehr zu tun :D:D

Gruß
Fati
 
Danke für deine Mühe...aber eigentlich bin ich mit meiner bisherigen Zähung sehr zufrieden! :)
Das Ganze soll ja nur so einen ungefähren Anhaltspunkt geben, einen Login habe ich übrigens hier auch nicht.
Aber trotzdem danke!

Feldhofe
 
Naja, war ja reinkopiert. Das Script ist auch schon älter und nicht richtig ausgereift. Wenn ich mal zeit habe werde ich sowas richtig Scripten und als Paket auf meiner Page zum download anbieten.

Gruß
Fati
 

Neue Beiträge

Zurück