Register for your free account! | Forgot your password?

Go Back   elitepvpers > Coders Den > Web Development
You last visited: Today at 00:43

  • Please register to post and access all features, it's quick, easy and FREE!

Advertisement



PHP Besucherzähler

Discussion on PHP Besucherzähler within the Web Development forum part of the Coders Den category.

Reply
 
Old   #1
 
CracyCrazz's Avatar
 
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
CracyCrazz is offline  
Old 08/10/2012, 14:13   #2
 
kissein's Avatar
 
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
kissein is offline  
Old 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
playa18 is offline  
Old 08/11/2012, 13:07   #4
 
CracyCrazz's Avatar
 
elite*gold: 8
Join Date: Jul 2010
Posts: 1,085
Received Thanks: 126
Quote:
Originally Posted by playa18 View Post
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..^^
CracyCrazz is offline  
Old 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
mdna is offline  
Old 08/11/2012, 17:28   #6

 
boxxiebabee's Avatar
 
elite*gold: 0
Join Date: May 2008
Posts: 1,222
Received Thanks: 500
Quote:
Originally Posted by mdna View Post
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.
boxxiebabee is offline  
Old 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 ;
FR28 is offline  
Old 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.
dowhile is offline  
Reply


Similar Threads 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.


Powered by vBulletin®
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
SEO by vBSEO ©2011, Crawlability, Inc.
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Support | Contact Us | FAQ | Advertising | Privacy Policy | Terms of Service | Abuse
Copyright ©2025 elitepvpers All Rights Reserved.