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

时间:2014-11-02 02:41:15

标签: php forms text

我有一个保存到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);
?>

所以我需要不同的注释来保存到不同的行而不只是一行。

4 个答案:

答案 0 :(得分:1)

您的\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);

这是一个简单的错误,但你应该尝试养成复制和粘贴变量名的习惯,而不是重新输入它们。这(帮助)避免拼写错误等,这在大型代码块和&amp;多个文件,成为一个更大的问题。

并使用您的错误日志 - 它们在编码时非常宝贵!
在这种情况下,PHP(因此日志)会对未定义的$email变量抱怨,这反过来会导致您检查变量并且您可能已经解决了。

答案 1 :(得分:0)

我会使用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;

答案 2 :(得分:0)

$txt='Email: '.$email.'\nComments: '.$comments.'\n\n';

使用\ r \ n创建新的行文本文件,如:

$ txt ='电子邮件:'。$ email。'\ r \ n评论:'。$ comments。'\ r \ n';

答案 3 :(得分:0)

您实际上可能会使用单引号并连接换行符,但您需要编写如下代码:

<?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);
    }
?>

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