将cookie保存在数组中以便稍后在php中重用

时间:2015-12-11 13:55:35

标签: php cookies

我是编程新手,所以不要过于强烈判断!

在我的localhost上,我有一个包含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函数我正在保存用户输入。在使用Developers Tools的浏览器中,我可以看到$ _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。 这是我的第一个问题,如果我做错了,我很抱歉。

2 个答案:

答案 0 :(得分:1)

这不是饼干的工作方式。来自documenation of setcookie

  

设置好Cookie后,可以使用$_COOKIE$HTTP_COOKIE_VARS数组在下一页上访问这些Cookie。

因此,由于网络的无状态特性,页面加载时会设置$_COOKIE。因此,当页面再次加载时,您将能够看到$_COOKIE值。

使用var_dump($_COOKIE);查看数组中的内容。为了您的目的,您应该使用$_SESSION代替。

答案 1 :(得分: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>";
}