如何在PHP中添加换行符来将我的表单输出彼此分离



我对PHP完全陌生,随着高中学位的临近,我决定在年鉴中为我们的个人描述制作一个HTML表单。但是,由于我的PHP文件处理表单POST,我不知道如何分离不同的输入,它只是在一行中输出所有内容。我的PHP代码是这个

<?php
$filename = substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 6) . '.txt';
if ( !file_exists($filename) ) {
//File put contents stuff here
if(isset($_POST['fname']))
{
$data=$_POST['fname'];
$fp = fopen($filename, 'a');
fwrite($fp, $data);
}
if(isset($_POST['lname']))
{
$data=$_POST['lname'];
$fp = fopen($filename, 'a');
fwrite($fp, $data);
}
}

?>

我的HTML代码是:


<!DOCTYPE html>
<html lang="de-DE">
<head>
<title>Erstelle deinen Steckbrief</title>
<meta charset="UTF-8">
<meta name="viewport" content="size=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=7">
<link rel="stylesheet" href="style.css">
</head>
<body>
<div id="all">
<header>
<div id="ueberschrift">
<h1>Erstelle deinen Steckbrief für die Abizeitung</h1>
<p>Dies ist das Formular für das erstellen deiner Seite für die Abizeitung</p>
</div>
</header>
<div class="form">
<form name="" method="post" action="upload.php">
<label for="fname">Vorname:</label><br>
<input type="text" name="fname" id="fname"><br>
<br>
<label for="lname">Nachname:</label><br>
<input type="text" name="lname" id="lname"><br>
<br>
<label for="dateofbirth">Geburtsdatum:</label><br>
<input type="text" name="dateofbirth" id="dateofbirth"><br>
<br>
<label for="city">Wohnort:</label><br>
<input type="text" name="city" id="city" size="50"><br>
<br>
<label for="groupname">Gruppenname:</label><br>
<input type="text" name="groupname" id="groupname" size="50"><br>
<br>
<label for="futurejob">Späterer Berufswunsch:</label><br>
<input type="text" name="futurejob" id="futurejob" size="50"><br>            
<br>
<label for="bteacher">Lieblingslehrer/in:</label><br>
<input type="text" name="bteacher" id="bteacher" size="50"><br>
<br>
<label for="whatialwayswantedtosay">Was ich immer mal loswerden wollte:</label><br>
<input type="text" name="whatialwayswantedtosay" id="whatialwayswantedtosay" size="50"><br>
<br>
<label for="mymotto">Mein Lebensmotto:</label><br>
<input type="text" name="mymotto" id="mymotto" size="50"><br>            
<br>
<label for="bestlesson">Lieblingsfach:</label><br>
<input type="text" name="bestlesson" id="bestlesson" size="50"><br>
<br>
<label for="worstlesson">Hassfach:</label><br>
<input type="text" name="worstlesson" id="worstlesson" size="50"><br>
<br>
<label for="noschoolwithout">Ohne das hätte ich meine Schulzeit nicht geschafft:</label><br>
<input type="text" name="noschoolwithout" id="noschoolwithout" size="50"><br>
<br>
<label for="inthreewords">Meine Schulzeit in drei Worten:</label><br>
<input type="text" name="inthreewords" id="inthreewords" size="50"><br>            
<br>
<label for="myadvice">Mein Rat an jüngere Schüler:</label><br>
<textarea name="myadvice" id="myadvice" cols="52" rows="5"></textarea>
<br>
<label for="ratingofconstruction">Anzahl Sterne des Baulärms 1-5:</label><br>
<input type="number" name="ratingofconstruction" min="1" max="5" id="ratingofconstruction" size="1"><br>
<br>
Bild zum Hochladen wählen:
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="Abschicken" name="submit">   
<label for=""></label>
<input type="submit" value="Abschicken" name="submit">
</form>
</div>
</div>
</body>
</html>

我将删除HTML中的上传图片代码,因为它似乎也不起作用。它甚至不在PHP文件中了。

