Sichern von txt-Dateien mit PHP fwrite
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.
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.
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>