2

我需要使用 txt 文件或其他任何可以被动查询的内容来创建评论框,而无需使用数据库服务器。由于我对 PHP 编程相当陌生,所以第一个想法是使用文本文件。就我在逻辑上能想到的而言,一般而言,完成此操作的代码是:

    <html>
<head></head>
<body>
<form method = "post">
<textarea name = "txt" cols = "25" rows = "5">
Place your comment here ...
</textarea><br><br>
<input type = "submit" value = "Submit" onclick = "<?php
    $com = $_POST["txt"];
    $file = fopen("inrg.txt", "a");
    fwrite($file, "<br>");
    for($i=0; $i <= strlen($com) - 1; $i++)
        {
        fwrite($file, $com[$i]);
        if($i % 37 == 0 && $i != 0)
            fwrite($file, "<br/>");
        }
    fwrite($file, "<br>------------------------------------------");
    fclose($file);
?>">
<br>
</form>
<font face = "Times New Roman"><b><p>Textul introdus este: </p></b></font>
<font face = "Comic Sans MS" color = "red" size = "2" >
<?php
$file = fopen("inrg.txt", "r");
echo fread($file, filesize("inrg.txt"));
fclose($file);
?>
</font>
</body>
</html>

还没有什么花哨的,它确实需要在美学方面进行一些改进。问题是在我在评论框中提交内容后,它会正确显示,但如果我在网络浏览器中重新加载,最后发布的评论会再次发布,就像我重新加载页面一样多次。此外,如果 PHP 有办法使最初的“将您的评论放在这里...”消失

4

4 回答 4

1
    <!doctype html>
    <html>
      <head>
        <meta charset="UTF-8">
        <title>Example document</title>
      </head>
      <body>
<?php
// the relative path to the file
$fname = "theFile.txt";
// read in the file if present
if(file_exists($fname)) $txt = file_get_contents($fname);

// if the user pushes the submit button
if(isset($_POST["txt"])){
    $txt = $_POST["txt"];   // get the entered content
    file_put_contents($fname,$txt);    // write the content to the file
}
?>
<form method="post" action="#">
<textarea name = "txt" cols = "25" rows = "5">
<?php echo $txt; ?>
</textarea><br />
<input type="submit" name="submit" value="submit" />
</form>
      </body>
    </html>

脚本所在的文件夹必须可由 PHP (=WebServer) 写入。这个脚本很关键,没有安全措施防止跨端脚本黑客攻击。可能有关于换行的问题。

于 2012-11-21T20:56:04.350 回答
0

这是将页面重定向到自身的一种方法:

<html>
<head></head>
<body>
<form method="post">
  <textarea name="txt" cols="25" rows="5"></textarea>
  <br><br> <input type="submit" value="Submit" name="submit" />

  <?php
  if ( isset( $_POST[ 'submit' ] ) ) {
    $com  = $_POST[ "txt" ];
    $file = fopen( "inrg.txt", "a" );
    fwrite( $file, "<br>" );
    for ( $i = 0; $i <= strlen( $com ) - 1; $i++ ) {
      fwrite( $file, $com[ $i ] );
      if ( $i % 37 == 0 && $i != 0 ) fwrite( $file, "<br/>" );
    }
    fwrite( $file, "<br>------------------------------------------" );
    fclose( $file );
   echo '<script type="text/javascript">window.location ="";</script>'; // Add here
  }
  ?>

  <br>
</form>
<font face="Times New Roman"><b><p>Textul introdus este: </p></b></font>
<font face="Comic Sans MS" color="red" size="2">
  <?php
  if (file_exists("inrg.txt")) {
  $file = fopen( "inrg.txt", "r" );
  echo fread( $file, filesize( "inrg.txt" ) );
  fclose( $file );
  }
  ?>
</font>
</body>
</html>
于 2012-11-21T20:42:58.787 回答
0

试试这个:

另一个页面.php

<?php
        if($_POST){ // is a message has been posted

            $fp = fopen('inrg.txt', 'a'); // open the text file and append using the 'a'
            fwrite($fp, $_POST['txt']."\n");
            fclose($fp);
            $message_message_to_user = "Message added to file. Wait a sec and you will be redirected.";
        }

            header("Location: theformpage.php"); // regardless of if there is a post - send the user back to the original page
            exit();
?>

表单页面.php

<html>
<head>
</head>
<body>
<form method="post" action="anotherpage.php">
    <textarea name = "txt" cols = "25" rows = "5">Place your comment here ...</textarea><br><br>
    <input type = "submit" value="Submit">
    <br>
</form>
<hr />
<?php
    // this reads all of the lines of the file and spits them out on the screen
    $fh = fopen('inrg.txt','r');
    while ($line = fgets($fh)){
        echo nl2br($line); // nl2br() converts new lines to <br>'s
    }
    fclose($fh);

?>
</body>
</html>
于 2012-11-21T20:49:59.753 回答
0

让我们分部分来:

1)评论被一遍又一遍地发布,因为您在重新加载时重新提交表单。为避免这种情况,您需要在发布后重定向页面。这种技术称为Redirect after Post. 你应该搜索它,它很有趣。

2) PHP 没有办法使文本消失,因为当页面加载完成时,PHP 将完成执行。为此,您需要学习 Javascript。我也在学习 JavaScript,我认为这很困难,但是阅读《Simply Javascript》这本书,它会很好地向您介绍 JS。

只是为了让你知道,你必须在你的评论框上听“onClick”事件,然后调用一个 JS 函数来清除评论框。

会是这样的:

... id="thisBoxId" onclick="cleartext('thisBoxID')" >Enter a comment here...<...

和JS:

function cleartext( myitem ) {
   myitem.text.value = "";
}

当然,一旦完成,文本将永远不会回来,直到您重新加载页面。为了让它回来,你应该使用onLostFocus事件来重新填充文本。

于 2012-11-21T20:50:13.380 回答