Ergebnis 1 bis 4 von 4

Thema: Fortlaufende Nummer/ID per Inserttag

  1. #1
    Contao-Nutzer
    Registriert seit
    28.08.2009.
    Beiträge
    189

    Standard Fortlaufende Nummer/ID per Inserttag

    Hallo zusammen,

    ich greife aus aktuellem Anlass nochmal diesen Thread auf.

    Bei jeder Anmeldung soll eine fortlaufende, eindeutige und verständliche Zahl vergeben werden, ähnlich einem Besucherzähler.
    Dazu habe ich die Dateien counter.txt und counter.php im \templates-Verzeichnis.
    Das Anmeldeformular enthält ein verstecktes Feld, mit dem per Inserttag {{file::counter.php}} die Datei counter.php aufgerufen wird/werden soll

    counter.txt
    Code:
    3

    counter.php

    PHP-Code:
    <?php
    $file 
    "templates/counter.txt";
    $op fopen($file,"r");
    $counter fread($op4);
    fclose($op);

    $counter++;

    $op fopen($file"w");
      
    fwrite($op$counter);
      
    fclose($op);
      echo 
    $counter;
    ?>
    Die Datei counter.txt wird offensichtlich ausgelesen, die Zahl wird allerdings nicht erhöht und bleibt bei "3" .
    Sorry, meine PHP-Kenntnisse sind wirklich minimal. Hat jemand einen Hinweis auf den Fehler oder eine andere Lösung ?

    Danke
    Roland

  2. #2
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Du kannst das auch einfacher haben:
    PHP-Code:
    <?php

    $file 
    'templates/counter.txt';

    $counter file_get_contents($file);

    var_dump($counter);

    $counter++;

    file_put_contents($file$counter);

    echo 
    $counter;

    ?>
    Ich habe dir einen var_dump() eingefügt, damit du prüfen kannst, ob der gelesene Inhalt auch ein Integer ist. Wenn nicht, dann mach einen Integer daraus.

    Das Ganze wird aber am Ende sowieso nicht funktionieren, weil du schlecht prüfen kannst, wie oft dieses Script von wem aufgerufen wird.

    Besser wäre vielleicht, wenn du bei einer Anmeldung nach den tatsächlichen Anmeldungen in der DB-table nachsiehst und dort in ein Feld in Übereinstimmung mit dem Anmeldezeitpunkt eine fortlaufende Nummer vergibst.
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

  3. #3
    Contao-Nutzer
    Registriert seit
    28.08.2009.
    Beiträge
    189

    Standard

    Vielen Dank für die Antwort.

    Ich habe dein var_dump($counter); durch $counter = (int)$counter; ersetzt und damit funktioniert der "Zähler". Eigentlich ist es egal, wenn die Zahlenreihe lückenhaft ist, solange keine doppelt vorkommt. Und das ist wohl ausgeschlossen.

    Ich hatte es auch schon einfacher - doch leider fehlerhaft. Vielleicht erkennt jemand den Fehler:
    PHP-Code:
     <?php
    $counterFilePath 
    'templates/counter.txt';

    $counter file_exists($counterFilePath) ? file_get_contents($counterFilePath) : 0) + 1;
    file_put_contents($counterFilePath$counter);

    echo 
    $counter;

    ?>
    An eine Lösung mit der DB habe ich auch gedacht, aber leider nirgends die Einträge von efg gefunden, um die dort automatisch vergebene ID auszulesen. Das wäre das Einfachste !

    Roland

  4. #4
    Contao-Urgestein Avatar von Andreas
    Registriert seit
    19.06.2009.
    Ort
    Mönchengladbach
    Beiträge
    7.703
    User beschenken
    Wunschliste
    Contao-Projekt unterstützen

    Support Contao

    Standard

    PHP-Code:
    $file 'templates/counter.txt';

    $counter = @file_get_contents($file);

    $counter $counter $counter 1;

    file_put_contents($file$counter);

    echo 
    $counter
    file_get_contents() erzeugt eine E_WARNING, wenn die Datei nicht gefunden wird. Das passiert nur beim ersten Mal, weil file_put_contents() die Datei erzeugt, falls sie nicht existiert. Mit dem "@" kannst du diese erste Fehlermeldung unterdrücken.

    Das (int) brauchst du nicht, wenn du "+ 1" anstelle von "++" verwendest - Type Juggling http://php.net/manual/de/language.ty...e-juggling.php

    edit: In deiner langen Zeile ist ein Fehler mit dem Komma, ich finde mein Code ist auch einfacher zu lesen.
    Geändert von Andreas (13.04.2016 um 22:21 Uhr)
    Bitte!
    Vor Anfragen im Forum HTML validieren.
    Codesnippets hier im Froum sauber einrücken. Nur Tabs o. nur Leerzeichen verwenden.

    Vielen Dank an alle Wunschlistenerfüller
    Andreas Burg, Web Solutions

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •