2009-04-15 55 views
0

我試圖在用戶單擊表格標題時重新排序HTML表格。這是我所能做的,但仍然無效。使用php和jquery排序

在HTML

// onClick on table header 
var par='ASC'; 
sort(par); 

來自:ajax.js

function sort(orderByType) 
{ 
    $.ajax({ 
    url: "sort.php", 
    type: "get", 
    data: "orderby="+orderByType, 
    success: function(data){ 
     alert(data); 
     $("t1").text(data); 
    } 
    }); 
} 

sort.php

$con = mysql_connect("localhost","root","root"); 
if (!$con) { 
    die('Could not connect: ' . mysql_error()); 
} 

$orderBy = $_GET['orderby']; 

mysql_select_db("icrisis", $con); 

$result = mysql_query("SELECT * FROM messages,user 
             where user_id = from_user 
             ORDER BY user_name".$orderBy); 

while($row = mysql_fetch_array($result)) 
{  
    echo "<tbody><tr><td>"."&#8226;"."</td><td>". 
     $row["Time_Date"]."</td><td>". 
     $row["player_name"]."</td><td></td><td></td><tr><td></td><td colspan='4'>". 
     $row["msg_desc"]."</td></tr></tbody>"; 
} 

mysql_close($con); 

它沒有看到$orderBy。然後我想將新訂單添加到我的頁面 - 這怎麼可能完成?

發送到函數排序的變量是動態的,即點擊時是ASC還是DESC?

+0

嗨,莎拉。請在提交問題時使用表單下方的預覽,以確保在提交前格式正確。爲了說明你輸入代碼的形式,使用四個前導空格。 – 2009-04-15 09:06:00

+0

MrHus的答案是正確的,但我認爲你做錯了什麼。你是否在字段名稱和排序方向之間放置了一個空格,還是就像你在這裏寫的一樣? – BYK 2009-04-15 09:19:08

回答

1

我不確定這是否是您的問題的原因,但我相信你錯過了一個空間。

查詢的最後一行是現在:

ORDER BY user_name".$orderBy); 

但應該是:

ORDER BY user_name ".$orderBy); 
+0

非常感謝您的關注MrHus,skorpan和Daan 我無法使用tablesorter,因爲我添加了2行ajax 至於我添加的空間,它的工作原理從來不是thoight,可能是現在我想要的問題更新jQuery的HTML表格的內容我怎麼能這樣做 – Sarah 2009-04-15 11:19:04

5

您應該嘗試:tablesorter它用於排序表。而且你甚至不需要使用php這個解決方案只是jQuery。希望它有用。

要回復您對Daan's anwser的評論,您可以按照here所述更新ajax tablesorter。

+0

雖然這是真的,但使用tablesorter插件進行排序對於較大的表幾乎不可用。只是爲了莎拉! – 2009-04-15 09:14:03

0

正如大安說你缺少的空間,這可能是原因,但我會加:

您應該檢查mysql_query()調用的結果,因爲目前您不知道這是否失敗,這可能是您的問題的原因。例如:

$result = mysql_query('SELECT ...'); 
if (!$result) { 
    die(mysql_error()); 
} 

while($row = mysql_fetch_array($result)) { 
//etc. 

還你真不該建基於字符串的SQL語句都來自於瀏覽器,因爲這些是不可信任的,有人可能目前添加惡意SQL到您正在執行什麼。見SQL Injection

您可以首先驗證字符串,這樣會更安全,而且很容易,因爲您只有兩個可能的值,例如,

if (isset($_GET['orderby']) && $_GET['orderby'] == 'DESC') { 
    $orderBy = 'DESC'; 
} else { 
    $orderBy = 'ASC'; 
}