PHP购物车数据经AJAX传至另一PHP文件时循环遍历报错问题
问题:PHP购物车数据遍历存入数据库失败
我有一个PHP购物车,正尝试将购物车中的数据提交到另一个PHP文件并存入新数据库。已经把表格数据存入数组,用JSON.stringify处理后传给PHP文件并解码。直接调用$data[2]['prodName']能获取对应行的prodName值,但用for循环遍历$data[$x]['prodName']时出现警告:
PHP Warning: Undefined array key "prodName" in F:\DreamCPU backup\PHPConnect\checkout.php on line 8
可正常获取单个值的测试代码
<?php $data = stripcslashes($_POST['tabledata']); $data = json_decode($data, true); echo $data[2]['prodName']; ?>
出错的循环代码
<?php $data = stripcslashes($_POST['tabledata']); $data = json_decode($data, true); for($x=0; $x < count($data); $x++) { echo $data[$x]['prodName']; } ?>
购物车表格

print_r($data)的输出结果
Array ( [0] => Array ( [prodID] => 2 [prodName] => Little Mermaid Doll 2023 [prodDesc] => Little Mermaid Doll 2023 [prodQuantity] => 1 [prodPrice] => 15.00 [prodSub] => 15.00 ) [1] => Array ( [prodID] => 3 [prodName] => Little Mermaid TShirt 1989 [prodDesc] => Little Mermaid TShirt 1989 [prodQuantity] => 1 [prodPrice] => 15.00 [prodSub] => 15.00 ) [2] => Array ( [prodID] => 4 [prodName] => Little Mermaid TShirt 2023 [prodDesc] => Little Mermaid TShirt 2023 [prodQuantity] => 1 [prodPrice] => 15.00 [prodSub] => 15.00 ) [3] => Array ( ) )
解决方案
从print_r结果能看到,数组索引[3]对应的是空数组,没有prodName键,循环到此处时触发警告。提供两种解决方式:
方法1:先过滤空数组再遍历
解码后先移除空数组,再用更适配数组遍历的foreach循环处理:
<?php $data = stripcslashes($_POST['tabledata']); $data = json_decode($data, true); // 过滤空数组 $data = array_filter($data); foreach($data as $item) { // 确保键存在再执行操作 if(isset($item['prodName'])){ echo $item['prodName']; // 此处编写数据库存入逻辑,推荐用预处理语句防SQL注入 // $stmt = $pdo->prepare("INSERT INTO 表名 (prodName, prodID, prodQuantity) VALUES (?, ?, ?)"); // $stmt->execute([$item['prodName'], $item['prodID'], $item['prodQuantity']]); } } ?>
方法2:循环内判断键是否存在
保留原数组结构,在循环中检查当前项是否包含目标键:
<?php $data = stripcslashes($_POST['tabledata']); $data = json_decode($data, true); for($x=0; $x < count($data); $x++) { if(isset($data[$x]['prodName'])){ echo $data[$x]['prodName']; // 执行数据库插入操作 } } ?>
内容的提问来源于stack exchange,提问作者Jose Ortiz
相关产品推荐
相关产品推荐

