2012-02-06 61 views
0

我想通過點擊標題來排序表。一旦我點擊它,表格就按A→Z排序。下次我點擊它,它應該被排序Z-> A。我不知道什麼是錯的。每次點擊標題時,條件的第二部分都會激活。Php排序mysql表

我刪除了前面的代碼,並粘貼了使用$ _SESSION的幾乎解決方案。

if (isset($_SESSION['sorted'])) 
{ 
    if($_SESSION['sorted']== 1) 
    { 
     $result = mysql_query("SELECT filename, address, id FROM $tablename order by ".$column." DESC"); 
     $_SESSION['sorted'] = 0; 
     echo "sorted = ". $_SESSION['sorted']; 
    } 
    else 
    { 
     $result = mysql_query("SELECT filename, address, id FROM $tablename order by ".$column); 
     $_SESSION['sorted'] = 1; 
     echo "sorted = ". $_SESSION['sorted']; 
    } 
} 
else 
{ 
     $result = mysql_query("SELECT filename, address, id FROM $tablename order by ".$column); 
     $_SESSION['sorted'] = 1; 
     echo "isnotset.sorted = ". $_SESSION['sorted']; 
} 

現在,它的工作,但有一個問題。當用戶刷新頁面時,$ _SESSION變量被設置爲另一個值,就好像用戶再次單擊標題(按F5一次又一次地對錶格進行排序)。

+0

全球==執着,你需要存儲當前在持久存儲器中排序asc/desc – 2012-02-06 16:44:37

+0

只是猜測:如果初始化$ AZ_sorted = false,它是否總是按照其他方式排序? – 2012-02-06 16:44:53

+0

每次單擊標題時是否重新加載頁面? – j08691 2012-02-06 16:45:33

回答

0

看起來您總是將$AZ_sorted設置爲true。您應該從請求中獲取它,並且只有在未設置時纔將其設置爲true。細節取決於您網站的其他部分的結構。例如,如果您使用GET參數,則需要類似如下內容:

$AZ_sorted = $_GET['AZ_sorted']; 
0

您在哪裏設置$ AZ_sorted爲true?我假設每次頁面加載時都會執行此操作,並且每次都將$ AZ_sorted重置爲true。

另外,全局變量永遠不是一個好主意。

0

因爲重新加載頁面時,$ AZ_sorted再次被初始化爲TRUE,所以它總是進入條件語句的else部分。

0

我想你不應該創建函數sort($ column),因爲它是php中的一個受限函數。

否則,你的二傳手似乎不工作:

$AZ_sorted = false; 

嘗試更換真/假0/1這樣的:

$AZ_sorted = 1; 
function new_sort($column="") { 
global $AZ_sorted; 
if ($AZ_sorted == 0) 
{ 
    $result = mysql_query("SELECT filename, address, id FROM $tablename order by ".$column); 
    $AZ_sorted = 1; 
    echo "$AZ_sorted = true"; 
} 
else 
{ 
    $result = mysql_query("SELECT filename, address, id FROM $tablename order by ".$column." DESC"); 
    $AZ_sorted = 0; 
    echo "$AZ_sorted = false"; 
} 
} 
+0

我試過這個。我在主代碼中設置了$ AZ_sorted,而不是在函數中,並且我不認爲整個代碼在單擊標題時運行(爲什麼會這樣)。 – erdomester 2012-02-06 17:17:27

+0

嘗試執行兩次new_sort($ column =「」),您將看到條件的每個部分都被執行。 – JuSchz 2012-02-06 17:20:00

+0

是什麼?執行兩次?起初它的1.所以起初其他的是活躍的,它是由DESC命令,並且是0.如果我再次點擊,如果應該是活躍的,它由ASC命令並且是1.然後其他活動再次。通過閱讀這段代碼,這是它應該如何工作的,但事實並非如此 – erdomester 2012-02-06 17:58:52