可以用于实例chr(10)

$data=$_POST['fname'] . chr(10);

您可以使用nPHP_EOL或如前所述的chr(10)为文本添加新行,但使用n的IMO在与以下内容一起使用时可能最简单:

<?php

if( $_SERVER['REQUEST_METHOD']=='POST' ){

$filename = substr( str_shuffle( "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ" ), 0, 6) . '.txt';

if ( !file_exists( $filename ) ) {
foreach( $_POST as $field => $value ){
/*
`sprintf` can be used to create a formatted string where 
variables are substituted for certain placeholders.

the `FILE_APPEND` flag ensures the file is written to
several times with previous data retained.
*/
file_put_contents( $filename, sprintf( "%s: %sn", $field, $value ), FILE_APPEND );
}
}
}
?>

免责声明:

在PHP字符串中使用n总是确保它用双引号包装,如:

echo "Some text with new line at the end n";

如果你将它与单报价一起使用

echo 'Some text with new line at the end n';

它将以n字符串的形式输出。

在PHP中,可以使用PHP_EOL添加换行符。

<?php
$filename = substr(str_shuffle("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, 6) . '.txt';
if ( !file_exists($filename) ) {
//File put contents stuff here
if(isset($_POST['fname']))
{
$data=$_POST['fname'];
$fp = fopen($filename, 'a');
fwrite($fp, $data);
}
if(isset($_POST['lname']))
{
$data=$_POST['lname'];
$fp = fopen($filename, 'a');
fwrite($fp, PHP_EOL . $data);
}
}

?>

正如其他人所说,添加n换行符是您所缺少的<Abronsius教授把你一个接一个的写作变成循环,让你的生活变得更轻松。不要一个接一个地重复代码,假设您打算保存提交的所有$_POST字段!>

还有另外两个简单的选择可以考虑。首先,保存为JSON:

$data = json_encode($_POST, JSON_PRETTY_PRINT);
file_put_contents($filename, $data);

这将为您提供一个包含以下内容的文件:

{
"rname": "Arr Name",
"fname": "Foo Name"
}   

在CCD_ 11的帮助下,您可以很容易地在以后重用数据。

如果你真的不需要数组密钥,这是迄今为止最简单的方法:

$data = implode("n", $_POST);
file_put_contents($filename, $data);

不需要循环它,也不需要在单独的调用中将每个字段写入文件。(在任何情况下,你只需要调用fopen一次。这里我们只使用file_put_contents。(这个方法会给你一个包含以下内容的文件:

Arr Name
Foo Name

如果你不想包括所有的$_POST字段,你可以用过滤你的帖子数据

$allowed = ['rname', 'fname'];
$fields = array_intersect_keys($_POST, array_fill_keys($allowed, ''));

然后,使用$fields就像使用$_POST一样,实现这些";批量节省";方法最适合您的用例。

注意:关于使用批量方法进行用户输入提交。恶意用户可能会调整表单/提交的数据并添加字段,从而列出白名单字段——如上所述;或者可能通过从表单定义中提取它们,因为它们已经在某个地方拼写出来了——如果您打算重用提交的数据,建议使用。您可能还想验证/净化实际内容,但这是另一天的主题。

p.S.虽然我们通常添加n作为换行符,但这是Linux&MacOS标准。Windows使用rn,如果您对Windows上下文执行此操作,则可能需要使用本机行结尾。任何一个像样的代码编辑器,以及自2018年以来的记事本(ref(,都可以使用任何一种,但旧的软件可能会出现问题,只是将线路融合在一起。

p.p.S.关于使用PHP_EOL生成行尾的注释。根据手册,PHP_EOL (string): The correct 'End Of Line' symbol for this platform.Ie.nrn取决于您的操作系统。假设您在Windows上进行开发,但后来部署到Linux服务器,您最好只选择一个(n(并坚持使用它,以避免使用混合换行标准的数据。

最新更新