Wieso geht der PHP-Code nicht?

5 Antworten

Vom Fragesteller als hilfreich ausgezeichnet
Er soll eine Eingabe aus einem input-Feld in eine Textdatei schreiben

Mit fopen() öffnetst du eine Datei. Zum Schreiben in diese Datei musst du noch fwrite() verwenden. Das von Dir Gewünschte realisierst Du am besten so:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="UTF-8">
 <meta http-equiv="X-UA-Compatible" content="IE=edge">
 <meta name="viewport" content="width=device-width, initial-scale=1.0">
 <title>Formular</title>
</head>
<body>
<form>
 <input name="test" type="text">
 <button name="submit" type="submit">
</form>
<?php
 if(isset($_GET['submit']))
 {
   $input = htmlspecialchars($_GET['test']);
   echo $input;
   file_put_contents("test.txt",$input);
 }
?> 
</body>
</html>

Alex

1) Schließe deine noch offenen Tags (button, form). Dem Button zudem noch einen Titel zu geben, wäre wohl vorteilhaft.

    <!-- ... -->
    <button type="submit">Click me</button>
  </form>
  <?php
    /* your php code ... */
  ?>
</body>

2) Ich würde den PHP-Code nur ausführen, wenn der URL auch ein Querystring-Parameter test mit nicht leerem Wert angehängt wurde.

<?php
  if (!empty($_GET['test'])) {
    // print and write file ...
  }
?>

Wenn du aber auch bei einer leeren Zeichenketten in deine Datei schreiben möchtest (immerhin wird in dem Zuge die Datei ja auch erstellt, falls sie noch nicht existiert), sollte der if-Kopf so aussehen:

if (isset($_GET['test'])) {

3) Aktuell öffnest du die test.txt-Datei nur (oder erzeugst sie, wenn sie noch nicht existiert). Ein einfaches Beispiel, bei dem auch Daten in die Datei wandern, könnte so aussehen:

$handle = fopen('test.txt', 'w');
fwrite($handle, $input);
fclose($handle);

Wenn mehrere Prozesse zur gleichen Zeit in die Datei schreiben wollen, würden die sich allerdings behindern. Daher wäre ein erweiterter Schritt das Einsetzen einer temporären Sperre, so lange die Datei von einem Prozess beschrieben wird.

$handle = fopen('test.txt', 'w');

if (flock($handle, LOCK_EX)) {
  fwrite($handle, $input);
  fflush($handle);
  flock($handle, LOCK_UN);
}

fclose($handle);

Lies Weiteres dazu hier.

.. hast du die Datei einmal mit Pfad aufgerufen?

fopen ("/home/writeable/test.txt" ,"w" );
  1. Validiere dein HTML. Bei FORM fehlt zum Beispiel Protokoll und Ziel.
  2. Dein PHP-Code ist unvollständig. Du öffnest die Datei aber schreibst ja nichts rein. Was erwartest du da für ein Ergebnis?
Woher ich das weiß:Beruf – Entwickle seit > 20 Jahren Anwendungen mit PHP.

Das Formular bedarf keiner expliziten Angabe von Versandmethode oder Ziel. Die Standardmethode ist stets GET, das Standardziel ist stets die aktuelle URL. Somit sind die einzigen Markupfehler die fehlenden schließenden Tags für form- und button-Tag.

1

In der Form vielleicht mal angeben, ob es POST oder GET sein soll!? o_O

Woher ich das weiß:Hobby – Programmierer, EDV, ... seit den 80er :)

Der Standard ist GET. Der braucht nicht explizit angegeben werden.

1

Was möchtest Du wissen?