Warum lässt sich eine Datei nur bei bestimmten Umständen speichern?

Hallo,

ich versuche PHP zu lernen und bin gerade beim Schreiben von Dateien mit PHP.

Dabei ist folgendes aufgetreten:
Ich möchte die Informationen, die über die Formularfunktion eingegeben wurden, in einer Textdatei speichern. Zum Beispiel den Vornamen, damit ich von anderen Seiten darauf zugreifen kann. Dies funktioniert aber nur, wenn ich im Tag „form“ bei dem Attribut ‚‚action‘‘ die gleiche Seite aufrufe. Dann wird eine evtl. nicht vorhandene Textdatei erstellt und die Eingabe darin gespeichert.

Das hier funktioniert. Die Seite ruft sich selber auf.

<body>
    <form method="post" action="index.php">
        <input  type="text" name="vorname"/><br />
        <input  type="submit"/>
    </form>

    <?php
        $vorname = filter_input(INPUT_POST, 'vorname', FILTER_SANITIZE_STRING);
        
        file_put_contents('vorname.txt', $vorname);

     ?>

</body>

Wenn ich bei ‚‚action‘‘ als Ziel aber eine andere Seite eingebe, wird keine Textdatei erstellt. Sofern eine Textdatei schon besteht, wird darin nichts gespeichert.

Das hier funktioniert nicht. Bei „action“ wird eine andere Seite als Ziel eingegeben.

<body>
    <form method="post" action="neu.php">
        <input  type="text" name="vorname"/><br />
        <input  type="submit"/>
    </form>

    <?php
        $vorname = filter_input(INPUT_POST, 'vorname', FILTER_SANITIZE_STRING);
        
        file_put_contents('vorname.txt', $vorname);

     ?>

</body> 

Es wäre ganz interessant zu erfahren, warum die 2. Methode nicht klappt.

Danke für’s Lesen

Hallo,

im ersten Beispiel wird der PHP-Code immer ausgeführt, egal ob die Seite zum ersten Mal via GET geladen wird oder das Formular per POST abgeschickt wird.

Bei dem Aufruf via GET ist Vorname natürlich leer und damit deine Datei auch.

Gruß,
Steve

@steve_m

Hallo und danke für deine Antwort.
Das ist mir jetzt nicht so ganz klar. Ich habe immer nur „post“ benutzt.

Nur wenn ich über „action“ eine neue Seite lade, dann funktioniert es nicht. Lade ich aber die gleiche Seite nochmal, dann werden die Informationen gespeichert.

Was steht denn in neu.php, an die du POSTest?

Gruß,
Steve

Hi!

@steve_m hat die Antwort schon gegeben, hier eine genauere Erläuterung:

Der PHP-Code wird nicht mit dem Submit ausgeführt (mit dem Submit wird nur die Action ausgeführt), sondern bereits beim Laden der Seite, somit wird die Datei beim ersten Beispiel erst beim 2. Aufruf geschrieben und dieser „fehlt“ beim zweiten Beispielt. Hier müsste das Schreiben der Datei dann im aufgerufenen PHP-Programm stehen, wo du den vorname mit $_POST[‚vorname‘] dann ansprichst und damit weiterarbeitest.

Ich sage es nur ungern, aber hier fehlen noch die Grundkenntnisse der (PHP-)Programmierung.

Grüße,
Tomh

2 Like

@Tomh

Hallo und danke für die Antwort.

Wenn mir die Funktion erklärt wird verstehe ich das auch.
In diesem Fall müsste ich also die Seite mit dem Formular über den Sendebutton laden. Mit einer if-Abfrage könnte dann ein Link angezeigt werden, der auf die nächste Seite verweist.

Da gebe ich dir vollkommen recht. Aber ich mache das ja auch nicht beruflich, sondern in meiner Freizeit neben meinem Beruf. Aus diesem Grund lerne ich auch nur aus mehr oder eher weniger guten Büchern.

Ach ja, richtig schlechte Bücher über das Thema gibt es auch :face_vomiting: :grinning: