PHP订单表单Cookie无法累加存储多条数据问题求助
问题背景
需要实现一个订单表单功能:用户可多次输入商品数据,点击“ajouter”将数据存入Cookie;点击“verifier”查看当前订单;点击“enregistrer”将订单存入文本文件。当前代码仅能存储单条数据,新增时会覆盖原有Cookie内容。
错误分析
原代码存在以下关键问题:
- Cookie名称引用错误:判断
$_COOKIE['$bon']时多了美元符号,实际Cookie名是bon - JSON解码默认返回对象,导致数组操作异常
- 文件操作时文件名未加引号,引发语法错误
- 保存订单后未清空Cookie,会导致后续操作累加旧数据
- 订单查看直接输出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
相关产品推荐
相关产品推荐

