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


Save cookies in array to re-use later in php

我是编程新手,所以不要判断太强!

在本地主机上,我有一个HTML表单,它有两个输入字段:$firstTerm和$secondTerm,以及4个按钮:求和、差、乘、除。

<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。这是我在这里的第一个问题,如果我做错了什么,我很抱歉。

cookie不是这样工作的。从文献setcookie:

一旦设置了cookie,就可以在下一页加载时使用$_COOKIE$HTTP_COOKIE_VARS数组访问它们。

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

使用var_dump($_COOKIE);查看阵列内部的内容。出于您的目的,您应该使用$_SESSION

你可以试试这个:

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>";
}