2011-11-14 45 views
1

今天是我第一天搞乱PHP或MySQL ......我试图做一个简单的聊天程序......它工作的很好,但它显示的是旧的聊天记录和最新的聊天记录(位于我桌子底部)最后一页(位于页面底部)..我如何以相反顺序加载表格?所以它在我的HTML表格顶部显示数据库表底部的行?从下到上加载MySql表格 - PHP

这里是我的代码,这一切的所谓“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> 

回答

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']); 
+0

'INSERT'没有'ORDER BY'子句。你可能意思是'SELECT'。 – a1ex07

+0

@ a1ex07你说得对,对不起。我一定在睡觉。我修好了它。 – kba

2

的文件中明确指定排序关键字:

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

太棒了!很高兴这是一个简单的修复!我仍然真的很新..谢谢O :) –

+0

$ data = mysql_query(“SELECT * FROM ChatTest ORDER BY TimeStamp DESC”)或die(mysql_error()); –

+0

我试过哦:)它告诉我我必须等15分钟我相信...反正它现在让我...也...你知道我怎么可以使输入框TextArea发送PHP文件的HTML文本与换行符和所有内容......如果我输入换行符并将其发送到我的数据库,它似乎忽略它们?我必须使用JavaScript将文本的\ n转换为
,然后将文本发送到数据库? –