Sichern von txt-Dateien mit PHP fwrite

3. 5. 2022  — 
 html-php-javascript

PHP ist die treibende Kraft für die meisten Websites und diesen Blog. In diesem Beispiel werden mittels PHP (fwrite) die eingegebenen Werte in eine Textdatei (.txt) gesichert. Textdateien sind umformatierte Textinhalte, bei denen es in Zusammenhang mit fwrite schwierig ist, diese in eine lesbare Form zu bekommen. Der Zeilenwechsel zwischen den Eingaben und der Abstand zum nächsten Eintrag wird im Vergleich zur Ausgabe in html zu einer echten Herausforderung. So funktionierts.

Unten im Bild: Die zellenweise Ausgabe mit kryptischem Trennzeichen

Es gibt genügend gute Apps um Kontaktadressen zu verwalten. Dieses "txt mit PHP fwrite" ist nur ein Beispiel, wie die zeilenweise Ausgabe mit Abstand zwischen den Einträgen funktioniert.

Der Code zum sichern in eine .txt-Datei

Die Anleitung zur Erstellung des php-Scripts hab ich von https://www.blogdesire.com, unten die Kontrolle der Einträge, die zeilenweise Ausgabe und den kryptischen Trenner hab ich selbst hinbekommen. Bei fwrite-Scripts gibt es das Problem, dass das neu laden einer Seite den letzten Eintrag nochmal speichern würde. Ein Warnhinweis bietet zumindest die Möglichkeit um abzubrechen.

MAMP - das Serverprogramm für Mac und PC

Alle die MAMP kennen, können diesen Absatz überspringen. Um am Mac oder PC mit php arbeiten und im Browser öffnen zu können, braucht es eine lokale Serverumgebung, dazu laden wir das Programm MAMP herunter. Nach der Installation öffnen wir unter Programme > MAMP > das Verzeichnis htdocs. In htdocs legen wir einen neuen Ordner und benennen ihn zB "myform-php-to-txt". Da kommt dann die index.php rein. Dazu gleich mehr.

MAMP Programm

index.php

Die Datei sieht aus wie html, ist es auch. Trotzdem speichern wir sie als index.php in das eben angelegte Verzeichnis "myform-php-to-txt".

<!DOCTYPE html>
<html lang="de">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Kontaktdaten mit php in .txt sichern</title>
</head>
<body class="body">
  <div class="wrapper">
    <div class="heading">
      Beispiel: Kontakt-Daten sichern
    </div>
    <form class="form" method="post">
      <input type="Firma" name="firma" placeholder="Firma" required autocomplete="off"> <br>
      <input type="Name" name="name" placeholder="Ansprechpartner" required autocomplete="off"> <br>
      <input type="Email" name="email" placeholder="E-Mail" required autocomplete="off"> <br>
      <input class="trennung" type="Trenn" name="-" placeholder="Leer lassen, ist Trennstrich" autocomplete="off"> <br>
      <input type="submit" name="submit" value="SICHERN" class="submit">
    </form>
  </div>
</body>
</html>

Der php-Code

Als nächstes kommt der php-Code in die index.php, vor der ersten Zeile. Mit $Trenn kommt der Abstand zwischen die Einträge. Diese Zeile im Eingabeformular wird später durch CSS ausgeblendet, da der php-Code ausreicht und keine manuellen Trennstriche eingegeben werden müssen.  

<?php
if(isset($_POST['submit'])){
$Firma = "Firma: ".$_POST['firma']."
";
$Name = "Name: ".$_POST['name']."
";
$Email = "Email: ".$_POST['email']."
";
$Trenn = "-:-".$_POST['---']."
";

$file=fopen("kontakt.txt", "a");
fwrite($file, $Firma);
fwrite($file, $Name);
fwrite($file, $Email);
fwrite($file, $Trenn);
fclose($file);
}
?>

Wie laden wir die gespeicherten Einträge in die Seite?

Ganz am Ende vor dem abschließenden body-Tag kommt der PHP-Code zum einlesen der Einträge. Die werden zwar in "kontakt.txt" gesichert, aber wir wollen ja sehen, wie das ausschaut. Speziell der Bereich "echo ..." ist für die zeilenweise Ausgabe verantwortlich. 

<div class="wrapper">
    <div class="heading">
      Zur Kontrolle der Eingabe
    </div>
     <p style="text-align:center">Alle Einträge findest du in der "kontakt.txt".</p>
    <br>
    <?php
		$file = fopen("kontakt.txt", "r") or die("Noch kein Eintrag vorhanden!");
		while(!feof($file)) {
  			echo fgets($file) . "<br>";
		}		
		fclose($file);
		?>
	</div>

