【问题标题】:Save cookies in array to re-use later in php将 cookie 保存在数组中以供以后在 php 中重复使用
【发布时间】:2015-12-11 13:55:35
【问题描述】:

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

在我的本地主机上,我有一个 HTML 表单,其中包含 2 个输入字段:$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 中存储它们。

提前致谢!

附: 这是我在这里的第一个问题,如果我做错了什么,我很抱歉。

【问题讨论】:

  • 您要保存所有结果吗?反对所有 4 项行动?
  • @devpro 是的,所有 4 项操作的条款和结果。
  • 为什么要在计算之前使用设置的 cookie?
  • 您可以为每个函数添加单独的 COOKIES,否则您可以创建具有不同索引的数组。
  • @devpro 我需要稍后再使用它们,当用户在同一页面上时。

标签: php cookies


【解决方案1】:

cookie 不是这样工作的。来自documenation of setcookie

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

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

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

【讨论】:

  • 我读到了,我不打算立即使用 cookie。经过 3-4 次计算后,我想将每个先前的术语存储在自己的数组中,然后使用这 3 个新数组中的值:$firstTermCookie[]、$secondTermCookie[]、$resultCookie[]。
  • @S.M.这是不可能的。由于您为每次计算重新加载页面,因此在每次计算后,这 3 个数组 $firstTermCookie[]$secondTermCookie[]$resultCookie[] 将被新值覆盖。
  • 我认为如果 $_GET 数组在每次调用时都存储不同的值,那么必须将这些不同的值分配给不同的全局变量(在我的例子中是数组)。我也在考虑 GLOBAL 模式,但它似乎会以类似的方式工作。
【解决方案2】:

你可以试试这个:

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

【讨论】:

  • 它是 4 种不同操作的解决方案,彼此只进行一次,但是当重复操作时,我无法存储相同操作的先前术语。
猜你喜欢
  • 2011-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-09-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-10-07
相关资源
最近更新 更多