2015-12-11 33 views
0

我是編程中的新手,所以不要判斷太強大!保存cookie中的數組以便在php中重複使用

在我的本地主機上,我有一個帶有2個輸入字段的HTML表單:$ firstTerm和$ secondTerm,以及4個按鈕:Summ,Difference,Multiply,Divide。

<form> 
    Enter first term: <input type="number" step="0.001" name="firstTerm"> 
    Enter second term: <input type="number" step="0.001" name="secondTerm"> 
    <button name="summ" id="summ">Summ</button> 
    <button name="difference" id="difference">Difference</button> 
    <button name="multiply" id="multiply">Multiply</button> 
    <button name="divide" id="divide">Divide</button> 
</form> 

在這種形式下,使用GET方法,我返回$ result。

*if((isset($_GET['firstTerm']) && isset($_GET['secondTerm'])) && (isset ($_GET['summ']) || isset ($_GET['difference']) || isset ($_GET['multiply']) || isset ($_GET['divide']))){ 

    $keysGet = array_keys($_GET); 

    $firstTerm = $_GET['firstTerm']; 
    setcookie('firstTerm', $firstTerm, time()+604800); 

    $secondTerm = $_GET['secondTerm']; 
    setcookie('secondTerm', $secondTerm, time()+604800); 

    $operation = $keysGet[2]; 
    switch ($operation) { 
     case "summ": $result = $firstTerm + $secondTerm; break; 
     case "difference": $result = $firstTerm - $secondTerm; break; 
     case "multiply": $result = $firstTerm * $secondTerm; break; 
     case "divide": $result = $firstTerm/$secondTerm; break; 
    } 

    setcookie('result', $result, time()+604800); 

    echo "<h3>Your result is $result</h3>"; 
}* 

使用setcookie()php函數我正在保存用戶輸入。在使用開發工具的瀏覽器中,我可以看到$ _COOKIE中存儲的3個值。

問題:如何在計算期間(當他在瀏覽器中計算同一頁面時)保存所有用戶輸入(按下按鈕後)?換句話說:每次當一個按鈕被按下時,我需要cookie中的所有值存儲在其他3個數組$ firstTermCookie [] $ secondTermCookie [] $ resultCookie []中,並從這3個新的數組中需要隨機值。

我已經試過:

$firstTermCookie = []; 
$secondTermCookie = []; 
$resultCookie = []; 
$firstTermCookie[] = $_COOKIE['firstTerm']; 
$secondTermCookie[] = $_COOKIE['secondTerm']; 
$resultCookie[] = $_COOKIE['result']; 

但每個操作存儲只值,清除以前的值。 使用foreach $ _COOKIE循環,它會存儲3次相同的值,同時也會擦除以前的值。 我知道$ _SESSION的可能性,但我需要從$ _COOKIE中存儲它們。

預先感謝您!

P.S. 這是我的第一個問題,如果我做錯了,我很抱歉。

+0

要保存所有結果嗎?反對所有4個行動? – devpro

+0

@devpro是的,所有4個行動的條款和結果。 –

+0

比爲什麼在計算之前使用設置的cookie? – devpro

回答

1

這不是Cookie的工作。從documenation of setcookie

一旦餅乾已經確定,他們可以在接下來的頁面加載與$_COOKIE$HTTP_COOKIE_VARS陣列訪問

因此,$_COOKIE由於網頁的無狀態特性而在加載頁面時設置。因此,當頁面再次加載時,您將能夠看到您的$_COOKIE值。

使用var_dump($_COOKIE);來查看數組內部的內容。而爲了您的目的,您應該使用$_SESSION

+0

我讀過,我不打算立即使用cookie。經過3-4次計算後,我想將每個以前的項存儲在自己的數組中,然後再使用這3個新數組的值:$ firstTermCookie [],$ secondTermCookie [],$ resultCookie []。 –

+0

@ S.M。這是不可能的。由於您**重新加載**每個計算的頁面,因此在每次計算後,這三個數組'$ firstTermCookie []','$ secondTermCookie []'和$ $ resultCookie []'將被新數值覆蓋。 –

+0

我認爲如果$ _GET數組在每次調用時都存儲不同的值,那麼將這些不同的值分配給不同的全局變量(在我的情況下爲數組)時必定是可能的。我也在考慮GLOBAL模式,但似乎它會起作用。 –

0

你可以試試這個:

if((isset($_GET['firstTerm']) && isset($_GET['secondTerm'])) && (isset ($_GET['summ']) || isset ($_GET['difference']) || isset ($_GET['multiply']) || isset ($_GET['divide']))){ 

    $keysGet = array_keys($_GET); 

    $firstTerm = $_GET['firstTerm']; 
    $secondTerm = $_GET['secondTerm']; 


    $operation = $keysGet[2]; 

    switch ($operation) { 
     case "summ": 
     $result = $firstTerm + $secondTerm; 
     setcookie('firstTerm_summ', $firstTerm, time()+604800); 
     setcookie('secondTerm_summ', $secondTerm, time()+604800); 
     setcookie('result_summ', $result, time()+604800); 

     break; 
     case "difference": $result = $firstTerm - $secondTerm; 
     setcookie('firstTerm_difference', $firstTerm, time()+604800); 
     setcookie('secondTerm_summ', $secondTerm, time()+604800); 
     setcookie('result_difference', $result, time()+604800); 
     break; 
     case "multiply": $result = $firstTerm * $secondTerm; 
     setcookie('firstTerm_multiply', $firstTerm, time()+604800); 
     setcookie('secondTerm_multiply', $secondTerm, time()+604800); 
     setcookie('result_multiply', $result, time()+604800); 
     break; 
     case "divide": $result = $firstTerm/$secondTerm; 
     setcookie('firstTerm_divide', $firstTerm, time()+604800); 
     setcookie('secondTerm_divide', $secondTerm, time()+604800); 
     setcookie('result_divide', $result, time()+604800); 
     break; 
    } 
    echo "<h3>Your result is $result</h3>"; 
} 
+0

這是一個解決方案,爲彼此只做一次4次不同的操作,但是當一個操作重複時,我不可能存儲以前的術語相同的操作。 –

相關問題