449 Aufrufe
Gefragt in Skripte(PHP,ASP,Perl...) von
Hallo und Guten Abend.
Also ich weiß einfach nicht weiter.
Ich bin noch recht weit am Anfang meiner Kenntnisse und war dabei, mal einen Counter zu entwerfen.

Ich habe eine Datenbank und eine Webseite die ein Login Script enthält, welches auf Sessions basiert.
Anhand dieser Sessions möchte ich meinen Counter Configurieren.

In Teil 1 meines Counters habe ich alle User anzeigen lassen, die registriert sind. Das allein war ja noch recht einfach.

In Teil 2 jedoch stoße ich schon auf erhebliche Probleme.
Am Anfang dachte ich, nun, wenn ich einfach per If Anweisung prüfen lasse, welche Session gerade nicht "Null" beinhaltet und diese dann mit DESC sortieren lasse und mit limit 0,1 ausgebe, würde ich die richtige Lösung haben.

Ich erstellte mir also ein script das wie folgt aussah:


<?
$abfrage = "SELECT id, session FROM users order by id DESC LIMIT 0,1";
$ergebnis = mysql_query($abfrage);
while($row = mysql_fetch_object($ergebnis))
{
if ($session == "")
{
echo "<span class='schrift_12'><b>0</b></span>";
}
else
{
echo "<span class='schrift_12'><b>$row->id</b></span>";
}
}
?>


Schon hier musste ich feststellen, das es NICHT zum gewünschten Erfolg führte.
Was passiert ? Das Script zeigt mir wie bei dem Script für die registrierten User alle geregten Member an.
Problem:
Ich weiß nicht, wie ich die If Anweisung so schreibe, das er mir die Spalte "Session" richtig überprüft und wenn keine Session aktiv ist, "0" ausgibt und ansonsten eben den höchsten IP Wert, der keine "NULL" in der "Session" Spalte stehen hat.

Ferner stieß ich auf das Problem, das selbst wenn dieses Script funktioniert, ich nicht das richtige Ergebnis angezeigt bekomme.
Denn wenn z.b. die User mit der IP 1, 3 und 5 Online sind, dann würde mir das Script den Wert "5" ausgeben, doch Tatsächlich Online sind nur 3.
Hierbei weiß ich nicht, wie ich das Script so schreibe, das er alle IDs zählt, und er mir nur das Ergebnis als Summe ausgibt.

Als nächstes würde ich gerne einen Dritten Teil schreiben, in dem die Useranzahl am Tag angezeigt wird.
Doch hier stoße ich schon an meine Grenzen bevor ich überhaupt begonnen habe ^^

Ich hoffe ich finde hier Antworten und Hilfen.
Wenn mir jemand ein Script postet, dann bitte mit Erklärung. Denn ich möchte das nicht einfach kopieren sondern auch verstehen :)
Ansonsten würde ich mich auch über Links freuen, in denen meine Fälle mit vorhandenen Lösungen Diskutiert oder per Tutorial durchgenommen werden.
Leider habe ich auch nach langer Suche nichts gefunden, was mir weiter hilft.
Sämtliche Ergebnisse handelten entweder um txt Datei basierende Counter oder anderen Dingen, die mit meinem eigentlichen Problem nichts zu tun haben.
Man, ich schreib immer soviel ^^
Ich hoffe aber, das es wenigstens verständlich war :)
Ich freue mich über jegliche Hilfen.
Gerne auch per Chat oder Telefon, damit das ganze nicht so zu einer arg langwierigen Sache wird.

mfg Heiko

5 Antworten

0 Punkte
Beantwortet von jenniffer1111 Einsteiger_in (5 Punkte)
[b]hallo.... & schade das die frage noch offen ist. denn ich steh vorm selben problem & im web gibts ne menge anderer denen es auch so geht.
also das grundproblem welches ich habe, ist: ich möchte per php einen eigenen counter entwerfen (incl. design) mit gestern / heute/ online und dieses script mit meinen seitenlink + copyright versehen, verschlüsseln & dann kostenlos anderen zur verfügung stellen.
gute frage, ne?? also auch wenn wir inzwischen 2009 haben & keiner bisher ne antwort wusste, - vielleicht kommt ja bill g. zufällig mal an der frage vorbei.
auch i d kommenden jahren wirds ne interessante sache bleiben.

gggglg @ all Jenny ;-))
0 Punkte
Beantwortet von son_quatsch Experte (5.3k Punkte)
Bzgl. dem Script von 2007: wenn die Abfrage die Summe liefern soll, warum dann nicht entsprechend zählen?

<?php

