|
You last visited: Today at 00:43
Advertisement
PHP Besucherzähler
Discussion on PHP Besucherzähler within the Web Development forum part of the Coders Den category.
08/10/2012, 13:42
|
#1
|
elite*gold: 8
Join Date: Jul 2010
Posts: 1,085
Received Thanks: 126
|
PHP Besucherzähler
Servus,
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.'\'';
$query_besucher_heute = mysql_query($sql_besucher_heute);
$fetch_besucher_heute = mysql_fetch_array($query_besucher_heute);
$besucher_heute = $fetch_besucher_heute['id'];
echo 'Besucher heute:';
echo '<b><p style="padding-left: 5px;">'.$besucher_heute.'</p></b>';
#Besucher gestern
echo 'Besucher gestern:';
echo '<b><p>'.$besucher_gestern.'</p></b>';
#Besucher im Monat
echo '<p>Besucher letzten Monat:</p>';
echo '<b><p>'.$besucher_monat.'</p></b>';
#Besucher gesamt
$sql_gesamt_besucher = 'SELECT * FROM counter';
$query_gesamt_besucher = mysql_query($sql_gesamt_besucher);
$fetch_array_besucher_gesamt = mysql_fetch_array($query_gesamt_besucher);
$gesamt_besucher = $fetch_array_besucher_gesamt['id'];
echo '<p>Besucher gesamt:</p>';
echo '<b><p style="padding-left: 5px;">'.$gesamt_besucher.'</p></b>';
#Derzeit eingeloggte Nutzer
$sql_online_users = 'SELECT username, now_online FROM users WHERE now_online = \'yes\'';
$query_online_users = mysql_query($sql_online_users);
echo '<p>Derzeit sind folgende Nutzer eingeloggt:';
if(mysql_num_rows($query_online_users) != 0)
{
while($fetch_online_users = mysql_fetch_assoc($query_online_users))
{
echo '<p>'.$fetch_online_users['username'].'</p>';
}
}else{
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.
Liebe Grüße
CracyCrazz
|
|
|
08/10/2012, 14:13
|
#2
|
elite*gold: 0
Join Date: Sep 2005
Posts: 427
Received Thanks: 87
|
MySQL's standard format ist:
PHP Code:
date("Y-m-d H:i:s")
wenn dein db column das "DATE_FORMAT" hat(glaub mysql5.0+) ist es noch einfacher/effizienter da php wegfällt.
z.b. in deinem fall dann
Quote:
|
SELECT DATE_FORMAT( `dbfeldname` , '%d.%m.%Y' ) FROM counter
|
|
|
|
08/11/2012, 10:46
|
#3
|
elite*gold: 0
Join Date: Sep 2007
Posts: 266
Received Thanks: 32
|
moin,
gib mal $sql_besucher_heute aus dann schau mal wie dein select aussieht...
\''.$heute.'\'' = falsch
'".$heute."' = richtig
und debugge erst mal bevor du ein kiddy script reinpostest
|
|
|
08/11/2012, 13:07
|
#4
|
elite*gold: 8
Join Date: Jul 2010
Posts: 1,085
Received Thanks: 126
|
Quote:
Originally Posted by playa18
moin,
gib mal $sql_besucher_heute aus dann schau mal wie dein select aussieht...
\''.$heute.'\'' = falsch
'".$heute."' = richtig
und debugge erst mal bevor du ein kiddy script reinpostest
|
Ja, es mag ein Kiddy Skript sein, aber jetzt mal ehrlich ich arbeite nicht so super lange damit, also ne mehr sag ich dazu mal nicht.
Ich hab das Problem selbst hinbekommen, es war alles richtig. Ich hatte nur einen kleinen Denkfehler.
Von daher brauch ich keine Hilfe mehr. Das Ding ist fertig, zwar nicht 100% effizient, aber es funktioniert für den Anfang reicht es mir persönlich.
Achja ,und PS: es kam folgendes raus: SELECT * FROM counter WHERE datum = '11.08.2012'
Ich habs schon richtig maskiert..^^
|
|
|
08/11/2012, 15:27
|
#5
|
elite*gold: 0
Join Date: Jan 2009
Posts: 70
Received Thanks: 19
|
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
|
|
|
08/11/2012, 17:28
|
#6
|
elite*gold: 0
Join Date: May 2008
Posts: 1,222
Received Thanks: 500
|
Quote:
Originally Posted by mdna
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.
|
|
|
08/18/2012, 04:20
|
#7
|
elite*gold: 0
Join Date: Sep 2010
Posts: 17
Received Thanks: 3
|
index.php:
PHP Code:
<?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 />'; }
?>
</body>
</html>
includes/mysq_connect.php:
PHP Code:
<?php $dbhost = 'localhost'; $dbuser = 'root'; $dbpass = ''; $db = 'counter'; mysql_connect($dbhost, $dbuser, $dbpass) or die('Error connecting to mysql'); mysql_select_db($db); ?>
classes/SimpleCounter.class.php:
PHP Code:
<?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 exec($returnOption=''){ $result=mysql_query($this->__query); $this->__query=''; if($returnOption=='insert_id'){ return mysql_insert_id(); } return mysql_affected_rows(); } } ?>
DB:
Code:
CREATE TABLE IF NOT EXISTS `counter` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`ip` varchar(15) NOT NULL,
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
|
|
|
08/18/2012, 22:08
|
#8
|
elite*gold: 0
Join Date: Jan 2012
Posts: 759
Received Thanks: 416
|
Wenn Kritik erlaubt ist:
Code:
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.
|
|
|
Similar Threads
|
[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
|
All times are GMT +1. The time now is 00:44.
|
|