ich wende mich nochmals an euch damals konnte man mir ja bei meinem Problem helfen. Ich versuche gerade einen Besucherzähler zu programmieren.
Das ganze soll einfach gehalten sein, ich möchte zählen wieviele Besucher pro Tag auf der Seite waren, wieviele am Tag davor online waren und wieviele im Monat auf der Seite waren und die gesamt Zahl.
Das Gesamte ist kein Problem. Bei dem Punkt wieviele es heute waren hapert es schon, ich kann euch ja mal den Ausschnitt hier zeigen:
PHP Code:
#Besucher heute
$time = time();
$heute = date("d.m.Y");
$sql_besucher_heute = 'SELECT * FROM counter WHERE date = \''.$heute.'\'';
echo '<p style="padding-left: 5px;">Keine Nutzer sind derzeit online.</p>';
}
Ich schätze mal es hängt bei dem WHERE in der PHP Abfrage den wenn ich das ganze in phpMyAdmin ausprobiere gibt er ebenfalls ein leeres Resultat zurück leider, weiß ich nicht wieso :x. Ich hoffe ihr könnt mir da bisschen was zusagen.
Alternativer Denkanstoss: Du gibst jedem User nen Cookie der sagt, dass er schon auf der Seite war (Haltbarkeit 24h) und countest für jeden der keinen solchen Cookie hat deinen Dayli-Wert + 1 --> sollte vill n bischen eleganter sein
Alternativer Denkanstoss: Du gibst jedem User nen Cookie der sagt, dass er schon auf der Seite war (Haltbarkeit 24h) und countest für jeden der keinen solchen Cookie hat deinen Dayli-Wert + 1 --> sollte vill n bischen eleganter sein
MfG, Mdna
Noch besser wäre es die Zeit auszurechnen bis der Tag vorbei ist, un das als Lebensdauer des Cookie zu setzen.
<?php require_once'includes/mysql_connect.php'; require_once'classes/SimpleCounter.class.php'; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head> <title>Counter</title> </head>
<body>
<?php $counter = new SimpleCounter(); //count $counter->count(); //visitors total echo $counter->getVisitors().'<br />'; //visitors total one day ago echo $counter->getVisitors(0,$counter->getTime(0)).'<br />'; //visitors today echo $counter->getVisitors($counter->getTime(),time()).'<br />'; //visitors one day ago echo $counter->getVisitors($counter->getTime(1),$counter->getTime(0)).'<br />'; //visitors two days ago echo $counter->getVisitors($counter->getTime(2),$counter->getTime(1)).'<br />';
for ($i=0; $i<=10; $i++) { $from=date("d.m.Y",$counter->getTime($i)); $to=date("d.m.Y",$counter->getTime($i-1)); echo "visitors from $from to $to : ".$counter->getVisitors($counter->getTime($i),$counter->getTime($i-1)).'<br />'; }
<?php require_once'DBController.class.php'; class SimpleCounter extends DBController{
public function getTime($daysAgo=0){ return time()-(date("H")*3600+date("i")*60+date("s"))-($daysAgo*86400); }
public function count(){ if(!isset($_COOKIE['cookie'])){ $this->setCookie(); $this->addVisitor(); } }
private function setCookie(){ setcookie("cookie", "counter", $this->getTime()+86400); }
} ?>
classes/DBController.class.php:
PHP Code:
<?php require_once'MysqlHelper.class.php'; class DBController extends MysqlHelper{
private function addVisitor(){ $this->_('insert into counter set ip=')->esc($_SERVER['REMOTE_ADDR'])->exec(); }
public function getVisitors($from=0,$to=0){ $to=($to==0)?time():$to; return $this->_('select count(*) from counter where UNIX_TIMESTAMP(timestamp) between ')->esc($from)->_(' and ')->esc($to)->execSelect('single'); }
} ?>
classes/MysqlHelper.class.php:
PHP Code:
<?php class MysqlHelper{ private $__query;
protected function esc($value){ mysql_real_escape_string($value); $value=(is_string($value))?"'".$value."'":$value; $this->__query.=$value; return $this; }
public function escape($value){ mysql_real_escape_string($value); return $value=(is_string($value))?"'".$value."'":$value; }
protected function _($string){ $this->__query.=$string; return $this; }
protected function execSelect($returnValues='numeric,row,single'){ $result = mysql_query($this->__query); $this->__query=''; while ($row = mysql_fetch_assoc($result)) { $columns=mysql_num_fields($result); $rows = mysql_num_rows($result); for ($i = 0; $i < $columns; $i++) { $fieldName=mysql_field_name($result, $i); switch ($returnValues) { case 'row': $values[$fieldName]=$row[$fieldName]; break; case 'single': $values=$row[$fieldName]; break; case 'numeric': $values[]=$row[$fieldName]; break; case 'numeric,row,single': $values[$fieldName][]=$row[$fieldName]; break; } } } mysql_free_result($result); return $values; }
protected function esc($value){
mysql_real_escape_string($value);
$value=(is_string($value))?"'".$value."'":$value;
$this->__query.=$value;
return $this;
}
Du verwendest mysql_real_escape_string() falsch. Die Funktion gibt den maskierten String zurück - Du aber ignorierst den Rückgabewert. Der Aufruf hat ergo keinen Effekt.
Ansonsten finde ich aber deine Vererbungshierarchie komisch. Wieso muss SimpleCounter von DBController erben, und wieso erbt DBController von MysqlHelper? Welchen Sinn macht hier eine Ist-ein-Beziehung? Ich würde das so gestalten, dass SimpleCounter eine Instanz von DBController erstellt und verwendet (oder injiziert bekommt) - gleiches für DBController.
Ich kann meine Meinung nicht wirklich begründen, aber irgendwie wirkt diese Struktur einfach ... "Komisch?" ... Auf mich. Vielleicht habe ich aber auch keine Ahnung davon. Ich bin schließlich kein allwissender Fachinformatiker wie unser Guru playa18.
[S] Besucherzähler [B] E*Gold 09/01/2011 - elite*gold Trading - 4 Replies Hallo liebe comm. ,
suche jemanden der mir einen Besucherzähler fürs Forum machen kann...
Er sollte schlicht sein und mit blauer Schrift...Und er sollte einen IP Block er haben damit die Personen nicht doppelt und dreifach gezählt werden...
Macht einfach 'n paar Gebote ich such mir dann das beste Gebot aus ;)
Und sagt wie lange es dauern würde :D