# Eigener Besucherzähler



## Ploddi (22. März 2003)

Hallo.
Ich habe mir jetzt einen eigenen Besucherzähler für meine Website gemacht.
Nur allerdings habe ich jetzt versucht einmal an meinem Rechner auf die Website zu gehen und danach an dem Von meinem Vater, da der Counter eine IP-Sperre hat.
nur irgendwie steigt der Counter nicht.
Kann mir jemand helfen?
Hier ist der code:


<?php
// hier wird der Cookie gesetzt.
if(!isset($_Cookie["besucher"]))
$value = "Cookie von Olli";
setcookie ("besucher", $value, time()+3600);
?>

<font size="+2">
sie sind besucher nummer:<br>

<?php
$datei = fopen("besucher.txt","w+");
$counterstand = fgets($datei, 10);
if($counterstand == "")
    {
    $counterstand = 0;
    }
if(!isset($_Cookie["besucher"]))
    {
    $counterstand++;
    }
echo $counterstand;
rewind($datei);
fwrite ($datei, $counterstand);
fclose ($datei);
?>
</font>


vielleicht weiss ja jemand wodran es liegt.
Danke
MFG Ploddi


----------



## alexorg (22. März 2003)

kann es sein das der pc deines vaters und deiner über EINEN internet anschluss angeschlossen sind und somit auch nur eine ip existiert?


----------



## Ploddi (22. März 2003)

Hallo.
Das kann sein, Da mein Vater mein Bruder und Ich alle 3 an einem Router hängen.
kann es vielleicht daran liegen?
Danke.
MFG Ploddi


----------



## Dick Starbuck (22. März 2003)

Ja, es liegt zweifellos daran!


----------



## Ploddi (22. März 2003)

Hallo.
Ja aber wenn ihr euch den Quelltext anschaut den ich gepostet habe, sollte es doch eigentlich gehen, oder?
Danke.
MFG Ploddi


----------



## Dick Starbuck (23. März 2003)

Ups, hab ich garnicht drauf geachtet. Habe nur 'IP-Sperre' gelesen.
Aber das ist ja definitiv keine... Sondern nur eine Reload-Sperre per Cookie.

Mal ein ganz blöder Gedanke: Wie wäre es, wenn du zuerst den Counterstande erhöhen würdest, sofern kein Cookie vorhanden ist, und erst danach ein Cookie setzt? Wenn du das wie jetzt umgekehrt machst wird da sehr lange eine 0 stehen... 

Ich hab da gerade kurz was provisorisches zusammengebastelt. Bei mir läufts gut. Kannst es ja mal probieren:


```
<?
if(!file_exists("besucher.txt"))
    {
      $datei = fopen("besucher.txt","a");
      fputs($datei,"0");
      fclose($datei);
    }
else
    {
      if(!isset($_COOKIE['besucher'])) 
          { 
            $datei = fopen("besucher.txt","r+");
            $counterstand = fgets($datei,1000);
            $counterstand++;
            rewind($datei);
            fputs($datei,$counterstand);
            fclose($datei);
            echo "Counterstand: " . $counterstand;
          }
      else
          {
            $datei = fopen("besucher.txt","r+");
            $counterstand = fgets($datei,1000);    
            fclose($datei);   
            echo "Counterstand: " . $counterstand;
          }
    }
if(!isset($_COOKIE['besucher']))
    { 
      setcookie ("besucher", "cookie", time()+3600);
    }
?>
```

Gruß, Dick Starbuck


----------



## alexorg (23. März 2003)

lol da wirste dann jaaaaa vieeeeellle besucher zählen können 

ps nächstes mal wenn du code postest mach das mal mit der code funktin des boardes das sieht denn nämlci so aus:


```
<?php 
// hier wird der Cookie gesetzt. 
if(!isset($_Cookie["besucher"])) 
$value = "Cookie von Olli"; 
setcookie ("besucher", $value, time()+3600); 
?> 

<font size="+2"> 
sie sind besucher nummer:<br> 

<?php 
$datei = fopen("besucher.txt","w+"); 
$counterstand = fgets($datei, 10); 
if($counterstand == "") 
{ 
$counterstand = 0; 
} 
if(!isset($_Cookie["besucher"])) 
{ 
$counterstand++; 
} 
echo $counterstand; 
rewind($datei); 
fwrite ($datei, $counterstand); 
fclose ($datei); 
?> 
</font>
```
und lässt sich dann besser lesen


----------



## Ploddi (23. März 2003)

Hallo.
Wollte mich kurz bendanken.
Habe den Code der als letztes gepostet wurde ausprobiert, und funktioniert wunderbar.
Danke!!!
MFG Ploddi


----------



