2012-10-16 35 views
9

mojego formularza php, który zapisuje dane wyjściowe w klejów plików tekstowych wynik do jednej strunie jak:Nowa linia produkcji PHP w pliku tekstowym

Name1Email1The Message1Name2Email2The Message2Name3Email3The Message3Name4Email4The wiadomość4

Ale muszę spacji i/lub nowe linie. Normalnie nie używam PHP, więc go nie rozumiem. Nie znalazłem odpowiedzi w Internecie, przeczytałem też niektóre pytania i odpowiedzi, ale to mi nie pomogło.

postać:

<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> 

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!"; 

} 
?> 

Odpowiedz

17

Jak stanu innych odpowiedzi, trzeba dodać w znaku końca wiersza po każdym polu.

Różne systemy operacyjne używają różnych zakończeń linii, więc "\ n" może nie wyświetlać się na przykład jako nowa linia w systemie Windows. Jak powiedział Mahdi, możesz użyć końcówek linii "\ r \ n" w stylu systemu Windows lub możesz użyć stałej PHP_EOL, aby wyprowadzić wiersze odpowiednie dla serwera, w takim przypadku Twój kod będzie wyglądał tak:

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

Dziękuję wszystkim! Wybieram twoją odpowiedź, ponieważ powoduje to inny argument systemu operacyjnego. –

3

Można użyć "\ n", aby napisać nową linię.

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

Tak jak sidenote, \ n musi być w podwójnej liczbie. W otoczeniu pojedynczych cudzysłowów nie będzie działać.

0

Ty musisz musisz mieć nowe znaki w tym wierszu.

2

zwykle łączą New Line z Carriage Return:

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

Po połączeniu wartości wejściowych w ten sposób nie będzie żadnych nowych linii; możesz je dodać za pomocą literału "\n" lub "\r\n". Ciąg je wszystkie razem można użyć operatora konkatenacji lub użyj sprintf() jak poniżej:

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

Używam również file_put_contents() z flagą FILE_APPEND dołączyć dane do pliku i zapisać jeszcze kilka linijek kodu.

-1

Kiedy próbujemy wyodrębnić dane przesłane przez Internet za pomocą formularza internetowego i zapisać je w pliku tekstowym, który jest umieszczony na serwerze WWW - bez nadpisywania informacji już zawartych w wymienionym pliku tekstowym, to użyć następującego kodu wewnątrz znaczników:

<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> 

powyższy kod HTML jest połączony z następującego kodu PHP

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

ale powyższe dwa kody razem prowadzą do danych, które są dołączone i strunowe razem plik tekstowy - to znaczy , każdy nowy rekord (zestaw danych) wyodrębniony z kolejnych formularzy internetowych nie rozpoczyna się od nowej linii (nie ma przerwy między wierszami ani powrotu karetki).

Przeszukałem Internet w poszukiwaniu rozwiązania powyższego problemu - zgodnie z sugestią w Internecie dodałem "\ r \ n" (w podwójnych cudzysłowach), a także użyłem "PHP_EOL" (bez cudzysłowu), jak pod:

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

W ogóle nie było przerwania linii (mój serwer sieciowy i mój pulpit korzysta z systemu Windows). Oznacza to, że nie było żadnego praktycznego rozwiązania w ramach wiedzy o którymkolwiek z milionów użytkowników sieci na świecie. Wygląda na to, że parametr "a" zastępuje "\ r \ n", "PHP_EOL" itd.