You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP订单表单Cookie无法累加存储多条数据问题求助

问题解决:订单表单Cookie累加存储多条数据

问题背景

需要实现一个订单表单功能:用户可多次输入商品数据,点击“ajouter”将数据存入Cookie;点击“verifier”查看当前订单;点击“enregistrer”将订单存入文本文件。当前代码仅能存储单条数据,新增时会覆盖原有Cookie内容。

错误分析

原代码存在以下关键问题:

  1. Cookie名称引用错误:判断$_COOKIE['$bon']时多了美元符号,实际Cookie名是bon
  2. JSON解码默认返回对象,导致数组操作异常
  3. 文件操作时文件名未加引号,引发语法错误
  4. 保存订单后未清空Cookie,会导致后续操作累加旧数据
  5. 订单查看直接输出JSON,可读性差

修复后的完整代码

<body>
    <div class="container">
        <form action="command.php" method="POST" class="formulaire">
            <fieldset>
                <legend> saisie d'article</legend>
                    <div class="elements_form">
                        <div class="elements">
                        <label for="code">code </label> <input type="textfield" name="code" placeholder="code de l'article">
                        </div>
                        <div class="elements">
                        <label for="article">article</label> <input type="textfield" name="article" placeholder="nom de l'article">
                        </div>
                        <div class="elements">
                        <label for="prix">prix </label> <input type="textfield" name="prix" placeholder="prix">
                        </div>
                    </div>
                    <div id="bouton">
                    <input class="bouton" name="ajouter" type="submit" value="ajouter">
                    <input class="bouton" name="enregistrer" type="submit" value="enregistrer">
                    <input class="bouton" name="verifier" type="submit" value="verifier">
                    </div>
                    <?php
                    
                    if(isset($_POST['ajouter'])){
                        $code = $_POST['code'];
                        $article = $_POST['article'];
                        $prix = $_POST['prix'];

                        // 修正Cookie名称,解码为关联数组
                        $bon = isset($_COOKIE['bon']) ? $_COOKIE['bon'] : '[]';
                        $bonArray = json_decode($bon, true);

                        // 添加新商品到数组
                        $bonArray[] = [
                            'code' => $code,
                            'article' => $article,
                            'prix' => $prix
                        ];
                        // 更新Cookie
                        setcookie('bon', json_encode($bonArray), time() + 3000);
                        echo "<p>商品已添加到订单</p>";
                    }
                    else if(isset($_POST['enregistrer'])){
                        if(isset($_COOKIE['bon'])){
                            $bon = $_COOKIE['bon'];
                            $bonArray = json_decode($bon, true);
                            // 文件名添加引号,避免语法错误
                            $mesBons = fopen("bon.txt", "a");
                            // 写入格式化的订单内容,而非原始JSON
                            fwrite($mesBons, "--- 新订单 ---\n");
                            foreach($bonArray as $item){
                                fwrite($mesBons, "Code: {$item['code']}, Article: {$item['article']}, Prix: {$item['prix']}\n");
                            }
                            fclose($mesBons);
                            // 保存后清空Cookie
                            setcookie('bon', '', time() - 3600);
                            echo "<p>订单已保存到文件</p>";
                        } else {
                            echo "<p>当前没有订单可保存</p>";
                        }
                    }
                    else if(isset($_POST['verifier'])){
                        if(isset($_COOKIE['bon'])){
                            $bon = $_COOKIE['bon'];
                            $bonArray = json_decode($bon, true);
                            echo "<h3>您的订单内容:</h3>";
                            echo "<ul>";
                            foreach($bonArray as $item){
                                echo "<li>Code: {$item['code']} | Article: {$item['article']} | Prix: {$item['prix']}</li>";
                            }
                            echo "</ul>";
                        } else {
                            echo "<p>当前没有订单</p>";
                        }
                    }
                    ?>

            </fieldset>
        </form>
        
    </div>
</body>

关键修改说明

  • 修正Cookie名称:将$_COOKIE['$bon']改为$_COOKIE['bon'],匹配设置的Cookie名称
  • JSON解码为关联数组:json_decode($bon, true)确保返回数组,方便进行添加元素的操作
  • 修复文件操作语法:fopen("bon.txt", "a")给文件名添加引号,避免PHP语法错误
  • 保存后清空Cookie:添加setcookie('bon', '', time()-3600),完成订单后重置Cookie,避免后续操作复用旧数据
  • 优化输出格式:查看订单时用列表展示,保存文件时用可读性更强的格式,替代原始JSON字符串

内容的提问来源于stack exchange,提问作者Imene lz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 18:25:36