PHP写入文本文件每次更新时都会使文本丢弃一行

时间:2018-02-23 13:56:31

标签: php

我正在开发一个非常基本的客户端/案例管理工具。部分内容涉及使用PHP读取/写入.txt文件的文本框。

我遇到的问题是,每次点击“提交”时,文字都会下降一行。当您首先在文本框中写入一些文本时,显然您将其写在顶行,但是当您单击提交时,它会在文本框中下拉一行。奇怪的是,第一次发生这种情况(因此文本显示一行向下),.txt文件显示文本实际上在第一行应该是(虽然它显示在文本框中的第2行)。但是,如果再次单击“提交”(例如,如果在文本框中添加/更改信息,或者甚至只是单击“提交”),文本将在文本框中的另一行中删除,这会使其下拉一行。 .txt文件。

我错过了什么吗?有没有办法阻止这种情况发生?

这是我在显示文本框的页面上使用的代码:

<form action=".write-case-notes.php" method='post'>
<textarea name='textblock' style="width: 490px; height: 170px; resize: 
none;" >

<?php echo file_get_contents( ".case-notes.txt" ); ?>

</textarea>
<input type='submit' value='Update Case Notes'>
</form>

这是我用来写入.txt文件的php代码:

<?php

$f = fopen(".case-notes.txt", "w");

fwrite($f, $_POST["textblock"]); 

$newURL = '.parties.php';
header('Location: '.$newURL);

?>

上述代码的$ newURL部分是在提交新文本后使页面返回带有文本框的页面。

2 个答案:

答案 0 :(得分:0)

您可以尝试执行以下操作:

$file = './case-notes.txt';
$f = fopen($file, 'a');
fwrite($f, isset($_POST['textblock'])."\n");
fclose($f);
header('Location: ./parties.php');

编辑:使位置重定向更简单。 编辑:下面的新解决方案

&#13;
&#13;
<form action="./write-case-notes.php" method='post'>

<textarea name='textblock' style="width: 490px; height: 170px; resize: 
none;" >

</textarea>
<input type='submit' value='Update Case Notes'>
</form>
<?php

if (isset($_POST['textblock'])) {
	$text_block = $_POST['textblock'];
	$file = './case-notes.txt';
$f = fopen($file, 'a');
fwrite($f, $text_block."\r\n");
fclose($f);

}


?>
<br /><br /><br />
<?php $output = file_get_contents( "./case-notes.txt" );
print $output."<br />"; ?>
&#13;
&#13;
&#13;

答案 1 :(得分:0)

您实际上拥有您自己代码中的空行:

<form action=".write-case-notes.php" method='post'>
<textarea name='textblock' style="width: 490px; height: 170px; resize: none;" >

<?php echo file_get_contents( ".case-notes.txt" ); ?>

</textarea>
<input type='submit' value='Update Case Notes'>
</form>

因此,当HTML呈现时,你......

  1. 首先,打开您的<textarea ...>代码。
  2. 然后在textarea中写一个空白行
  3. 然后转储文件内容。
  4. 你实际上在它之后转了另一个空白行。
  5. 然后关闭textarea代码。
  6. 解决方案1(快速和肮脏)

    消除HTML中的空行空格新行

    <form action=".write-case-notes.php" method='post'>
    <textarea name='textblock' style="width: 490px; height: 170px; resize: none;" ><?php echo file_get_contents( ".case-notes.txt" ); ?></textarea>
    <input type='submit' value='Update Case Notes'>
    </form>
    

    解决方案2(更干净的代码)

    如果你想要更多干净的代码:

    1. 将您的内容分配到变量中。
    2. 如果您不使用像smarty,twig或其他任何模板引擎,请使用简单的PHP替换模板化自己。
    3. <?php
      
          // Content to be substituted.
      
          $textAreaContent = file_get_contents( '.case-notes.txt' );
          $textAreaStyle = 'width: 490px; height: 170px; resize: none;';
      
          // Template to substitute in.
      
          $template =
      '<form action=".write-case-notes.php" method="post">
          <textarea name="textblock" style="%s">%s</textarea>
          <input type="submit" value="Update Case Notes">
      </form>';
      
          // Render
      
          $html = sprintf( $template, $textAreaStyle, $textAreaContent );
          echo( $html );
      

      注意:

      文档说:

        

      如果文件是纯PHP代码,则最好省略PHP结束   标签在文件的末尾。这可以防止意外的空格或新的空格   在PHP结束标记之后添加的行,这可能会导致不需要的行   因为PHP会在没有时启动输出缓冲   来自程序员的意图在该点发送任何输出   脚本。

      希望能帮到你!