最新消息优先(PHP)


Newest messages first (PHP)

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

所以我用"w+"代替了"a"(我也试过"c"answers"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);
}
?>

并且,代码只替换前一条消息,而不是为一条消息发布不同的"box"。例:

用户在文本区写入"Awesome",它将发布"Awesome"。但如果第二个用户写"我爱编程","棒极了"就会变成"我爱编程"。(而不是两个不同的注释)。

谢谢。

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

你应该使用

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

请注意,您应该使用lock_ex,因为如果两个进程在同一文件中运行将会出错,并且锁帮助u到其中一个写入器在同一时间可以写入。

首先,请缩进你的代码!对于好的编程技术,我再怎么强调也不为过。

第二,不要检查$_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'];            
    }
?>
这将假设您有一个名为messages的数据库和一个名为message的列。

在PHP上查看这个播放列表。它真的很好。有点过时,但是很好的复习。

希望有帮助。