• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Besucherzähler funktioniert nicht.

sergej59

Neues Mitglied
Hallo,
ich würde gerne einen einfachen Besucherzähler verwenden, der
einen cookie setzt, der 24h gültig ist.

Leider zählt er nicht.
Die Counterstand wird in einer counter.txt gespeichert.

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



<?php
echo "Besucher:";

$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);
?>

Wo ist der Fehler ?
 
Zuletzt bearbeitet von einem Moderator:
lässt du cookies zu und vorallem, ist die datei schreibbar geschaltet ("CHMOD")?

Nils aka XraYSoLo
 
counter.php
PHP:
$file = 'counterfile';

if(!file_exists($file)) {
    file_put_contents($file, 1);
    $c = 1;
}

if(!isset($c)) {
    $c = (int)file_get_contents($file) + 1;
    file_put_contents($file, $c);
}

echo "Sie sind Besucher nummer ".$c."!";
 
lässt du cookies zu und vorallem, ist die datei schreibbar geschaltet ("CHMOD")?

Nils aka XraYSoLo
Ja beides trifft zu.

counter.php
PHP:
$file = 'counterfile';

if(!file_exists($file)) {
    file_put_contents($file, 1);
    $c = 1;
}

if(!isset($c)) {
    $c = (int)file_get_contents($file) + 1;
    file_put_contents($file, $c);
}

echo "Sie sind Besucher nummer ".$c."!";

Ja, allerdings will ich nicht , dass der Zähler jeden beliebig oft zählt der die Seite besucht,er soll jeden Besucher nur 1 mal pro Tag zählen, egal wie oft er auf die Seite geht.
 
Zuletzt bearbeitet:
PHP:
$file = 'counterfile';
$cookieName = 'blacounter';

if(!isset($_COOKIE[$cookieName])) {
        if(!file_exists($file)) {
            file_put_contents($file, 1);
            $c = 1;
        }

        if(!isset($c)) {
            file_put_contents($file, (int)file_get_contents($file) + 1);
        }

        $time = mktime  (0,0,0, (int)date('n'), (int)date('j')+1);
        setcookie($cookieName, '1', $time);
}

$c = file_get_contents($file);
echo "Sie sind Besucher nummer ".$c."!";

nur ne kleine änderung und schon werden deine wünsche genauso erfüllt wie vorher ^^
 
PHP:
$file = 'counterfile';
$cookieName = 'blacounter';

if(!isset($_COOKIE[$cookieName])) {
        if(!file_exists($file)) {
            file_put_contents($file, 1);
            $c = 1;
        }

        if(!isset($c)) {
            file_put_contents($file, (int)file_get_contents($file) + 1);
        }

        $time = mktime  (0,0,0, (int)date('n'), (int)date('j')+1);
        setcookie($cookieName, '1', $time);
}

$c = file_get_contents($file);
echo "Sie sind Besucher nummer ".$c."!";
nur ne kleine änderung und schon werden deine wünsche genauso erfüllt wie vorher ^^

Danke , funktioniert jetzt wunderbar :smile::smile::smile:

Nur ne kleine frage, steht die "1" bei
PHP:
setcookie($cookieName, '1', $time);
für einen Tag ? oder wie kann ich dir Zeiteinheiten des Cookies
verändern ?
 
einfach nur so ^^
die zeit kannst du in der spalte $time = mktime(... ändern

diese funktionberechnet den timestamp der angegebenen daten, bei dir also

stunde minute sekunde monat tag jahr

0 stunde, 0 minute, 0 sekunde, aktueller monat, aktueller tag des monats + 1, aktuelles jahr

also immer genau das datum von morgen früh um 0:00 uhr

selber anpassen sollte jetzt kein problem mehr sein fals doch

PHP: mktime - Manual

MFG
 
Danke, klappt super :)

Habe aber nun das Problem, dass wenn ich den Counter auf einer seperatens eite laufen lasse, alles wunderbar funktioniert, doch sobalt ich ihn in emin index einfüge oder include, ich folgende fehlermeldung bekomme :

Warning: Cannot modify header information - headers already sent by (output started at C:\Dokumente und Einstellungen\Sergej\Desktop\XAMPP Lite\Server\htdocs\home\test\index.php:10) in C:\Dokumente und Einstellungen\Sergej\Desktop\XAMPP Lite\Server\htdocs\home\test\layout.php on line 31
Sie sind Besucher nummer 6!

line 31 ist
PHP:
        setcookie($cookieName, '1', $time);
.

Tut mir leid wenn ich nerve, PHP ist mein feind xD
 
Das ist relativ einfach zu lösen. Vor Deinem setcookie darf keinerlei Ausgabe an den Browser gesendet werden. Es reicht schon eine Leerzeile vor dem einleitenden <?php-Tag.

Gruß thuemmy
 
Das ist relativ einfach zu lösen. Vor Deinem setcookie darf keinerlei Ausgabe an den Browser gesendet werden. Es reicht schon eine Leerzeile vor dem einleitenden <?php-Tag.

Gruß thuemmy

Das ist aber komisch, wie soll ich dann den Counter verwenden, wenn
nicht vor ihm stehen darf ? Ich wollte ihn eigentlich unter meine Navigation setzen
PHP:
<ul id="navigation">
       <li><a href="index.php" target="_self">Home</a></li>
       <li><a href="impressum.html"target="_self" >Impressum</a></li>
       <li><a href="aboutme.html" target="_self">About me</a></li>
       <li><a href="cat.html" target="_self">Seite</a></li>
       <li><a href="gb.php" target="_self">Gästebuch</a></li>
</ul>

<?php include("counter/counter.php"); ?>

Wie stelle ich das jetzt an ?
 
oder du könntest output_buffering einschalten dann kannst du überall in deiner seite ein cookie setzen :)
 
Du musst dann natürlich noch die ob_end_flush()-Funktion aufrufen, um den Ausgabe-Puffer dann zu senden.

Gruß thuemmy
 
Zurück
Oben