У меня есть форма обратной связи, которая сохраняет в текстовый файл, он отлично сохраняет, но он сохраняет в одну строку. Таким образом, несколько комментариев будут сохранены в одной строке, что позволит сохранить только одну строку в блокноте, а не разделять разные комментарии на разные строки.
Вот мой HTML
<form action="feedback.php" method="post">
<table>
<tr>
<td>Email Address:</td>
<td>
<input type="text" name="email_address" value="" maxlength="100" />
</td>
</tr>
<tr>
<td>
Comments:
</td>
<td>
<textarea rows="10" cols="50" name="comments">
</textarea>
</td>
</tr>
<tr>
<td> </td>
<td>
<input type="submit" value="Submit" />
</td>
</tr>
</table>
</form>
Вот мой php:
<?php
$email_address = $_POST['email_address'];
$comments = $_POST['comments'];
$myfile = fopen("feedback.txt", "a") or die("Unable to open file!");
$txt = 'Email: '.$email.'\nComments: '.$comments.'\n\n';
fwrite($myfile, $txt);
fclose($myfile);
?>
Поэтому мне нужны разные комментарии для сохранения в другую строку, а не в одну.
Ваш \n
(новая строка) не работает, потому что вы используете апостроф '
вместо двойных кавычек "
,
например, у вас есть:
$txt='Email: '.$email.'\nComments: '.$comments.'\n\n';
И вам нужно:
$txt="Email: ".$email."\nComments: ".$comments."\n\n";
Ваш адрес электронной почты не записывается, так как вы меняете имя используемой переменной.
например У вас есть этот код:
$email_address=$_POST['email_address'];
$txt='Email: '.$email.'\nComments: '.$comments.'\n\n';
Ваш $txt
переменная использует $email
Однако вы устанавливаете $_POST
данные в переменную $email_address
,
Попробуйте этот полный код:
$email_address = $_POST['email_address'];
$comments = $_POST['comments'];
$myfile = fopen("feedback.txt", "a") or die("Unable to open file!");
$txt="Email: ".$email_address."\nComments: ".$comments."\n\n";
fwrite($myfile, $txt);
fclose($myfile);
Это простая ошибка, но вы должны попытаться привыкнуть копировать и вставлять имена переменных, а не вводить их заново. Это (помогает) избежать опечаток и т. Д., Которые в больших блоках кода & несколько файлов, становится еще большей проблемой.
И используйте свои журналы ошибок — они неоценимы при кодировании!
В этом случае PHP (таким образом, журналы) стонал бы об этом $email
переменная не определена, что, в свою очередь, привело бы вас к проверке переменной, и вы, вероятно, сработали бы.
Я хотел бы использовать PHP_EOL
так как он кросс-платформенный! Это означает, что он решает проблемы Unix / DOS / Mac!
(Также я думаю, что вы хотите изменить $email
переменная)
Так что заявите о своей линии:
$txt='Email: '.$email.'\nComments: '.$comments.'\n\n';
Использование:
$txt = "Email: ". $email_address . PHP_EOL . "Comments: " . $comments . PHP_EOL . PHP_EOL;
$txt='Email: '.$email.'\nComments: '.$comments.'\n\n';
Используйте \ r \ n, чтобы создать текстовый файл новой строки, например:
$ txt = ‘Email:’. $ email. ‘\ r \ n Комментарии:’. $ comments. ‘\ r \ n’;
На самом деле вы можете использовать одинарные кавычки и объединять символ новой строки, но вам нужно написать такой код:
<?php
echo 'This is a test of using a newline char.' . chr(10) .
'Did it work? It should have.';
?>
Чтобы уменьшить вероятность того, что что-то пойдет не так, нужно сделать определенные проверки. Пользователь действительно отправил форму? Кроме того, мы не должны предполагать, что все данные из $ _POST безопасны, и поэтому я использую htmlentities () для адреса электронной почты и комментариев, на случай, если злонамеренный пользователь попытается вставить что-то, что он не должен.
Другое дело, что некоторые люди думают, что переменная интерполяция медленная, но ирония в том, что чем больше переменная интерполяция, тем эффективнее становится обработка интерполяции. Кстати, я изменил некоторые новые строки, добавив некоторые и удалив другие, чтобы окончательный результат был отформатирован таким образом, чтобы его было легче читать.
<?php
if (isset($_POST) && $_POST != NULL) {
$email_address = htmlentities($_POST['email_address']);
$comments = htmlentities($_POST['comments']);
$myfile = fopen("feedback.txt", "a") or exit("Unable to open file!");
$txt="Email: $email_address\nComments:\n\n$comments\n\n";
fwrite($myfile, $txt);
fclose($myfile);
}
?>
Я заменил morbid die () на exit (), так как они оба являются эквивалентными языковыми конструкциями; они оба генерируют один и тот же код операции EXIT.