$abfrage= 'SELECT count(id) AS cnt FROM users GROUP BY id';
$ergebnis= mysql_query( $abfrage );
$cnt= 0;
while( $row= mysql_fetch_array( $ergebnis ) ) {
$cnt= $row['cnt'];
}
echo "$cnt Besucher online";

?>


Bzgl. 2009:
ich möchte per php einen eigenen counter entwerfen (incl. design)
Design ist HTML und CSS - das wäre ein eigenes Thema, was auch erst ganz zum Schluss angegangen wird.

mit gestern / heute/ online
...dann musst du dir für jeden Tag auch merken, wieviele online waren. Lösbar ist dies, wenn bei jeder neu initialisierten Session beispielsweise folgende SQL-Anweisung ausgeführt wird:
UPDATE statistik SET anzahl= anzahl+ 1 WHERE zeit= 200903;
Kleine Schwierigkeit hierdrin: man muss per PHP hinterher prüfen, ob Datensätze geändert wurden (de.php.net/mysql_affected_rows). Sind das nämlich 0, muss man folgende SQL-Anweisung erstmal absetzen:
INSERT INTO statistik( zeit, anzahl ) VALUES( 200903, 1 );
In beiden Fällen ist 200903 natürlich Jahr+Tag und muss dynamisch angepasst werden.

und dieses script mit meinen seitenlink + copyright versehen
Ja, so mache ich das auch immer :-) Andere lösen meine Probleme, aber ich mach Copyright drunter.

verschlüsseln & dann kostenlos anderen zur verfügung stellen
Verschlüsseln geht weder in PHP, noch in HTML und erst recht nicht in CSS. Wie genau hast du dir das vorgestellt?
0 Punkte
Beantwortet von supermax Experte (4.8k Punkte)
Bei HTML und CSS hast du recht, PHP läßt sich mit kommerziellen Tools allerdings sehr wohl verschlüsseln, z.B. mit Zend Guard; daneben kann man den Code auch mittels "obfuscation" zumindest gegen Gelegenheits-"Diebe" absichern. Dabei werden u.a. strukturelle Leerzeichen wie Einrückungen sowiew Kommentare entfernt und die Namen von Funktionen und Variablen durch zufällige Zeichenkombinationen ersetzt.
0 Punkte
Beantwortet von Mitglied (173 Punkte)
@Supermax
Ich denke nicht, das ein Newbi im Bereich PHP mit Zend arbeitet, das dürfte etwas teuer sein.
Unabhängig davon, das ein Counter so ziemlich das unnötigste ist (nach einem Gästebuch) was das Web hergibt.
Warum?
Ein Counter kann naturgemäß nicht wirklich funktionieren und die Serverlogs sind allemal aussagekräftiger.

Nessus
0 Punkte
Beantwortet von mixmax Experte (2.2k Punkte)
hm... es ist nicht unbedingt so zuverläßig mit einem Wert "Anzahl" zu arbeiten...

würde das so realisieren:

tabelle seitenzugriffe:
sessionid char(32),
zeit TIMESTAMP als standartwert Current_TimeStamp

Tabelle globalcounter
spalte "count" int unsigned
einen Wert 0 von hand hinzufügen

für gesamtzähler benutze eine andere Tabelle in der nur eine Zeile mit der Zahl rein kommt - die aber nicht bei jedem Seitenaufruf erhöhen sondern nur wenn du über eine Sessionvariable prüfen kannst das die Session neu ist.

session_start();
if (!session_is_registered("countpersonal")) {
session_register("countpersonal");
session_register("counttotal");
session_register("countheute");
session_register("countgestern");
mysql_query("update globalcounter set count=count+1");
mysql_query("delete from seitenzugriffe where zeit<".date("Ymd", time()-24*3600));
mysql_query("insert into seitenzugriffe (sessionid) values('".session_id()"')");
$Result = mysql_query("(select count(zeit) from seitenzugriffe where
zeit>=".date("Ymd", time())." and zeit<".date("Ymd", time()+24*3600)." group
by sessionid) as heute, select count(zeit) from seitenzugriffe where
zeit>=".date("Ymd", time()-24*3600)." and zeit<".date("Ymd", time())." group
by sessionid as gestern, (select count from globalcounter limit 1)
as total");
if ($Data = mysql_fetch_array($Result) {
$_SESSION["counttotal"] = $Data['total'];
$_SESSION["countheute"] = $Data['heute'];
$_SESSION["countgestern"] = $Data['gestern'];
}
$_SESSION["countpersonal"] = 0;
}
$_SESSION["countpersonal"]++;


hat nun einen Counter für Clicks in der eigenen Session,
einen für gesamtanzahl sessions
einen für Sessions heute
einen für Sessions gestern

habs noch nicht getestet - also kleinere rechtschreibfehler sind möglich.
...