13

出力をテキスト ファイルに保存する私の php フォームは、結果を次のような 1 つの文字列に貼り付けます。

名前1メール1メッセージ1名前2メール2メッセージ2名前3メール3メッセージ3名前4メール4メッセージ4

しかし、スペースや改行が必要です。私は通常PHPを使用しないので、わかりません。私はウェブ上で答えを見つけられませんでした.ここでいくつかのQ / Aも読んでいますが、これは役に立ちませんでした.

フォーム:

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

}
?>
4

8 に答える 8

20

他の回答が述べているように、各フィールドの後に行末文字を追加する必要があります。

ただし、OS が異なれば行末も異なるため、たとえば Windows では「\n」が改行として表示されない場合があります。Mahdi が言ったように、Windows スタイルの "\r\n" 行末を使用するか、サーバーに適した行末が出力されるようにPHP_EOL定数を使用できます。この場合、コードは次のようになります。

$data = $_POST['name'] . PHP_EOL;
$data .= $_POST['email'] . PHP_EOL;
$data .= $_POST['message'] . PHP_EOL;
于 2012-10-16T06:14:06.597 に答える
6

「\n」を使用して改行できます。

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

補足として、\n は二重引用符で囲む必要があります。一重引用符で囲むと機能しません。

于 2012-10-16T05:54:01.640 に答える
4

そのように入力値を連結すると、改行がなくなります。"\n"リテラルまたはを使用して追加できます"\r\n"。それらをすべてつなぎ合わせるには、連結演算子を使用するかsprintf()、以下のように使用できます。

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

またfile_put_contents()、フラグを使用してFILE_APPENDデータをファイルに追加し、さらに数行のコードを保存します。

于 2012-10-16T06:14:15.663 に答える
2

New Line私は通常、次のものと組み合わせCarriage Returnます。

$data = $_POST['name'] . "\r\n";
于 2012-10-16T06:09:31.717 に答える
0

変数には、改行文字が$data既に含まれている必要があります。\n

于 2012-10-16T05:54:38.467 に答える
0

これは私のために働く:

echo "$data"."\r\n"; 
于 2018-04-06T06:33:23.543 に答える
-1

Webフォームを介してオンラインで送信されたデータを抽出し、Webサーバーに配置されたテキストファイルに同じデータを書き込もうとすると、テキストファイルに既に含まれている情報を上書きすることなく、次のコードを使用しますタグ内:

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

上記の HTML コードは、次の PHP コードと結合されています。

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

しかし、上記の 2 つのコードを組み合わせると、テキスト ファイルに追加され、一緒に文字列化されるデータが生成されます。つまり、後続の Web フォームから抽出されたすべての新しいレコード (データのセット) は新しい行で始まりません (改行やキャリッジ リターンはありません)。

上記の問題の解決策をネットで検索しました。ネットで提案されているように、「\r\n」(二重引用符で囲み) を追加し、「PHP_EOL」(引用符なし) を以下のように使用しました。

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

それでも、改行はまったくありませんでした (私の Web サーバーとデスクトップは Windows を使用しています)。これは、世界中の何百万人ものネット ユーザーの知識の範囲内で実行可能な解決策がなかったことを意味します。パラメータ「a」は「\r\n」、「PHP_EOL」などをオーバーライドしているようです。

于 2013-05-18T13:18:53.370 に答える