【问题标题】:Load MySql table from bottom to top - PHP从下到上加载 MySql 表 - PHP
【发布时间】:2011-11-14 00:18:02
【问题描述】:

今天是我接触 PHP 或 MySQL 的第一天...我尝试制作一个简单的聊天程序...效果很好,但它首先显示旧聊天和最新聊天(位于我的底部表)最后(在页面底部)..如何以相反的顺序加载表?所以它会在我的 HTML 表格顶部显示数据库表格底部前面的行?

这是我的代码...全部在名为“Chat.php”的文件中

<html><head></head><body>
<form action="chat.php" method="post">
Message: <br><textarea type="text" name="message" style="width:80%; height:300px;"></textarea><br>
<input type="submit" />
</form>

<?php

$host="****";
$user="****";
$password="****";

$cxn = mysql_pconnect ($host, $user, $password);

mysql_select_db("defaultdb", $cxn);

if (getenv(HTTP_X_FORWARDED_FOR)) {
    $ipaddress = getenv(HTTP_X_FORWARDED_FOR);
} else {
    $ipaddress = getenv(REMOTE_ADDR);
}

$message = $_POST["message"];

mysql_query("INSERT INTO ChatTest (ID, TimeStamp, Message) VALUES ('$ipaddress', NOW(), '$message')");

$data = mysql_query("SELECT * FROM ChatTest") or die(mysql_error()); 
 Print "<table border cellpadding=3>"; 
 Print "<tr>"; 
 Print "<th>ID:</th><th>TimeStamp:</th><th>Message:</th>";
 while($info = mysql_fetch_array( $data )) { 
 Print "<tr>"; 
    Print " <td>".$info['ID'] . "</td> "; 
    Print " <td>".$info['TimeStamp'] . " </td>";
    Print " <td>".$info['Message'] . "</td></tr>"; 
 } 
 Print "</table>"; 

mysql_close($cxn);


?>
</body></html>

【问题讨论】:

    标签: php mysql html-table chat


    【解决方案1】:

    您正在寻找的是 MySQL 的 ORDER BY 语句。您可以使用它来告诉 DBMS 您希望结果的顺序。

    SELECT * FROM ChatTest
    ORDER BY `TimeStamp` DESC
    

    还有一件事……

    我知道这是您的第一次尝试,所以会出现错误是可以理解的。但是,您应该立即了解的一件事是SQL Injections

    考虑一个例子,其中用户的消息是

    0'); DROP TABLE ChatTest --
    

    突然间你的查询看起来像

    INSERT INTO ChatTest (ID, TimeStamp, Message)
    VALUES ('$ipaddress', NOW(), '0'); DROP TABLE ChatTest --')
    

    为防止这种情况,请始终通过mysql_real_escape_string() 运行用户输入,如下所示:

    $message = mysql_real_escape_string($_POST['message']);
    

    【讨论】:

    • INSERT 没有 ORDER BY 子句。你的意思可能是SELECT
    【解决方案2】:

    明确指定您的排序键:

    $data = mysql_query("SELECT * FROM ChatTest ORDER BY PostDate DESC") or die(mysql_error()); 
    

    【讨论】:

    • 太棒了!很高兴这是一个如此简单的修复!我还是个新手.. 谢谢 O:)
    • $data = mysql_query("SELECT * FROM ChatTest ORDER BY TimeStamp DESC") or die(mysql_error());
    • 我试过了 O:) 它告诉我我必须等待 15 分钟,我相信......无论如何它现在让我......还有......你知道我怎么做输入框吗? TextArea 向 php 文件发送带有换行符和所有内容的 HTML 文本...如果我输入带有换行符的内容并将其发送到我的数据库,它似乎会忽略它们?我是否必须使用 javascript 将文本的 \n 转换为
      然后将文本发送到数据库?
    • \n存入你的数据库,当你用PHP的nl2br()函数输出时将其转换为&lt;br /&gt;
    猜你喜欢
    • 2021-12-28
    • 2023-03-11
    • 2015-08-20
    • 2014-01-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-03-23
    • 2014-03-30
    相关资源
    最近更新 更多