У меня есть три значения поля формы HTML (имя, слова, почта), которые я пытаюсь объединить в php и записать в один файл txt на моем сервере:
Каждое значение должно быть на новой строке в поле txt, поэтому я добавил "\ n" в массив .... где моя ошибка?
Большое спасибо за любую помощь!
$name = $_POST['name'];
$saywords = $_POST['saywords'];
$mail = $_POST['mail'];
$data = array($name, . "\n" $mail, . "\n" $saywords);
file_put_contents("$t.$ip.txt",$data); // Will put the text to file
Зачем вы создаете массив? Вобще $data = $name . "\n" . $mail . "\n" . $saywords;
Идеально! Большое спасибо!! :)






я не вижу использования array, вы можете объединить их так же:
$data = $name . "\n" . $mail . "\n" . $saywords ;
Идеально! Большое спасибо!!
У вас две проблемы:
$data должен быть строкой, а не массивом. объединяет левую и правую части: "abc" . "def" становится "abcdef".
. "\n" или даже . "\n" $mail, не имеет смысла в PHP, поэтому вы получите ошибку синтаксического анализа.Замените линию $data = на $data = $name . "\n" . $mail . "\n" . $saywords;, и все будет в порядке.
Идеально! Большое спасибо!!
Используйте <br /> как HTML-код
OP сохраняет данные в текстовом файле, а не выводит их, поэтому \n верен (кстати, это не мой голос против).
Это зависит от операционной системы сервера.
Попробуйте "\r\n" вместо "\n"
Если вы посмотрите на код OP, есть несколько более серьезных проблем.
Хорошо, вот мой снимок.
/*first of all, you should always check if posted vars are actually set
and not empty. for that, you can use an universal function "empty", which
checks if the variable is set / not null / not an empty string / not 0.
In such way you will avoid PHP warnings, when some of these variables
will not be set*/
$name = !empty($_POST['name']) ? $_POST['name'] : '';
$saywords = !empty($_POST['saywords']) ? : $_POST['saywords'] : '';;
$mail = !empty($_POST['mail']) ? $_POST['mail'] : '';
/*Secondly, do not use \n, \r, \r\n, because these are platform specific.
Use PHP_EOL constant, it will do the job perfectly, by choosing
what type of line-break to use best.
As others mentioned - in your scenario, the string would be better solution.
Add everything into string, and then put its contents into file. Avoid using
double quotes, when you define PHP strings, and use single quotes instead - for
performance and cleaner code.
*/
$data = 'Name: '.$name.PHP_EOL.'E-Mail: '.$mail.PHP_EOL.'Message: '.$saywords.PHP_EOL.PHP_EOL;
file_put_contents($t.$ip.'.txt', $data); // Will put the text to file
Кстати, я настоятельно рекомендую также добавить дополнительную проверку перед сохранением данных в этот текстовый файл. С помощью этого кода кто-то может легко испортить содержимое вашего txt-файла, опубликовав огромные объемы данных без ограничений.
Советы:
1) Принимайте только имена с ограниченной длиной и символами (не разрешайте использовать специальные символы или разрывы строк - вы также можете отфильтровать их перед сохранением)
2) Подтвердите введенный адрес электронной почты - если он в правильном формате, существуют ли записи mx для домена адреса электронной почты и т. д.
3) Принимать «словечки» с ограниченной длиной, а при необходимости - запрещать или отфильтровывать специальные символы.
Поступая таким образом, вы получите гораздо более чистые материалы.
file_put_contents ($ file, implode (‘\ n’, $ data)) и удалить новые строки из массива