web-dev-qa-db-fra.com

Nouvelle ligne dans PHP sortie dans un fichier texte

Mon formulaire php qui enregistre la sortie dans un fichier texte colle le résultat à une chaîne comme celle-ci:

Nom1Email1Le Message1Name2Email2Le Message2Name3Email3Le Message3Name4Email4Le Message4

Mais j'ai besoin d'espaces et/ou de nouvelles lignes. Normalement, je n'utilise pas PHP, donc je ne l'obtiens pas. Je n'ai pas trouvé de réponse sur le Web, j'ai également lu des questions/réponses ici, mais cela ne m'a pas aidé.

La forme:

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

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

}
?>
9
Darth Severus

Comme d'autres réponses l'indiquent, vous devez ajouter un caractère de fin de ligne après chaque champ. 

Cependant, différents systèmes d’exploitation utilisent des terminaisons de ligne différentes. Ainsi, un "\ n" peut ne pas s’afficher en tant que nouvelle ligne sous Windows, par exemple. Comme Mahdi l’a dit, vous pouvez utiliser les fins de ligne de style Windows "\ r\n", ou le caractère PHP_EOL afin que les fins de ligne appropriées au serveur soient affichées, auquel cas votre code ressemblerait à 

$data = $_POST['name'] . PHP_EOL;
$data .= $_POST['email'] . PHP_EOL;
$data .= $_POST['message'] . PHP_EOL;
17
Dallin

Lorsque vous concaténez vos valeurs d'entrée de cette manière, vous n'aurez aucune nouvelle ligne; vous pouvez les ajouter en utilisant le littéral "\n" ou "\r\n". Pour les chaîner tous ensemble, vous pouvez utiliser l'opérateur de concaténation ou utiliser sprintf() comme ci-dessous:

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

J'utilise également file_put_contents() avec l'indicateur FILE_APPEND pour ajouter des données à un fichier et enregistrer quelques lignes de code supplémentaires.

3
Ja͢ck

Vous pouvez utiliser "\ n" pour écrire une nouvelle ligne.

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

Juste comme un sidenote,\n doit être entre guillemets. Entouré de guillemets simples, cela ne fonctionnera pas.

3
Louis Huppenbauer

Je combine habituellement New Line avec Carriage Return:

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

votre variable $data doit déjà contenir les caractères \n nouvelle ligne.

0

cela fonctionne pour moi:

echo "$data"."\r\n"; 
0
May Noppadol