PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : counter mit mysql


ne0
2003-10-20, 18:04:59
hi

ich will einen einfach counter mit mysql machen, er soll halt die besucher zählen, und sollte anhand einer "haltbarkeit" der ip zählen..

jetzt fehlt mir aber ein Ansatz, wie ich das realisieren kann. kann ich denn einem mysql eintrag eine "Haltbarkeit" geben?

naja ich brauche einen denkanstoss
danke
neo

Nase
2003-10-20, 19:07:10
Mir ist nicht klar, was du unter "Haltbarkeit von IPs" verstehst. Könntest du das mal ein bisschen ausführen?

ne0
2003-10-20, 19:19:36
ja ich will halt das jeder besucher gezählt wird..jetzt will ich aber auch zählen, wenn ein besucher zB. um 14 uhr die seite besucht, und um 15:30 nochmal wieder kommt, das es dann als neuer "besuch" gezählt wird. das heisst ich muss die ips speichern, damit nicht jeder refresh als neuer besucher gezählt wird.

ich muss also die ip speichern, und nach sagen wir einer stunde wieder löschen

Nase
2003-10-20, 19:48:44
Dann speicher in deiner Tabelle doch einfach noch den aktuellen Timestamp. Und beim Aufruf des Counters wird halt auch noch überprüft, ob ein Eintrag schon >= 1 Stunde in der Datenbank verweilt. Ist dies der Fall, wird er gelöscht.

ne0
2003-10-20, 20:40:53
ok das heisst, bei jedem aufruf des counters schmeisse ich als erstes die alten ips raus, und prüfe dann ob die ip schon drinne ist--> wenn nicht, dann wird sie gespeichert, und die counter spalte um 1 erhöht

ok danke für die hilfe

Nase
2003-10-20, 20:42:26
Genauso würde ich das machen. Wenn du fertig bist, dann sag mal bitte Bescheid, ob alles funktioniert hat.

ne0
2003-10-20, 21:01:23
ok mache mich gleich dran ;)

ne0
2003-10-21, 12:30:09
so fertig...wenn jemand noch optimierungstipps hat, nur her damit


<?php
//made by neo

//ausgabe

include('sql_config.php');
@mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) OR die("Keine Verbindung zur Datenbank. Fehlermeldung:".mysql_error());
mysql_select_db(MYSQL_DATABASE) OR die("Konnte Datenbank nicht benutzen, Fehlermeldung: ".mysql_error());


$sql = "SELECT
count
FROM
counter
ORDER BY
ID DESC";
$result = mysql_query($sql) OR die(mysql_error());
if(mysql_num_rows($result)) {
$row = mysql_fetch_array($result);
$last = @array_pop($row);
echo("<strong>$last</strong>");

}
////


//checken ob alte daten da sind

include('sql_config.php');
@mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) OR die("Keine Verbindung zur Datenbank. Fehlermeldung:".mysql_error());
mysql_select_db(MYSQL_DATABASE) OR die("Konnte Datenbank nicht benutzen, Fehlermeldung: ".mysql_error());
$time = time() -3600;
//$time = time() -5;

$result = mysql_query("DELETE FROM
counter
WHERE
time < $time;") OR die(mysql_error());

////////////////////////////

//ip checken..wenn sie nicht in der db ist, dann wird um 1 erhöht
$ip = $REMOTE_ADDR;
//$ip = mt_rand(1,6500);

$time = time();

$sql4 = "SELECT
ip
FROM
counter
where IP='".$ip."'";
$result4 = mysql_query($sql4) OR die(mysql_error());
if(mysql_num_rows($result4) <= 0) {

$last = $last+1;
echo("<br>");
echo($last);
$sql3 = "INSERT INTO counter
(time,ip,count)
VALUES
('$time',
'$ip',
'$last')";


include('sql_config.php');
@mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_PASS) OR die("Keine Verbindung zur Datenbank. Fehlermeldung:".mysql_error());
mysql_select_db(MYSQL_DATABASE) OR die("Konnte Datenbank nicht benutzen, Fehlermeldung: ".mysql_error());

$result3 = mysql_query($sql3) OR die ("Fehlermeldung:".mysql_error());
}
//////////////////////////7

?>

hier der sql dump


CREATE TABLE `counter` (
`ID` INT( 11 ) NOT NULL AUTO_INCREMENT ,
`time` VARCHAR( 20 ) DEFAULT NULL ,
`ip` VARCHAR( 15 ) DEFAULT NULL ,
`count` VARCHAR( 10 ) DEFAULT NULL ,
PRIMARY KEY ( `ID` )
);

Nase
2003-10-21, 13:46:39
Scheint doch recht gut zu sein. Kann man zwar noch ein stylistisch ein bisschen verbessern, muss aber auch nicht wirklich sein.

Nur noch eine Frage. Was macht das hier?

//ip checken..wenn sie nicht in der db ist, dann wird um 1 erhöht
$ip = $REMOTE_ADDR;
//$ip = mt_rand(1,6500);

Ich verstehe die auskommentierten Sachen nicht.

ne0
2003-10-21, 13:57:18
achso ja


//ip checken..wenn sie nicht in der db ist, dann wird um 1 erhöht
$ip = $REMOTE_ADDR;
//$ip = mt_rand(1,6500);


ja die erste zeile ist halt das kommentar, die zweite zeile holt sich die ip des users, und die dritte generiert einfach ne zahl..das hatte ich gemacht zum testen...weil ich ja net als ne andere ip habe..deshalb habe ich es rauskommentiert, damit es "ausgeschaltet" wird..naja hätte ich rausmachen können

Nase
2003-10-21, 14:00:43
Der Kommentar ist leider nicht sehr durchsichtig für mich. Da steht, du überprüfst die IP, wenn diese nicht in der Datenbank vorhanden ist, dann wird sie um 1 erhöht. Wie kannst du die IP um 1 erhöhen bzw. was soll das. Macht doch überhaupt keinen Sinn.

Tschuldigung, aber ich glaube ich steh irgendwie auffem Schlauch....

ne0
2003-10-21, 14:15:41
hehe nein nein, das soll heissen, das wenn die ip noch nicht in der db ist, wird der counter um 1 erhöht, und gleichzeitig wird die ip in die db eingetragen..so wenn der besucher jetzt noch auf der seite rumklickt, wird geprüft ob die ip in der db ist..

wenn ja, dann wird der counter nicht erhöht
wenn nein, dann wird er erhöht und die ip gespeichert

ja ok die kommentare sind nicht die besten, aber ich kanns nicht besser :)

Nase
2003-10-21, 14:21:59
Jetzt hab ichs verstanden :)