今天是我第一天搞乱PHP或MySQL ......我试着制作一个简单的聊天程序......它运行得很好但它首先显示旧聊天和最新聊天(位于我的底部) table)last(在页面底部)..如何以相反的顺序加载表?那么它在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>
答案 0 :(得分:4)
您正在寻找的是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']);
答案 1 :(得分:2)
明确指定您的排序键:
$data = mysql_query("SELECT * FROM ChatTest ORDER BY PostDate DESC") or die(mysql_error());