## Ploddi (23. März 2003)

Komisch!!!
Auf einmal funktioniert er nicht mehr.
er bleibt auf 1 stehen, wieso?
Danke
MFG Ploddi


----------



## Dick Starbuck (23. März 2003)

Hä?? Der Code, der zuletzt geposted wurde ist genau der, den du anfangs geposted hast. Der kann, wie ich dir versuchte zu erklären, nicht funktionieren. Probier doch mal den von mir...


----------



## Ploddi (23. März 2003)

Hallo.
Ich will ja nicht sagen das der Code blöd ist, aber es wird immer wenn man drauf geht um eins erhöht!!!
es soll mit cookies gemacht sein.
Danke
MFG Ploddi


----------



## Ploddi (23. März 2003)

Hallo.
Ich habe es jetzt hoch geladen und es steht immer unter dem Counter:

Warning: Cannot add header information - headers already sent by (output started at /home/www/web21/html/verweise1.php:10) in /home/www/web21/html/verweise1.php on line 49

, habe allerdings bereits CHMOD 777 vergeben.
Weiss jemand wodran es liegen kann?
Danke
MFG Ploddi


----------



## Dick Starbuck (23. März 2003)

Bin ich im falschen Film? Das Ding arbeitet mit Cookies. Und funktioniert hervorragend. Prüf mal deine Cookie-Einstellungen im Browser. Und arbeite erstmal ein wenig an deinen PHP-Grundkenntnissen, bevor du so eine Sache angehst! 

//Edit: Okay, mein Fehler. Die Ausgabe findet vorm Setzen des Cookies statt.
Bei mir funzt es zwar trotzdem. Aber machs einfach so, dann gehts auf jeden Fall bei allen Hostern:


```
<?
if(!file_exists("besucher.txt"))
    {
      $datei = fopen("besucher.txt","a");
      fputs($datei,"0");
      fclose($datei);
    }
else
    {
      if(!isset($_COOKIE['besucher'])) 
          { 
            $datei = fopen("besucher.txt","r+");
            $counterstand = fgets($datei,1000);
            $counterstand++;
            rewind($datei);
            fputs($datei,$counterstand);
            fclose($datei);
            //echo "Counterstand: " . $counterstand;
          }
      else
          {
            $datei = fopen("besucher.txt","r+");
            $counterstand = fgets($datei,1000);    
            fclose($datei);   
            //echo "Counterstand: " . $counterstand;
          }
    }
if(!isset($_COOKIE['besucher']))
    { 
      setcookie ("besucher", "cookie", time()+3600);
    }
echo "Counterstand: " . $counterstand;
?>
```


----------



## Ploddi (23. März 2003)

Hallo.
jetzt ist es aber immer noch so:

es kommt die Fehlermeldung:

Warning: Cannot add header information - headers already sent by (output started at /home/www/web21/html/verweise1.php:10) in /home/www/web21/html/verweise1.php on line 49


und der Counter steigt wenn ich auf Aktualisieren klicke.
warum?
Danke
MFG Ploddi


----------



## Dick Starbuck (23. März 2003)

