tutorials.de Buch-Aktion 05/2012
Seite 1 von 2 12 LetzteLetzte
ERLEDIGT
JA
ANTWORTEN
15
ZUGRIFFE
830
EMPFEHLEN
  • An Twitter übertragen
  • An Facebook übertragen
AUF DIESES THEMA
ANTWORTEN
  1. #1
    puckido puckido ist offline Mitglied Bronze
    Registriert seit
    May 2006
    Beiträge
    29
    Hi,
    ich habe versucht einen grafischen Counter in php zu realisieren, funktioniert auch soweit, nur zählt der Counter immer +2 anstatt +1?
    z.b.
    schreibe ich in counter.txt 0 und er gibt 1 aus, richtig soweit, aber in der counter datei steht 2!
    Bei erneutem aufruf gibt er aber 3 aus und schreibt 4 in counter.txt.

    Komme einfach nicht auf den Fehler.

    Hier das Script:
    PHP-Code:
    <?php

    /////////////////// Counter ///////////////////


    $filename "counter.txt";
    $datafile fopen($filename "r");

    $zahl fgets($datafile"50");
    fclose($datafile);


    $zahl = ++$zahl;

    $datafile fopen($filename "w+");
    flock($datafile"2");
    $null fwrite($datafile$zahl);
    flock($datafile"3");
    fclose($datafile);

    /////////////////// Bild malen ///////////////////

    header ("Content-type: image/gif");

    $mein_bild ImageCreate (50020);
    $white ImageColorAllocate ($mein_bild000);
    $gruen ImageColorAllocate ($mein_bild50,148,0);
    imagecolortransparent($mein_bild,$white);
    imageFilledRectangle($mein_bild,20,20,280,130,$white);
    ImageString ($mein_bild522"Diese Seite wurde schon "$zahl ." mal aufgerufen!"$gruen);
    imagegif($mein_bild);

    ?>
    Grüße und THX im Voraus
     

  2. #2
    Avatar von Flex
    Flex Flex ist offline (aka Felix Jacobi)
    tutorials.de Moderator
    Registriert seit
    Nov 2001
    Ort
    Wuppertal
    Beiträge
    5.295
    Blog-Einträge
    65
    Probier es mal mit:
    PHP-Code:
    <?php
    # [...]
    $zahl $zahl++;
    # [...]
    ?>
     
    KIDS Kinderbetreuungsdienst
    Xing

    "When you play the game of thrones, you win or you die. There is no middle ground."
    by Cersei Lannister in "A Game Of Thrones"

  3. #3
    puckido puckido ist offline Mitglied Bronze
    Registriert seit
    May 2006
    Beiträge
    29
    Jetzt bleibt er irgendwie auf 2 hängen un zählt nicht mehr weiter......
    Komisch.

    greets
     

  4. #4
    menschmeyer menschmeyer ist offline Rookie
    Registriert seit
    Aug 2005
    Beiträge
    9
    <?php

    /////////////////// Counter ///////////////////

    $filename = "counter.txt";
    $datafile = fopen($filename , "r");
    $zahl = fgets($datafile, "50");
    fclose($datafile);
    $zahl = ++$zahl;
    $datafile = fopen($filename , "w+");
    flock($datafile, "2");
    $null = fwrite($datafile, $zahl);
    flock($datafile, "3");
    fclose($datafile);

    echo $zahl;
    ?>

    also bei mir klappt das alles. jedesmal wenn ich die seite neu lade erhöht sich die zahl um eins. noch ein hinweis: es ist egal ob $zahl++ oder ++$zahl.
    welche php version hast du?
     

  5. #5
    Avatar von forsterm
    forsterm forsterm ist offline Mitglied Rubin
    Registriert seit
    Nov 2004
    Ort
    Bayern
    Beiträge
    1.328
    Hallo,
    du musst entweder
    $zahl = $zahl + 1;
    oder
    $zahl++;
    nehmen.
    Eine Mischung aus beidem gibt es nicht bzw. funktioniert nicht.

    mfg
    forsterm
    Geändert von forsterm (07.05.06 um 16:33 Uhr)
     
    Wie man Fragen richtig stellt

    Wichtig:
    Bitte markiert eure beantworteten Fragen als "erledigt" (links unten auf "Erledigt" klicken).
    __________________
    .:Mitglied #26 des 1. offiziellen Sven Uwe Fan-Clubs:.

  6. #6
    puckido puckido ist offline Mitglied Bronze
    Registriert seit
    May 2006
    Beiträge
    29
    die 5.1.1 hab ich auf meinem server.

    Witzigerweise funktioniert das:
    PHP-Code:
    <?php 

    /////////////////// Counter /////////////////// 

    $filename "counter.txt"
    $datafile fopen($filename "r"); 
    $zahl fgets($datafile"50"); 
    fclose($datafile); 
    $zahl = ++$zahl
    $datafile fopen($filename "w+"); 
    flock($datafile"2"); 
    $null fwrite($datafile$zahl); 
    flock($datafile"3"); 
    fclose($datafile); 

    echo 
    $zahl
    ?>
    Bei mir auch.
    Geändert von puckido (07.05.06 um 16:35 Uhr)
     

  7. #7
    menschmeyer menschmeyer ist offline Rookie
    Registriert seit
    Aug 2005
    Beiträge
    9
    das kann ich jetzt leider nicht testen. ich habe hier bloß php4. aber wie gesagt: bei mir klappt das 1a.
     

  8. #8
    puckido puckido ist offline Mitglied Bronze
    Registriert seit
    May 2006
    Beiträge
    29
    mhh. mit php 4 geht der eigentliche counter bei mir auch, nur zählt er im bild trozdem +2 ?
     

  9. #9
    Avatar von forsterm
    forsterm forsterm ist offline Mitglied Rubin
    Registriert seit
    Nov 2004
    Ort
    Bayern
    Beiträge
    1.328
    Hallo,
    stimmt, das ist wirklich komisch, so:
    $zahl = $zahl++;
    funktioniert es nicht, dafür aber so:
    $zahl = ++$zahl;
    und so:
    $zahl++;

    mfg
    forsterm
     
    Wie man Fragen richtig stellt

    Wichtig:
    Bitte markiert eure beantworteten Fragen als "erledigt" (links unten auf "Erledigt" klicken).
    __________________
    .:Mitglied #26 des 1. offiziellen Sven Uwe Fan-Clubs:.

  10. #10
    puckido puckido ist offline Mitglied Bronze
    Registriert seit
    May 2006
    Beiträge
    29
    Zitat Zitat von forsterm
    Hallo,
    stimmt, das ist wirklich komisch, so:
    $zahl = $zahl++;
    funktioniert es nicht, dafür aber so:
    $zahl = ++$zahl;
    und so:
    $zahl++;

    mfg
    forsterm
    Mit jeder Version selbes Spiel.
     

  11. #11
    Registriert seit
    Mar 2002
    Ort
    Stuttgart (Baden-Württemberg)
    Beiträge
    984
    Blog-Einträge
    7
    Ich hab jetzt die Ausgabe nicht direkt gemacht (also header('Content-Type: image/png')), sondern das Bild gespeichert und dann mit echo() ausgegeben, dann funktionierts auch... Im Folgenden mal der Code:

    PHP-Code:
    <?php
    ob_start
    (); # Ausgabepuffer aktivieren
    error_reporting(E_ALL); # Alle Meldungen anzeigen


    $filename 'counter.txt'# Counterdatei

    # Wenn Datei nicht existiert, neu anlegen und Counterstand auf 0 setzen
    if(!file_exists($filename)){ 
        
    $fp fopen($filename'w+');
        
    $i    0; }
    # Datei existiert, also Counterstand auslesen
    else{
          
    $fp fopen($filename'r');
          
    $i    fread($fpfilesize($filename)); }

    fclose($fp); # Datei schließen
    $i += 1# Counterstand um eins erhöhen

    #Bild erstellen    
    $cIMG imageCreate (50020);
    $white imageColorAllocate ($cIMG000);
    $green imageColorAllocate ($cIMG50,148,0);
    imageColorTransparent($cIMG,$white);
    imageFilledRectangle($cIMG,20,20,280,130,$white);
    imageString ($cIMG522'Diese Seite wurde schon '.$i.' mal aufgerufen!'$green);
    imagePNG($cIMG'counter.png');    

    echo 
    '<img src="counter.png" />';

    $fp fopen($filename 'w'); # Datei zum schreiben öffnen und Inhalt löschen
    flock($fpLOCK_EX); 
    fwrite($fp$i); # Neuen Counterstand eintragen
    flock($fpLOCK_UN);
    fclose($fp); # Datei schließen

    ob_end_flush(); # Ausgabepuffer an Browser senden
    ?>
    Geändert von mAu (07.05.06 um 17:27 Uhr)
     
    Gruß mAu


    ──────────────────────────
    Ich auf flickr

    * Unformatierten Quellcode schaue ich mir _nicht_ an!
    * Sollte ich euch bei einer Frage weitergeholfen haben, würde ich mich über eine positive Bewertung freuen.
    * Bitte die Netiquette beachten.
    * Vergesst nicht, beantwortete Fragen als erledigt zu markieren!


  12. #12
    puckido puckido ist offline Mitglied Bronze
    Registriert seit
    May 2006
    Beiträge
    29
    Also so funktioniert es bei mir auch, nur möchte ich die counter.php direkt als Grafik einbinden (auf einer anderen Seite).
    Komisch...

    EDIT: So, auf Basis eines Download Scripts hier die unelegante Lösung:

    PHP-Code:
    <?php

    /////////////////// Counter ///////////////////
    $filename 'counter.txt';

    if(!
    file_exists($filename)){
        
    $fp fopen($filename'w+');
        
    $i    0; }
    else{
          
    $fp fopen($filename'r');
          
    $i    fread($fpfilesize($filename)); }

    fclose($fp);

    if(
    $i == '')
        
    $i 0;
    else
        
    $i += 1;

    $mein_bild ImageCreate (50020);
    $white ImageColorAllocate ($mein_bild000);
    $gruen ImageColorAllocate ($mein_bild50,148,0);
    imageColorTransparent($mein_bild,$white);
    imageFilledRectangle($mein_bild,20,20,280,130,$white);
    imageString ($mein_bild522"Diese Seite wurde schon ".$i." mal aufgerufen!"$gruen);
    imagegif($mein_bild'counter.gif');




    $bild "counter.gif";
     if ((
    file_exists($bild)) && (is_readable($bild)))

             {

                  
    $dlfile=fopen($bild,'r');

            }

       else

           {

             die(
    '<p>Datei konnte nicht geöffnet werden.\n');

            }

          
    header('Content-Type: image/gif');

          
    header('Content-Disposition: attachment; filename="'.$bild.'"');

        
    //  header('Content-Length: '.filesize($bild));

          
    while (!feof($dlfile))

              {

                  
    $bytes=1024;

                  if (
    $kbs>0)

                      {

                          
    $bytes*=$kbs;

                      }

                  echo 
    fread($dlfile,$bytes);

                  
    flush();

                  if ((!
    feof($dlfile)) && ($kbs>0))

                      {

                          
    sleep(1);

                      }

              }

          
    fclose($dlfile);



    $fp fopen($filename 'w');
    flock($fpLOCK_EX);
    fwrite($fp$i);
    flock($fpLOCK_UN);
    fclose($fp);


    ?>
    Eingebunden werden kann es einfach per <img src="counter.php">.
    Zuerst wird die Grafik auf Platte geschrieben, dann geöffnet und an den Empfänger geschickt. Wird das Script direkt aufgerufen gibt es die Datei zum Download an.

    Falls jemand noch eine elegantere Lösung hat bitte melden!

    Greets
    Geändert von puckido (07.05.06 um 17:43 Uhr)
     

  13. #13
    Registriert seit
    Mar 2002
    Ort
    Stuttgart (Baden-Württemberg)
    Beiträge
    984
    Blog-Einträge
    7
    So, die idiotischste Lösung... Weil er sich ja immer um 2 erhöht, lasse ich $i einfach nur um 0,5 erhöhen und somit im Endeffekt um 1... Haha

    PHP-Code:
    <?php
    ob_start
    (); # Ausgabepuffer aktivieren
    error_reporting(E_ALL); # Alle Meldungen anzeigen
    header('Content-Type: image/png');

    $filename 'counter.txt'# Counterdatei

    # Wenn Datei nicht existiert, neu anlegen und Counterstand auf 0 setzen
    if(!file_exists($filename)){ 
        
    $fp fopen($filename'w+');
        
    $i    0; }
    # Datei existiert, also Counterstand auslesen
    else{
          
    $fp fopen($filename'r');
          
    $i    fread($fpfilesize($filename)); }

    fclose($fp); # Datei schließen
    #Bild erstellen    
    $cIMG imageCreate (50020);
    $white imageColorAllocate ($cIMG000);
    $green imageColorAllocate ($cIMG50,148,0);
    imageColorTransparent($cIMG,$white);
    imageFilledRectangle($cIMG,20,20,280,130,$white);
    imageString ($cIMG522'Diese Seite wurde schon '.ceil($i).' mal aufgerufen!'$green);
    imagePNG($cIMG);

    $i += 0.5# Counterstand um 0.5 erhöhen (also im Endeffekt um 1, warum auch immer...)

    $fp fopen($filename 'w'); # Datei zum schreiben öffnen und Inhalt löschen
    flock($fpLOCK_EX); 
    fwrite($fp$i); # Neuen Counterstand eintragen
    flock($fpLOCK_UN);
    fclose($fp); # Datei schließen

    ob_end_flush(); # Ausgabepuffer an Browser senden
    ?>
    Geändert von mAu (07.05.06 um 17:41 Uhr)
     
    Gruß mAu


    ──────────────────────────
    Ich auf flickr

    * Unformatierten Quellcode schaue ich mir _nicht_ an!
    * Sollte ich euch bei einer Frage weitergeholfen haben, würde ich mich über eine positive Bewertung freuen.
    * Bitte die Netiquette beachten.
    * Vergesst nicht, beantwortete Fragen als erledigt zu markieren!


  14. #14
    puckido puckido ist offline Mitglied Bronze
    Registriert seit
    May 2006
    Beiträge
    29
    LOL Funktioniert tatsächlich! Fettes Dankeschön!

    greets
     

  15. #15
    Registriert seit
    Mar 2002
    Ort
    Stuttgart (Baden-Württemberg)
    Beiträge
    984
    Blog-Einträge
    7
    Nur noch eine Sache. Mir ist aufgefallen, dass wenn man ganz schnell den Reload-Button drückt, sich der Counterstand manchmal nur um 0.5 erhöht, also pack mal $i in imageString in die ceil()-Funktion. Round() oder floor() geht auch. Dann hast du immer glatte Werte.

    P.s: Markiere das Thema bitte noch als "Erledigt". Danke!
     
    Gruß mAu


    ──────────────────────────
    Ich auf flickr

    * Unformatierten Quellcode schaue ich mir _nicht_ an!
    * Sollte ich euch bei einer Frage weitergeholfen haben, würde ich mich über eine positive Bewertung freuen.
    * Bitte die Netiquette beachten.
    * Vergesst nicht, beantwortete Fragen als erledigt zu markieren!


Ähnliche Themen

  1. Antworten: 6
    Letzter Beitrag: 06.11.10, 15:58
  2. MySQL zählt bei mir falsch / falsche Zählabfrage
    Von Veränderung im Forum Relationale Datenbanksysteme
    Antworten: 4
    Letzter Beitrag: 05.10.08, 18:29
  3. Thunderbird zählt inbox Mails falsch?
    Von BeaTBoxX im Forum Microsoft Windows
    Antworten: 0
    Letzter Beitrag: 07.02.06, 13:14
  4. Counter zählt nur bei direkt aufruf
    Von masupil im Forum PHP
    Antworten: 1
    Letzter Beitrag: 15.01.06, 12:56
  5. selbstgemachter counter zählt nicht!
    Von vaporizer im Forum Flash Plattform
    Antworten: 1
    Letzter Beitrag: 22.12.03, 16:41