Jetzt noch etwas CSS

Die kommen direkt in den Headbereich der Seite oder werden extern verlinkt. Der Einfachkeit halber, hab ich die CSS direkt in die Seite integriert.

<style>
@import url('https://fonts.googleapis.com/css2?family=Merriweather+Sans:wght@400;800&display=swap');
.body{
  padding-top:50px;
  min-height:99vh;
  background:#6acafa;
  font-family: 'Merriweather Sans', sans-serif;
}
.wrapper{
   padding: 20px;
   width: 90%;
   margin: auto;
   margin-bottom:50px;
   box-shadow: 0px 8px 60px -10px rgba(13, 28, 39, 0.6);
   background: #fff;
   border-radius: 12px;
   max-width: 700px;
   position: relative;
}
.heading{
  display: block;
  text-align: center;
  font-size: 30px;
  color: #333;
  font-weight:800;
  padding-bottom:20px;
}
.form{
  width:auto;
  color:#888;
}
.form input{
  width: 96%;
  outline:none;
  border: 2px solid #333;
  color: #333;
  padding: 2%;
  tab-size:70;
  white-space:pre;
  border-radius: 10px;
  margin-top: 18px;
  font-family: 'Merriweather Sans', sans-serif;
  font-size:17px;
}
input.trennung{
  display:none;
  border: 2px solid #ccc;
  pointer-events: none;
}
  input:last-child{
  background: #333;
  outline:none;
  color: #fff;
  width: 25%;
}
</style>

Der gesamte php-Code inkl. CSS

<?php
if(isset($_POST['submit'])){
$Firma = "Firma: ".$_POST['firma']."
";
$Name = "Name: ".$_POST['name']."
";
$Email = "Email: ".$_POST['email']."
";
$Trenn = "-:-".$_POST['---']."
";

$file=fopen("kontakt.txt", "a");
fwrite($file, $Firma);
fwrite($file, $Name);
fwrite($file, $Email);
fwrite($file, $Trenn);
fclose($file);
}
?>
<!DOCTYPE html>
<html lang="de">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Kontaktdaten mit php in .txt sichern</title>
  <style>
	@import url('https://fonts.googleapis.com/css2?family=Merriweather+Sans:wght@400;800&display=swap');
.body{
  padding-top:50px;
  min-height:99vh;
  background:#6acafa;
  font-family: 'Merriweather Sans', sans-serif;
}
.wrapper{
   padding: 20px;
   width: 90%;
   margin: auto;
   margin-bottom:50px;
   box-shadow: 0px 8px 60px -10px rgba(13, 28, 39, 0.6);
   background: #fff;
   border-radius: 12px;
   max-width: 700px;
   position: relative;
}
.heading{
  display: block;
  text-align: center;
  font-size: 30px;
  color: #333;
  font-weight:800;
  padding-bottom:20px;
}
.form{
  width:auto;
  color:#888;
}
.form input{
  width: 96%;
  outline:none;
  border: 2px solid #333;
  color: #333;
  padding: 2%;
  tab-size:70;
  white-space:pre;
  border-radius: 10px;
  margin-top: 18px;
  font-family: 'Merriweather Sans', sans-serif;
  font-size:17px;
}
input.trennung{
  display:none;
  border: 2px solid #ccc;
  pointer-events: none;
}
  input:last-child{
  background: #333;
  outline:none;
  color: #fff;
  width: 25%;
}
</style>
</head>
<body class="body">
  <div class="wrapper">
    <div class="heading">
      Beispiel: Kontakt-Daten sichern
    </div>
    <form class="form" method="post">
      <input type="Firma" name="firma" placeholder="Firma" required autocomplete="off"> <br>
      <input type="Name" name="name" placeholder="Ansprechpartner" required autocomplete="off"> <br>
      <input type="Email" name="email" placeholder="E-Mail" required autocomplete="off"> <br>
      <input class="trennung" type="Trenn" name="-" placeholder="Leer lassen, ist Trennstrich" autocomplete="off"> <br>
      <input type="submit" name="submit" value="SICHERN" class="submit">
    </form>
  </div>
  <div class="wrapper">
    <div class="heading">
      Zur Kontrolle der Eingabe
    </div>
     <p style="text-align:center">Alle Einträge findest du in der "kontakt.txt".</p>
    <br>
    <?php
		$file = fopen("kontakt.txt", "r") or die("Noch kein Eintrag vorhanden!");
		while(!feof($file)) {
  			echo fgets($file) . "<br>";
		}		
		fclose($file);
		?>
	</div>
</body>
</html>

  Dazupassende Inhalte