2012-03-24 71 views
0

我已經設置了以下SQL數據:

  1. 數據庫類($ DB)
  2. 分頁類($分頁程序)

我正在嘗試編寫一個基本系統讓我管理頁面。我有一個頁面「page_manager.php」,其中包括我的數據庫類(database.php)和我的分頁類(paginate.php)。

在我的分頁類中,我有一個迴應我的SQL數據的函數。我想出了一種方法來回顯帶有必要ID的select>元素的HTML <,這使得我可以基於< select>元素的值成功回顯相應的結果(每頁10個)。因此,「1」將回顯數據庫中的前10個結果,「2」將從11-20回顯,「3」將回顯自21-30等,等等。

我添加了onChange事件到< select>元素將它的值(使用「this.value」)複製到一個隱藏的表單字段。然後我使用document.getElementById()。submit();來提交這個表單。

然後,這會將$ _GET變量添加到URL中,所以URL變爲「... /?pagenumber_form = X」。但是,當我嘗試從URL中獲取該值時,$ _GET ['pagenumber_form']爲空。

一些代碼:

<span style='font-family: tahoma; font-size: 10pt;'>Page #</span> 
    <select id="page_number_selection" 
    onchange='javascript: document.getElementById("pagenumber_form").value = this.value; 
          document.getElementById("pagenumber").submit();'> 
    <?php 
     for($i = 1; $i <= $this->num_pages; $i++) 
      echo"<option id='" . $i . "'>" . $i . "</option>";  
    ?> 
    </select> 

<form name="pagenumber" id="pagenumber" action="" method="get"> 
    <input type="text" name="pagenumber_form" id="pagenumber_form" /> 
</form> 

所以,我一直在使用$ _ POST和嘗試,但同樣的事情發生。我想使用$ _GET,原因有兩個:更容易看到我的值發生了什麼,我使用的數據不需要安全。

回顧一下:當我更改< select>元素時,將$ _GET變量添加到URL中,並將相應的值作爲「... /?pagenumber_form = X」添加到URL中,但是當我嘗試使用PHP中的值,例如...

$page_number = $_GET['pagenumber_form']; 

...我得到一個NULL值。 :-(

任何人都可以幫我請謝謝

編輯:。

我剛剛作出了一個發現如果我提出我的print_r($ _ GET)我的主要指數頁面,則超全局正在返回預期我的網站結構是這樣的:

的index.php - JavaScript的按鈕使用AJAX的HTTP請求包括「responseText的」作爲我的主要< div的.innerHTML>的。 「responseText」是頁面本身的內容案例page_manager.php,其中包括pagination.php。

換句話說,我的網站是從PHP包含的,它似乎不與HTTP超級全球兼容。

任何想法如何解決這個問題?謝謝 :-)。

+ --------------------------------------------- --------------------- +

我不能回答我自己的職位,所以:

的問題不解決,但是一直四處走動。

當然我對PHP並不是很瞭解,但我覺得使用AJAX請求將PHP文件包含在文檔中本身包含其他PHP文件並不是一個好主意。我相信這個問題是由於PHP在文檔加載到瀏覽器之前執行而引起的。因此,在文檔中動態地包含PHP文件將導致所述文件的不正常工作,這是由於PHP必須在呈現頁面之前由服務器執行而不是在之後執行。

因此,我已經停止爲我的網站使用AJAX,而只是使用良好的舊PHP代替。我不知道如何繼續使用AJAX請求,所以這就解決了這個問題。

感謝那些回覆。

+0

你試過var_dump($ _GET)嗎? – max 2012-03-24 22:30:49

+0

我剛剛嘗試過var_dump,但仍然沒有任何結果。我也試過print_r($ _ GET); – George88 2012-03-24 22:44:24

+0

請注意,除了會話固定(這裏沒有問題),發佈數據並不比使用GET更安全。重要的是GET請求必須是[冪等](http://stackoverflow.com/q/1077412/90527) - 它們必須是可重複的,結果相同。因此(以迂迴的方式),他們可以被添加書籤。如果您希望請求具有可重複性和可收藏性,請使用GET,否則使用POST。 – outis 2012-03-25 06:42:37

回答

0

您需要重新通過超全局的AJAX調用。所以,你要向pagination.php發出請求,你需要將其設置爲pagination.php?pagenumber_form=<?php echo $_GET['pagenumber_form']; ?>

+0

作爲一個方面說明,您還可以將相關的$ _GET值添加到$ _SESSION數組中,從而繞過將該變量重新傳遞給每個AJAX URL的需要(當然,記住,在需要時重置) 。 – MichaelRushton 2012-03-25 06:22:19

0

相應的值被添加到URL爲:」 .../pagenumber_form = X

你可能會想嘗試

.../?pagenumber_form=X 
+0

哦,對不起。這是我的一個錯字,價值確實發送到URL的「?」在它之前。 – George88 2012-03-24 22:41:51

+1

爲什麼downvote,如果這是你的錯誤? – SinistraD 2012-03-24 23:51:11

0

包含的文件可以很好地訪問超級全局變量(這是什麼使它們超級)什麼不能做是從一個請求訪問變量在另一個我t並不清楚你的代碼在做什麼(因爲這個問題不包括一個合適的minimal test case-一個完整的,簡潔的,有代表性的例子),但是聽起來好像加載一個頁面涉及多個請求,並且只有第一個給出了表單數據。每個AJAX請求都涉及單獨的HTTP請求,並且(因爲HTTP應該是無狀態的)具有不同的請求數據,所以任何未明確給出數據的請求都將無法訪問它。處理請求後,腳本可以訪問的所有數據都將被丟棄。這就是爲什麼如果您需要跨請求存在數據,您需要某種形式的持久性,例如會話(爲了不破壞HTTP無狀態模型)或數據庫,您應該小心這些持久性。

有些困難可能在於對服務器端發生了什麼的困惑,客戶端會發生什麼,兩者之間會發生什麼以及發生的順序。在繼續閱讀之前,請閱讀HTTP(網頁搜索應該會顯示有關該主題的無數文檔)。您可以使用調試器(例如Firebug,XDebug+a client,Wireshark,Live HTTP Headers)來點擊正在發生的事情。