2014-04-17 21 views
0

關於這個問題How to put MySQL table into session variable and using the table on next page?,我想解釋我在這裏要做的。修改不同頁面上的MySQL表格與來自HTML表格的分數

我有一個網站,其中包含一個表單,用戶可以通過它回答問題。在表格末尾,目標是向用戶提供哪些產品最適合他們的建議。

這個建議是通過詢問用戶幾個不同的問題來實現的。根據他們給出的答案,MySQL表中的產品列表將被分配點數。在表格的最後,具有最多積分的產品ID將成爲贏家,因此將成爲最適合用戶的產品。

在這個解釋中,我只會用2個問題。第一個問題被稱爲'階段1'。第二個問題被稱爲「階段2」。

階段1:帶有單選框輸入的HTML網頁表單爲用戶提供多個值之間的選擇。根據通過無線電框輸入的值,將現有表中的某一列插入新創建的臨時表中名爲「Phase1」的列中。該臨時表被命名爲「建議」。 Phase1列包含不同產品的點列表。

因此,這是發生了什麼形式的第1階段的一步一步的解釋:

  1. HTML單選框中輸入爲用戶提供了4個值之間的選擇。
  2. 的臨時表(名爲:「忠告」)與下面的列上創建:「產品ID」,「產品名稱」,「階段1」,「2階段」
  3. 列產品ID和產品名稱是通過對產品的數據填補。這些數據是從一個名爲'Computers_F1'的現有表中獲取的。

用戶應答問題「」階段1後會發生什麼?「

  • 根據哪個無線電框的值是由用戶輸入的,列相位1通過柱更新'1''2'3'或'4',其數據來自現有的名爲'Computers_Phase1'的表
  • 臨時表現在包含三個填充列'ProductID','ProductName'和'Phase1'。
  • 希望這一切都是有道理的,直到現在。第二個問題應該基本上和Phase1做同樣的事情。 請注意,階段2將發生在下一個HTML頁面上,並提供一個新表單,然後輸出到phase2.php。然而,這意味着臨時表'建議'需要從phase1.php傳遞到phase2.php。 所以這實際上是我迄今爲止的問題。因爲顯然,PHP不允許將MySQL SELECT查詢存儲到$ _SESSION變量中。我曾考慮將'Advice'表的內容保存在一個php數組中。但是,這樣做的缺點是我不能再使用MySQL查詢來修改階段2中的表。

    我需要能夠修改page2.php腳本中的表'建議'。這是必要的,因爲我想在幾個不同的問題之後進一步添加列。在所有問題結束時,我想創建一個名爲'Total'的列。該列中的值將是「階段1」,「階段2」等中的值的總和。因此,最終「總計」中得分最高的行將成爲最適合用戶的產品。

    希望你們可以幫助我這個。也許系統的設計有問題。有關如何改進系統的建議將受到高度讚賞。

    +1

    _因爲顯然,PHP不允許將MySQL SELECT查詢存儲到$ _SESSION變量中。_誰說的? –

    +0

    我之前問過一個關於此問題的問題(請參閱本文開頭的鏈接)。有人說這是不可能的。 – NvdB31

    +0

    誰說的?可以將mysql數據存儲在會話變量中。 – user3517652

    回答

    0

    簡答題將是:在會話中存儲不是數據,但只有用戶的選擇。
    在最後一頁上做所有的計算。

    正確答案臨時表應該是最後希望的行動。只有在不使用常規RDBMS機制的情況下才能使用。

    您的邏輯很可能會映射到標準連接。但由於邏輯還不爲人知,因此不可能說更多。

    0

    雖然我已經回答過您的主要問題,但這裏是答案。

    一個迴應你的問題之一:

    錯誤你得到
    的錯誤,你通常得到的是不正確的拼寫或表名的參考,字段名或任何其他變量的結果在MySQL查詢中。在你的情況下,這可能是由於調用/存儲會話變量不正確。例如,

    //Instead of "table", you typed "tabel". This is just an example. 
    $result = mysqli_query($mysqli,"SELECT * FROM table"); 
    

    分享您的代碼,以便我可以嘗試撿取此錯誤。以上只是一個例子。在會話變量

    存儲值不建議
    假設你的用戶填寫表單並移動到下一個階段。第一階段的數據通過會話變量轉移到第二階段。如果用戶只需關閉該選項卡並重新啓動該過程會怎麼樣?會話變量仍將被設置,並且以前的數據可能會干擾新的數據並可能產生意想不到的結果。

    理想的解決方案
    這是更好地存儲在JavaScript數組中的值,然後通過隱藏的輸入字段轉移到下一個頁面。一些使用這種邏輯的好處是:

    1. 快速性能
    2. 更多安全
    3. 易於管理

    參考代碼
    如果從HTML表單取值,那麼在POST中擁有該值非常簡單。使用JQuery UI選擇,您可以將選定的值添加到JavaScript數組中。

    //Declare Global JavaScript Variable on Page Load. This will be at the end of <head> 
    $(document).ready(function() { 
        window.fase1result = []; 
    }); 
    

    在此之後,要在其中添加數據的每個點擊事件將要採取的下一個頁面,使用下面的代碼將值添加到該陣列。

    fase1result.splice(indexOf_to_add, 1, "SelectedValue"); 
    

    瞭解.splice更好,click here

    一個選擇,例如單擊一個Div或鏈接,將值添加到fase1result並提交將數組值添加到輸入隱藏使用以下內容:

    在窗體的onsubmit上添加一個Javascript函數。

    <form id="myForm" method="POST" action="fase2.php" onsubmit="return fase1Values()"> 
    

    在表格中添加<input type="hideen" name="fase1values_input" id="fase1values_id">

    以下是</body>之前的JavaScript onsubmit函數。

    function fase1Values() { 
        $('#fase1values_id').val(JSON.stringify(fase1result)); 
    } 
    

    請注意,JSON.stringify是爲了將數組設置爲輸入值所必需的。

    $decode_fase1result = json_decode($_POST['fase1values_input']); 
    

    現在你已經從第1頁轉移使用Array的FASE 1選擇數據到第2頁,而不以任何臨時表中存儲的數據。

    希望這回答你的問題,並解決你的問題。