Line 49 - Du hast das also einfach irgendwo reingebügelt. :-( 

Vorm Setzen eines Cookies darf keinerlei HTML-Output stattfinden. Sonst wird es eben, wie auch in deinem Fall, nicht gesetzt.. Und deswegen wird auch jeder Reload gecounted.

Aus diesem Grunde ist dieser Lösungsansatz von vorneherein auch nicht sehr sinnvoll. Auch deswegen, weil die Relaod-Sperre Client-Seitig stattfindet und somit sehr leicht umgangen werden kann. Viele User lassen ihre Browser keine Cookies akzeptieren.

Ich kann dir nur empfehlen, auf eine richtige IP-Sperre zurückzugreifen, bei der die IPs der User in eine Liste geschrieben und abgefragt werden, und dann, nach einer bestimmten Zeit wieder gelöscht werden.

Zu diesem Thema sollte es hier soweit ich weiß auch mindestens 1 Tutorial geben.

Aber vor allem solltest du dich vorher wirklich ein bisschen mehr in PHP einarbeiten, damit du wenigstens verstehst, was du da überhaupt tust.  

MfG


----------



## SilentWarrior (24. März 2003)

hey dick





> Ich kann dir nur empfehlen, auf eine richtige IP-Sperre zurückzugreifen, bei der die IPs der User in eine Liste geschrieben und abgefragt werden, und dann, nach einer bestimmten Zeit wieder gelöscht werden.


hm... da hätte ich doch grad mal ein paar fragen:

1. was soll daran so schlimm sein, es mit cookies zu machen? ich meine, welcher hinter dem mond lebende surfer deaktiviert schon cookies? und ausserdem: sollte das einer machen, ist das für deine seite nur von vorteil, da sich dann der counter jedesmal erhöht.

2. ich sehe irgendwie die logik hinter der sache mit der ip nicht. angenommen, ich gehe mit einer ip x ins netz, und fünf minuten später geht mein kumpel mit der gleichen ip rein (weil der jetzt die dynamisch zugewiesen bekommen hat), dann zählt das nur als ein besuch. oder noch schöner: wenn jetzt drei leute die gleiche ip haben wegen kabel, zählen die auch nur einmal.


----------



## alexorg (24. März 2003)

hmmm...

also deine chance das ein anderer mit der selben ip 5 minuten später auf die gleiche seite geht halte ich für ziemlich unwahrscheinlich (so 1:900000000000000)

und wieso istd as von vorteil wenn die der counter sich IMMER um einen erhöht... schließlich will er ja GENAU wissen wieviele user tatsächlich auf der seite waren und dies geht nicht wenn man bei jedem reload den counter um eins erhöht....

ach ja und nun zum thema... kann es sein, dass du den counter includest?

wenn ja musst du den cookie am anfang seten (am anfang der seite von der aus du includest (verzeiht mein deutsch : )

mfg,

alex


----------



## SilentWarrior (24. März 2003)

> also deine chance das ein anderer mit der selben ip 5 minuten später auf die gleiche seite geht halte ich für ziemlich unwahrscheinlich (so 1:900000000000000)


ich nicht. ist mir in den vergangenen wochen auf der eigenen page mehrfach passiert.





> und wieso istd as von vorteil wenn die der counter sich IMMER um einen erhöht... schließlich will er ja GENAU wissen wieviele user tatsächlich auf der seite waren


will er das? imho ist ein counter doch meist nur da, um damit anzugeben, wieviele leute schon auf der seite waren.





> wenn ja musst du den cookie am anfang seten (am anfang der seite von der aus du includest (verzeiht mein deutsch : )


äh... das hat doch dick schon geschrieben (?):





> Vorm Setzen eines Cookies darf keinerlei HTML-Output stattfinden.


----------



## alexorg (24. März 2003)

ja des kann sein, AUF DEINER EIGENEN page aber meinst du das ein anderer die gleiche ip kriegt und dann auch noch auf genau DEINE SEITE geht.... naja... halt ich für sehr unwahrscheinlich!


----------



## Chino (24. März 2003)

> _Original geschrieben von alexorg _
> *
> und wieso istd as von vorteil wenn die der counter sich IMMER um einen erhöht... schließlich will er ja GENAU wissen wieviele user tatsächlich auf der seite waren und dies geht nicht wenn man bei jedem reload den counter um eins erhöht....*



also wenn ich GENAU wissen will, wieviele user auf meiner seite waren, dann nehm ich meine logfiles und garantiert keinen 10-zeiligen php-counter der sogar noch auf cookies basiert


----------



## SilentWarrior (24. März 2003)

äh... alex, ich glaube du hast mich falsch verstanden. ich meine auf meine seite die online ist gehen des öfteren verschiedene leute mit einer ip.


----------



## Ploddi (24. März 2003)

Hallo.
ich habe jetzt den Code hier:


```
<?php
if(!isset($_COOKIE['besucher']))
    {
    $value = "Cookie von Olli";
      setcookie ("besucher", $value, time()+3600);
    }
?>
<html>
<head></head>
<body>

<?
if(!isset($_COOKIE['besucher']))
{
          $datei = fopen("besucher.txt","r+");
          $counterstand = fgets($datei,1000);
          $counterstand++;
          rewind($datei);
          fputs($datei,$counterstand);
          fclose($datei);
          //echo "Counterstand: " . $counterstand;
        }
    else
        {
          $datei = fopen("besucher.txt","r+");
          $counterstand = fgets($datei,1000);
          fclose($datei);
          //echo "Counterstand: " . $counterstand;
        }
echo "Counterstand: " . $counterstand;
?>
</body>
</html>
```

allerdings erhöht der Counterstnad sich immer noch jedes mal wenn man drauf klickt.
wodran kann es denn liegen?
Danke

PS: Ich habe alles zu PHP auf der Seite: Schattenbaum.de Durch gelesen.

MFG Ploddi


----------



## Ploddi (25. März 2003)

Hallo.
Mein Counter funktioniert jetzt, und zwar lag es wohl daran das Mein Webspace Anbieter (userpage.net)  nicht $_COOKIE["name"] unterstützt sondern nur $Cookiename.
ansonsten Danke ich an alle die mir geholfen haben.
MFG Ploddi


----------

