最新消息(PHP)

时间:2015-10-18 07:01:21

标签: php comments fwrite

我正在按照本教程创建评论系统:https://www.youtube.com/watch?v=3bgdhcqlMXg。但是,我希望首先出现最新消息,而不是最早的消息。

所以我重新开始了#34; a"通过" w +" (我也试过" c"和" r +",但我遇到了同样的问题。)

<?php 
if($_POST) {
$message = $_POST['message'];
$handle = fopen("includes/messages.php", "w+");
file_put_contents($message, $handle);
fwrite($handle,"<h2>Name</h2><p>'.$message.'</p>");
fclose($handle);
}
?>

而不是张贴不同的&#34;框&#34;对于一条消息,代码仅替换先前的消息。例如:

用户写&#34; Awesome&#34;在textarea,它将发布&#34; Awesome&#34;。 但如果第二个用户写了#34;我喜欢编码&#34;,&#34; Awesome&#34;将变成&#34;我喜欢编码&#34;。 (而不是2个不同的评论)。

感谢。

3 个答案:

答案 0 :(得分:2)

// if POST request not empty
if (!empty($_POST)) {

    // Set filename
    $filename = 'includes/messages.php';

    $input_msg = $_POST['message'];

    // Get all messages
    $old_msg = file_get_contents($filename);

    // Add new message to the beginning
    $new_msg = "<h2>Name</h2><p>'.$message.'</p>".$old_msg;

    // Save it
    file_put_contents($filename, $new_msg, FILE_APPEND | LOCK_EX);
}

答案 1 :(得分:0)

你应该使用

file_put_contents($file, $message, FILE_APPEND | LOCK_EX);

请注意,如果2个进程在sametime文件中运行会出错,你应该使用lock_ex beacuse,同时锁定帮助你的一个写入器。

答案 2 :(得分:0)

首先,请缩进您的代码!我不能强调良好的编程技巧。

其次,请勿检查$_POST,检查$_POST['message']。这是为了确保通过实际消息发送,而不仅仅是$_POST个值。

最后,它不起作用的原因是因为你如何存储它。我不会将消息存储在文件中。将其存储在数据库中。我不确定您是否正在尝试include() messages.php文件,或者您是否正在将信息存储在i中。对于这样的应用程序,不要将信息存储在这样的文件中。使用像MySQL这样的数据库。在MySQL中你可以做这样的调用。

<?php
    $conn = mysqli_connect('localhost', 'root', '', 'messages');

    $sql = "SELECT * FROM `messages` WHERE /* Whatever you want to specify here */

    $query = mysqli_query($conn, $sql);
    while ($row = mysqli_fetch_array($query)) {

        echo $row['message'];            

    }
?>

这假设您有一个名为消息的数据库,以及一个名为消息的列。

通过PHP查看this playlist。真的很棒。有点过时,但很好的复习。

希望这会有所帮助。