PHP通过POST传递表单变量numBooks报undefined index错误如何解决
问题根因
问题出在你使用filter_input_array()过滤POST参数时,没有在验证规则中声明numBooks字段,所以该字段被过滤逻辑直接剔除,返回的$post数组中不存在numBooks索引,因此调用时触发未定义索引报错。
修复方案
- 第一步:在参数验证规则中新增
numBooks的校验配置,示例如下:
if ($method == "POST") { $validationRules = [ 'do' => [ 'filter' => FILTER_VALIDATE_REGEXP, 'options' => [ "regexp" => "/^(add_into_cart|purge_cart|update_cart)$/" ] ], 'id' => [ 'filter' => FILTER_VALIDATE_INT, 'options' => ['min_range' => 0] ], // 新增numBooks字段的验证规则 'numBooks' => [ 'filter' => FILTER_VALIDATE_INT, 'options' => ['min_range' => 0] ] ]; $post = filter_input_array(INPUT_POST, $validationRules);
- 第二步:可选优化,访问字段前增加存在性判断,避免极端场景下的报错:
case "update_cart": $id = $post["id"]; $knjiga = BazaKnjig::vrniKnjigo($id); // 增加isset判断,字段不存在时默认赋值为0触发删除逻辑 $quan = isset($post["numBooks"]) ? $post["numBooks"] : 0; if($quan > 0) { $_SESSION["cart"][$id] = $quan; } else { unset($_SESSION["cart"][$id]); } break;
- 第三步:可选前端优化,给数量输入框增加原生属性限制,避免用户输入非法值:
<input type="number" name="numBooks" value="<?= $number ?>" size="1" min="0">
内容的提问来源于stack exchange,提问作者simsam
相关产品推荐
相关产品推荐

