2011-11-14 44 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轉換爲
,然後將文本發送到數據庫? –