2012-10-16 10 views
9

Meine PHP-Form, die die Ausgabe in einer Textdatei Leime speichert das Ergebnis eine Zeichenfolge wie:Neue Zeile in PHP Ausgabe in einer Textdatei

Name1Email1The Message1Name2Email2The Message2Name3Email3The Message3Name4Email4The Message4

Aber ich brauche Leerzeichen und/oder Zeilenumbrüche. Ich benutze normalerweise PHP nicht, also verstehe ich es nicht. Ich habe keine Antwort im Internet gefunden, habe hier auch ein paar Fragen gelesen, aber das hat mir nicht geholfen.

Die Form:

<form action="mailer.php?savedata=1" method="post"> 
Your Name: <input type="text" name="name"><br> 
Your Email: <input type="text" name="email"><br> 
Your Message:<br> <textarea name="message" rows="5" cols="30"></textarea><br> 
<input type="submit" name="submit" value="Submit"> 
</form> 

Die PHP

<?php 
$savedata = $_REQUEST['savedata']; 
if ($savedata == 1){ 
$data = $_POST['name']; 
$data .= $_POST['email']; 
$data .= $_POST['message']; 
$file = "YOURDATAFILE.txt"; 

$fp = fopen($file, "a") or die("Couldn't open $file for writing!"); 
fwrite($fp, $data) or die("Couldn't write values to file!"); 

fclose($fp); 
echo "Your Form has been Submitted!"; 

} 
?> 

Antwort

17

Wie andere Antworten Zustand, müssen Sie nach jedem Feld in einem Zeilenendezeichen hinzuzufügen.

Unterschiedliche Betriebssysteme verwenden jedoch unterschiedliche Zeilenenden, und so kann beispielsweise ein "\ n" unter Windows nicht als neue Zeile angezeigt werden. Wie Mahdi sagte, können Sie Zeilenenden im Windows-Stil "\ r \ n" verwenden, oder Sie können die Konstante PHP_EOL verwenden, so dass für den Server geeignete Zeilenenden ausgegeben werden. In diesem Fall würde Ihr Code wie folgt aussehen:

$data = $_POST['name'] . PHP_EOL; 
$data .= $_POST['email'] . PHP_EOL; 
$data .= $_POST['message'] . PHP_EOL; 
+0

Danke an alle! Ich wähle deine Antwort, um das unterschiedliche Betriebssystemargument zu verursachen. –

3

Sie können "\ n" verwenden, um eine neue Zeile zu schreiben.

$data = $_POST['name'] . "\n"; 
$data .= $_POST['email'] . "\n"; 
$data .= $_POST['message'] . "\n"; 

Nur als Nebenbemerkung, \ n muss in doppelte quotes sein. Wenn es von einfachen Anführungszeichen umgeben ist, funktioniert es nicht.

0

Sie sind $data Variable muss bereits die \n neue Zeile Zeichen enthalten.

2

kombiniere ich in der Regel New Line mit Carriage Return:

$data = $_POST['name'] . "\r\n"; 
3

Wenn Sie Ihre Eingabewerte verketten, haben Sie keine Zeilenumbrüche; Sie können sie mit dem Literal "\n" oder "\r\n" hinzufügen. Bespannen sie alle zusammen können Sie den Verkettungsoperator verwenden oder sprintf() verwenden wie unten:

$data = sprintf("%s\n%s\n%s\n", $_POST['name'], $_POST['email'], $_POST['messge']); 
$file = "YOURDATAFILE.txt"; 
file_put_contents($file, $data, FILE_APPEND); 

auch ich file_put_contents() mit der Flagge FILE_APPEND verwenden, um Daten in eine Datei anhängen und ein paar Zeilen Code speichern.

-1

Wenn wir versuchen, über ein Web-Formular online übermittelte Daten zu extrahieren und in eine Textdatei zu schreiben, die auf dem Webserver abgelegt ist - ohne die bereits in der genannten Textdatei enthaltenen Informationen zu überschreiben, dann werden wir verwenden Sie den folgenden Code innerhalb der Tags:

<html> 
<body> 
<form action="" method=""> 
<input value="submit"> 
<div>Name: <input value=""></div> 
<div>email: <input value=""></div> 
...   ...   ... 
<div><button>Submit</button></div> 
</form> 
</body> 
</html> 

die obige HTML-Code mit dem folgenden PHP-Code verbunden ist:

<?php 
$fileName = 'fdata.txt'; 
$fp = fopen('fdata.txt', 'a'); 
$savestring = $_POST['name'] . ',' . $_POST['email'] ; 
fwrite($fp, $savestring);    
fclose($fp); 
?> 

Aber die beiden oben genannten Codes zusammen zu Daten führen, die angehängt wird und bespannt zusammen in die Textdatei - das heißt , jeder neue Datensatz (Datensatz), der aus nachfolgenden Web-Formularen extrahiert wird, beginnt nicht bei einer neuen Zeile (es gibt keinen Zeilenumbruch oder Wagenrücklauf).

Ich suchte im Internet nach einer Lösung für das oben genannte Problem - wie im Internet vorgeschlagen, fügte ich "\ r \ n" (in Anführungszeichen) und auch "PHP_EOL" (ohne Anführungszeichen) wie unter:

$fp = fopen('fdata.txt', 'a', "\r\n"); 
$savestring = “\r\n” . PHP_EOL . ' ' . $_POST['name'] . ',' . $_POST['email'] . 
PHP_EOL; 

Dennoch gab es überhaupt keinen Zeilenumbruch (mein Webserver und mein Desktop benutzen Windows). Es bedeutet, dass es im Wissen eines der Millionen von Benutzern von Net in der Welt keine praktikable Lösung gab. Es scheint, dass der Parameter "a" überschreibt "\ r \ n", "PHP_EOL" usw.