2011-10-29 20 views
0

在我的網站上獲得與PHP的查詢,一些物品像如何使用複選框實時更改MySql查詢?

$sql - ("SELECT * FROM articles WHERE showing=0"); 

最重要的這裏是表現= 0我會解釋爲什麼在後者。

我想加入複選框將執行以下操作: 如果用戶檢查複選框,它將改變表現= 1,如果沒有選中表現= 0

我該如何做到這一點1)它記得用戶是否有或沒有點擊複選框。因此,每次用戶訪問網站時,都會根據用戶以前的操作打開或關閉複選框。 2)刷新頁面以顯示新的結果,例如顯示= 0更改爲顯示= 1

回答

0

如果你關心性能,知道文章表可以得到多大,以及如何索引是非常重要的。如果文章表格足夠小,以至於生成網頁的其他步驟壓倒兩個查詢(您可能能夠並行化)的成本,那麼只需生成兩個列表,放入兩個div並編寫客戶端JavaScript以顯示只有在選中或取消選中複選框時才能指定div。類似於

<script type="text/javascript"> 
    function updateArticlesList() { 
     var box = document.getElementById("ckart"); 
     if (box.checked) { 
      document.getElementById("article0").style.visibility = "collapse"; 
      document.getElementById("article1").style.visibility = "visible"; 
     } else { 
      document.getElementById("article0").style.visibility = "visible"; 
      document.getElementById("article1").style.visibility = "collapse"; 
     } 
    } 
</script> 
<input id="ckart" type="checkbox" onclick="updateArticlesList()">Switch articles list</input> 

至少應該照顧問題2。如果文章表大而且查詢速度慢,則必須採取完全不同的路線,並且只有在用戶實際點擊複選框時才填寫丟失的div。在這種情況下,您需要將AJAX調用添加到updateArticlesList函數中。

另一方面,問題1是一個完全不同的問題。我將不得不假設你有一些方法可以在你生成頁面時知道當前用戶是誰,否則試圖說出「用戶之前做了什麼」是沒有意義的。但是,通過上面的代碼,您需要做的唯一事情就是設置divs article0和article1的可見性的初始值以及複選框ckart的可見性。 AJAX涉及將用戶設置保存回服務器的問題。你最好的選擇是向服務器添加一個URL(我有更多的Django體驗,所以我的第一個直覺是一個urls.py條目,儘管我知道這不適用於PHP),以便字符串的後回「0」或「1」會導致設置保存在用戶的配置文件中。在下一頁上,如果用戶的文章可見性設置爲0,則div article0可見,article1被摺疊,並且ckart未被選​​中。如果用戶的文章可見性設置爲1,則文章0摺疊,文章1可見,並檢查ckart。

+0

我不認爲每次加載兩個div是個好主意,但是我對ajax也不太好,有沒有辦法在沒有ajax幫助的情況下做到這一點?說頁面刷新? Thmx – Ilja

1

這是一個很好的理由。對於第一部分,您需要在複選框中添加一個'onclick'處理程序,該處理程序會觸發對服務器的AJAX調用並通過新的複選框狀態發送。服務器端腳本使用新複選框更新數據庫。

至於記住數據庫,這取決於你如何對待用戶。如果他們已註冊,則將複選框狀態存儲在他們的用戶信息中。如果他們只是隨機取消註冊,則需要使用cookie。

至於你的2),我不確定你的意思。您希望複選框在用戶可能打開的所有窗口中更新?或者只是改變他們點擊它的窗口中的複選框?

+0

不,第二個是根據複選框的狀態顯示來自數據庫的不同信息。 – Ilja

相關問題