2015-10-07 79 views
0

我正在設計一個簡單的任務列表,但我遇到了一些小問題。 我希望能夠通過單擊表單按鈕來從數據庫中訂購項目,但它不起作用。PHP按升序/降序排序不起作用

這是在升序和降序之間對它進行排序的代碼。

$type='ASC'; 
if(isset($_POST['sort'])) { 
    if ($type == 'DESC') { 
     $type = 'ASC'; 
    } 
}elseif($type == 'ASC') { 
    $type='DESC'; 
} 

用於獲取從DB結果查詢:

$sql = 'SELECT * FROM customers ORDER BY id '. $type; 

(編輯:按鈕是一個POST方法表單標籤內) 和表單按鈕:

<form method="post"><button type="submit" name="sort" id="asc"></button></form> 

這(在我看來)應該能夠工作,但事實並非如此。 任何人願意幫我找到問題嗎?

+0

你是如何讓你的'$ type'變量? – NaijaProgrammer

+1

該按鈕本身不會真的發送名爲'asc'的$ _POST變量。您需要將其放在表單中才能正確發佈信息。如果它不起作用,你可以使用'$ sql'查詢來查看實際發送到數據庫的內容嗎? –

+0

該按鈕位於表單標籤內,忘記插入問題中。我寫的代碼必須這樣做:單擊按鈕時,檢查$ type是否爲DESC,如果是,請將$ type設置爲ASC,反之亦然。但它不起作用。我試圖在函數內部聲明變量$ type,但那也不起作用。 –

回答

0

如果要使用表單,則需要將值保存爲input type =「hidden」。

<?php 
$type = $_POST["sortvalue"]; 
if(!$type) { 
    $type = "ASC"; 
} 
if(isset($_POST['sort'])) { 
    if ($type == 'DESC') { 
     $type = "ASC"; 
    }elseif($type == 'ASC') { 
     $type = "DESC"; 
    } 
} 
$sql = 'SELECT * FROM customers ORDER BY id '. $type; 
?> 

<form method="POST"> 
<button type="submit" name="sort" value="sort">Sort</button> 
<input type="hidden" name="sortvalue" value="<?php echo $type; ?>"> 
</FORM> 

希望這對你的工作..:d

+0

這個工程!非常感謝你。我想問你,因爲我不擅長PHP。你爲什麼使用隱藏的輸入類型?我不明白這是如何工作的。 –

+0

隱藏的輸入與其他輸入類似,但隱藏的輸入不會顯示在網頁上,所以如果您想要將數據或臨時變量與表單一起傳遞,您可以使用隱藏輸入,您可以查看隱藏輸入如何工作使用螢火蟲。 :) –

0

或者您可以使用AJAX

$("body").on("click", "#asc", function(e) { 
e.preventDefault(); 
sort(); 
}); 

function sort() { 
    var order = find("table#sort_order").val(); 

    $.ajax({ 
    url: 'process.php', 
    type: 'POST', 
    data: order, 
    dataType: 'json', 
    success: function(data) { 
     // change sort order using data 
    }, // End of success function of ajax form 
    error: function(xhr, status, errorThrown) { 
     console.log("Error: " + errorThrown); 
     console.log("Status: " + status); 
     console.dir(xhr); 
    }, 
    }); // End of ajax call 
}