kostenloser Webspace werbefrei: lima-city


Probleme mit fputcsv() / Besucherzähler

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    michaelkoepke

    michaelkoepke hat kostenlosen Webspace.

    Hallo,

    seit Stunden bin ich am probieren und bekomme immer den selben Misst!

    Ich möchte einen Besucherzähler über eine CSV Datei realisieren.
    Ich lade die Zahlen aus der Datei in ein Array ([0]->1,[1]->2) (Bsp.)
    Dann Zähle ich die Variable Plus 1.
    Bis hierhin wird auch noch alles ordentlich angezeigt aber nun...
    Nun will ich die neue Variable per fputcsv in die Datei zurück schreiben, aber er schreibt eine andere Zahl!

    Bsp. Ich lade die 5, dann rechne ich +1 = 6 aber in die Datei wird 7 geschrieben! WARUM?

    <?php
    $handle = fopen("items/modules/visitors/visitors.csv", "r");
    $data = fgetcsv($handle, 200, ";");
    fclose($handle);
    
    $data[0] ++;
    
    $handlea = fopen("items/modules/visitors/visitors.csv", "w");
    fputcsv($handlea, $data, ";");
    fclose($handlea);
    ?>
    <p>Besucher:</p>
    <p style='font-size: 10px;'>Heute:   <?php echo $data[0]; ?></p>
    ...

    Bitte helft mir, ich verzweifle!

    MFG Micha
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    1) Warum als CSV, wenn sich doch serialize() und unserialize() in Verbindung mit file_get_contents() und file_put_contents() perfekt anbieten?

    1) Hast du auch geschaut, welcher Wert aus der Datei gelesen wird und ob eventuell hier bereits ein Fehler liegt?
  4. Autor dieses Themas

    michaelkoepke

    michaelkoepke hat kostenlosen Webspace.

    Hey,

    klar kann man es auch anders machen, aber ich will nun unbedingt herausfinden, warum er das nicht so schreibt wie er soll ... :)

    Das Script liest definitiv die richtigen Daten aus der Datei (mit print_r kontrolliert) aber es schreibt nicht den richtigen Wert in die Datei, schreibe ich statt das Array die Daten mit "-Zeichen in die Funktion, schreibt er genau diese auch in die Datei, warum dann nicht die Richtigen aus dem Array?
  5. michaelkoepke schrieb:
    Hallo,

    seit Stunden bin ich am probieren und bekomme immer den selben Misst!

    Ich möchte einen Besucherzähler über eine CSV Datei realisieren.
    Ich lade die Zahlen aus der Datei in ein Array ([0]->1,[1]->2) (Bsp.)
    Dann Zähle ich die Variable Plus 1.
    Bis hierhin wird auch noch alles ordentlich angezeigt aber nun...
    Nun will ich die neue Variable per fputcsv in die Datei zurück schreiben, aber er schreibt eine andere Zahl!

    Bsp. Ich lade die 5, dann rechne ich +1 = 6 aber in die Datei wird 7 geschrieben! WARUM?

    <?php
    $handle = fopen("items/modules/visitors/visitors.csv", "r");
    $data = fgetcsv($handle, 200, ";");
    fclose($handle);
    
    $data[0] ++;
    
    $handlea = fopen("items/modules/visitors/visitors.csv", "w");
    fputcsv($handlea, $data, ";");
    fclose($handlea);
    ?>
    <p>Besucher:</p>
    <p style='font-size: 10px;'>Heute:   <?php echo $data[0]; ?></p>
    ...

    Bitte helft mir, ich verzweifle!

    MFG Micha

    Heyho,

    wie hackyourlife schon schrieb, mit .csv Dateien würde ich es dir auch nicht empfehlen, aber ok.

    Weiterhin existiert ein Logikfehler im Script:
    Angenommen zum Zeitpunkt x wird dein Script von Besucher A aufgerufen und bis zum $data[0]++; (Zeitpunkt y) ausgeführt. Zum Zeitpunkt y wird dein Script von Besucher B nochmal aufgerufen und es wird wieder bis $data[0]++; (Zeitpunkt z) ausgefhürt.
    Erst nach dem Zeitpunkt z wird das von Besucher A und B aufgerufene Script zu Ende ausgeführt.
    Dann verschwindet ein Besucher in deiner Statistik.
    Gegenmaßnahmen: Schreibschutz auf die Datei bzw. einfach nur ein fopen Handle mit Schreib- und Leserechten anfordern, dadurch sollte sie automatisch gesperrt werden.

    VG Lucas
  6. Autor dieses Themas

    michaelkoepke

    michaelkoepke hat kostenlosen Webspace.

    Hey,

    danke für die Info, habe es geändert und auch mit einer normalen .txt Datei sowie fgets und fputs verwendet, jedoch das gleiche Ergebnis, in die Datei wird immer der Wert n+1 eingetragen, ich verstehe das nicht.

    Ich lese den Wert X Bsp. 1
    erhöhe diesen um 1 mit ++
    und schriebe den neuen Wert in die Datei warum wird nun immer n+1 also in diesem Bsp. 3 statt 2 in die Datei geschrieben?

    --------------------------------------------------------------------
    Habe das Problem gefunden es war die .htaccess datei mit dem Inhalt
    RewriteEngine On
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-l
    
    RewriteRule ^(.*)$ index.php/?id=$1 [QSA,L]


    Kann ich diesen Fehler dennoch beheben,
    weil ich gern statt /?id=name in der Adresszeile /Name stehen haben möchte.

    Einer eine Idee?

    Beitrag zuletzt geändert: 14.4.2014 19:29:35 von michaelkoepke
  7. lucas9991 schrieb:
    [...]
    Gegenmaßnahmen: Schreibschutz auf die Datei bzw. einfach nur ein fopen Handle mit Schreib- und Leserechten anfordern, dadurch sollte sie automatisch gesperrt werden.
    [...]
    Soviel ich weiß, wird die Datei deshalb nicht automatisch gesperrt. Wenn man sie aber mit flock() sperren möchte, darf man sie zum Lesen und Schreiben nur einmal öffnen - also mit Schreib- und Leserechten. Aber die Sperre muss man immernoch manuell setzen.

    michaelkoepke schrieb:
    [...]
    Kann ich diesen Fehler dennoch beheben,
    weil ich gern statt /?id=name in der Adresszeile /Name stehen haben möchte.
    [...]

    Die einfachste Möglichkeit ist, wie du schon geschrieben hast, eine Adresse wie:
    http://domain.de/datei.php?id=xyz
    (xyz steht für ein beliebiges Wort)

    Benennst du die datei.php um zu index.php, kannst du es auch so aufrufen:
    http://domain.de/?id=xyz

    Mit dem entsprechenden PHP-Programm funktioniert auch so eine Adresse:
    http://domain.de/?xyz
    Beispiel: http://www.fuerderer.12hp.de/public/key.php?beliebigeswort
    Hier noch das Programm dazu:
    <?php
      echo "Das Stichwort ist ".key($_GET)."<br>";
      echo 'Inhalt der Variable $_GET:<br>';
      var_dump($_GET);
    ?>
    Es steht jedoch immernoch das Fragezeichen drin.

    Mit etwas mehr Aufwand funktioniert aber auch sowas:
    http://domain.de/xyz
    Dazu fallen mir gerade zwei Möglichkeiten ein:
    A: Du erstellst für jeden Begriff einen eigenen Ordner (geht auch dynamisch, aber du musst vorher wissen, welche Ordner du brauchst)
    B: Beim Aufruf sucht der Webserver den Ordner aber findet ihn nicht. Daraufhin wird ein 404-Error ausgelöst und mit der .htaccess gesteuert ein Error-Dokument aufgerufen. Dieses liest die Adresszeile aus und macht die Auswertung.
  8. Autor dieses Themas

    michaelkoepke

    michaelkoepke hat kostenlosen Webspace.

    Hey,

    Problem gefunden! Es haben ein Paar /-Zeichen gefehlt. :thumb:

    RewriteEngine On
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-l
    
    RewriteRule ^(.*)$ index.php/?id=$1 [QSA,L]

    RewriteRule ^/(.*)$ /index.php/?id=$1 [QSA,L]

    MFG Micha

    Beitrag zuletzt geändert: 17.4.2014 19:55:12 von michaelkoepke
  9. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!