PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : counter [PHP + mySQL]



juke*
18.05.2005, 14:37
jo, das letzte "große" script, das ich brauche um meine hp mehr oder weniger fertigzustellen.

allerdings hab ich probleme.

ich weiss nich wie ich das mit der datenbank regele. ich hab schon ne halbe million verschiedene möglichkeiten der strukturierung ausprobiert aber keine scheint zu funktionieren und ich sitze momentan fest, deshalb hier die frage:

wie würdet ihr es datenbanktechnisch regeln, wenn euer counter folgende funktionen hätte:

- gesamt
- heute
- gestern

TruckerB
18.05.2005, 14:43
Das könnte dir Helfen. Leider Habe ich es selbst von irgend einer Seite und habe deswegen keine Macht über das ©.
Edit: Wie Fieß, HTML Wörter werden nicht umgewandelt :mad:
Hier (http://www.bernhardfalk.de/loader/counter.rar)

Tomarus
18.05.2005, 14:56
Am besten einfach den Timestamp des Besuches speichern ... dann irgendwie den Timestamp von heute, 0:00 berechnen und vergleichen.


$heute = maketime (0, 0, 0, date ('m', time()), date ('d', time()), date ('Y', time()));
$db->query ('SELECT COUNT(`id`) FROM `counter` WHERE `timestamp` > '.$heute);
$besucherheute = $db->result();
$db->query ('SELECT COUNT(`id`) FROM `counter` WHERE `timestamp` > '.($heute - 60 * 60 * 24).' AND `timestamp` < '.$heute);
$besuchergestern = $db->result();
$db->query ('SELECT COUNT(`id`) FROM `counter`');
$besuchergesamt = $db->result();

juke*
18.05.2005, 17:11
ok...hatte es grade nochmal probiert aber war wieder gescheitert -.-

dauernd gibt mir das scheiss script aus, dass mysql_fetch_array bzw mysql_fetch_assoc nich valid mysql resources seien...

naja...hab mir jetz n script genommen, dass ich mir mal irgendwo runtergeladne hatte, wo kein copyright druntersteht, das mir aber gesamtcounterstand, user online, heute, gestern ausgibt...

das nehm ich jetz erstmal, auch wenn ich fremdscripts eigentlich hasse -.-

Tomarus
18.05.2005, 17:14
dauernd gibt mir das scheiss script aus, dass mysql_fetch_array bzw mysql_fetch_assoc nich valid mysql resources seien...
Das deutet meist daraufhin, dass die abzufragenden Felder in der Datenbank nicht vorhanden sind ... und das geht sehr oft einfach auf Tippfehler zurück. Wie sieht dein Script denn aus?

el primato
18.05.2005, 17:39
Naja, also ich hätte hier auch noch ein script. Vielleicht gibts dir ja einige anregungen. Meinetwegen kannst du's auch einfach copy&pasten. Es ist (hoffentlich verständlich) kommentiert.



<?php
//Prüfen ob der user in der letzten minute online war
$sql = "SELECT
COUNT(*) as Anzahl
FROM
Counter
WHERE
IP = '".$_SERVER['REMOTE_ADDR']."'
AND
DATE_SUB(NOW(), INTERVAL 1 MINUTE) < Datum;";
$result = mysql_query($sql) OR die(mysql_error());
$row = mysql_fetch_assoc($result);
if (!$row['Anzahl']) {
//Wenn nicht, den counter um 1 erhöhen
$sql = "UPDATE
Counter_Zähler
SET
Zähler = Zähler + 1;";
mysql_query($sql) OR die(mysql_error());
}

//prüfen ob der user überhaupt schonmal auf der seite war
$sql = "SELECT
COUNT(*) as Anzahl
FROM
Counter
WHERE
IP = '".$_SERVER['REMOTE_ADDR']."'";
$result = mysql_query($sql) OR die(mysql_error());
$row = mysql_fetch_assoc($result);
if ($row['Anzahl']) {
//Wenn ja, das datum aktualisieren
$sql = "UPDATE
Counter
SET
Datum = NOW()
WHERE
IP = '".$_SERVER['REMOTE_ADDR']."'";
mysql_query($sql) OR die(mysql_error());
} else {
//Wenn nicht, einen neuen eintrag in der datenbank machen
$sql = "INSERT INTO
Counter (IP, Datum)
VALUES
('".$_SERVER['REMOTE_ADDR']."', NOW())";
mysql_query($sql) OR die(mysql_error());
}

//Alle datensätze, die älter als 1 minute sind, löschen
$sql = "DELETE FROM
Counter
WHERE
DATE_SUB(NOW(), INTERVAL 1 MINUTE) > Datum;";
mysql_query($sql) OR die(mysql_error());

//Den Counterstand aus der datenbank ablesen
$sql = "SELECT
Zähler
FROM
Counter_Zähler;";
$result = mysql_query($sql) OR die(mysql_error());
$row = mysql_fetch_assoc($result);

//Und zu guter letzt den counter ausgeben
echo $row['Zähler']." Insgesamt<br/>"; //Das ist dann die gesamtzahl der user, die die seite besucht haben
?>


Du brauchst dann noch die tabellen



CREATE TABLE Counter
(
IP VARCHAR(15),
Datum DATETIME
);
CREATE TABLE Counter_Zähler
(
Zähler INT(5)
);


Das ist jetzt ein counter, der dir den Gesamtstand an besuchern ermittelt. Dabei werden besucher, die innerhalb von einer minute mehrmals die seite aufrufen, nicht mitgezählt. Diese sperre kann man natürlich beliebig hoch setzen.
Daraus jetzt einen counter des letzten tages zu machen, sollte nicht so schwer sein...

juke*
18.05.2005, 23:08
mhh...ich hab jetz nochmal n älteres script rausgekramt, das erstmal nur user online anzeigt...glaube sowas ähnliches wurde hier sogar schonmal gepostet, bin mir nich sicher...

hier erstmal der code:



<?php

include ('inc/mysql_data.inc.php');

mysql_connect($db_host, $db_user, $db_pass) OR die("Es trat folgender Fehler auf".mysql_error());

mysql_select_db($db_name) OR die("Es trat folgender Fehler auf".mysql_error());

$time = time();
$ip = $_SERVER['REMOTE_ADDR'];

$result = mysql_query("SELECT COUNT (*) AS value FROM counter_online WHERE ip = '".$_SERVER['REMOTE_ADDR']."'");
$row = mysql_fetch_assoc($result);

switch ($row[value])
{
case 0:
mysql_query("INSERT INTO counter_online (timestamp,ip) VALUES ('$time','$ip')");
break;

case 1:
mysql_query("UPDATE counter_online SET timestamp = '".$time."' WHERE ip = '".$ip."'");
break;

}

$deltime = time() - 300;

mysql_query("DELETE FROM counter_online WHERE timestamp < '".$deltime."'");

$result = mysql_query("SELECT COUNT (*) AS online FROM counter_online");
$row = mysql_fetch_assoc($result);

echo $row[online];

mysql_close();

?>


problem: case 1 tritt nie ein, somit werden trotzdem neue einträge gemacht obwohl case 0 das verhindern sollte...
desweiteren werden mir dauernd fehler ausgegeben:



Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /usr/export/www/vhosts/funnetwork/hosting/juke/counter.php on line 13

Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /usr/export/www/vhosts/funnetwork/hosting/juke/counter.php on line 32

juke*
19.05.2005, 18:38
weiss keiner wo der fehler liegt?

juke*
21.05.2005, 22:02
fehler gefunden...
nach dem COUNT darf in der mysql anweisung kein leerzeichen stehen...

BillieJoe
25.05.2005, 14:23
§danke :confused: Kann mir bitte jemand mal einen HTML Code für einen Counter sagen??

Tomarus
25.05.2005, 14:25
Nein, denn einen HTML-Code gibt es nicht. Höchstens PHP-Codes. Und wie ich dir schonmal empfohlen habe: www.google.de ist eine sehr gute Seite für sowas. Unsere schöne http://forum.worldofplayers.de/layouts/wop/buttons/top_search2.gif (http://forum.worldofplayers.de/forum/search.php?)-Funktion übrigens auch.

BillieJoe
25.05.2005, 14:27
Ok, danke ich werds mir merken*gg*