Php 需要反馈表单注释以保存到sepoerate行

Php 需要反馈表单注释以保存到sepoerate行,php,forms,text,Php,Forms,Text,我有一个反馈表,保存到一个txt文件,它保存完美,但它保存在一行。因此,多个注释将保存在一行上,以便只保存到记事本上的一行,而不是将不同的注释分隔到不同的行上 这是我的HTML <form action="feedback.php" method="post"> <table> <tr> <td>Email Address:</td> <td> <input type

我有一个反馈表,保存到一个txt文件,它保存完美,但它保存在一行。因此,多个注释将保存在一行上,以便只保存到记事本上的一行,而不是将不同的注释分隔到不同的行上

这是我的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>&nbsp;</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";
编辑 更改使用的变量名时,未写入您的电子邮件地址。 e、 g.您有以下代码:

$email_address=$_POST['email_address'];
$txt='Email: '.$email.'\nComments: '.$comments.'\n\n';
您的
$txt
变量正在使用
$email
但是您正在将
$\u POST
数据设置为变量
$email\u 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\u EOL
,因为它是跨平台兼容的!这意味着它可以处理Unix/DOS/Mac问题

(我还认为您需要更改
$email
变量) 因此,请记住你的台词:

$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.';
?>

为了减少出错的可能性,应该进行某些检查。用户是否确实提交了表单?此外,我们不应该假设来自$\u 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);
    }
?>


我用exit()替换了病态的die()因为它们都是等效的语言结构;它们都生成相同的退出操作码。

您需要让PHP插入换行符。在以
$txt='Email:'。$Email:'开头的行中将单引号更改为双引号。
这是单引号内的
\n
;使用双引号
“\n“
谢谢,由于某些原因,电子邮件没有保存,它只是显示为:email:Comments:Hello,而不是保存电子邮件。这以前也发生过。你知道这是为什么吗?我能做些什么来修复它?在2014年,使用
\r
\r\n
很可能在任何地方都被正确解释,无论操作系统如何。就我个人而言,我认为最好只对
\n
;)进行标准化
<?php
echo 'This is a test of using a newline char.' . chr(10) .
'Did it work? It should have.';
?>
<?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);
    }
?>