PHP:避免未定义的索引?

php
2022-08-30 23:51:21

每次 POST 值不等于数组中设置的值列表时,将返回:未定义的索引错误,我做了一个 if 语句,但不起作用。

下面是 if 语句:

 if ($products[$_POST['product']] == $_POST['product']) {
do everything;}
else {
echo "This item is not available";
}

编辑2:

看到当前的情况避免警告不会有太大帮助,因为我正在处理几个因素,例如购物车中的项目列表,如果无效产品未被删除,它将被添加到购物清单会话中。

这是完整的脚本:

<?php

session_start();

//Getting the list
 $_SESSION['list'] = isset($_SESSION['list']) ? $_SESSION['list'] : array();    

 //stock    
 $products = array(      
     'Pineaple' => 500, 'Banana' => 50, 'Mango' => 150,       
     'Milk' => 500, 'Coffe' => 1200, 'Butter' => 300,      
     'Bread' => 450, 'Juice' => 780, 'Peanuts' => 800,      
     'Yogurt' => 450, 'Beer' => 550, 'Wine' => 2500,    
 );    

if( isset($_POST['product']) ){


     //Saving the stuff    
     $new_item = array(      
         'item' => $_POST['product'],       
         'quantity' => $_POST['quantity'],     
         'code' => $_POST['code'],      
         'price' => $products[$_POST['product']] * $_POST['quantity'],    

     );



    $new_product = true;    
    foreach($_SESSION['list'] as $key => $item) {      
        if ($item['item'] == $new_item['item']) {        
        $_SESSION['list'][$key]['quantity'] += $new_item['quantity'];        
        $_SESSION['list'][$key]['price'] = $products[$new_item['item']] * $new_item['quantity'];        
        $new_product = false;
        }    
    }   

    if ($new_product) {      
        $_SESSION['list'][] = $new_item;        
    }    

    /*if ($new_item['item'] != $products[$new_item['item']]) {
        echo "This item is not available";}*/

    //listing    
    echo  "<b>SHOPPING LIST</b></br>";    
    foreach($_SESSION['list'] as $key => $item) {       
        echo 'Product .'. $key. ' '. $item['item'], ' ', $item['quantity'], ' units: ', $item['price']. '<br />';    
        }

}

else {
echo "This item is not available";
}

echo "</br> <a href='index.html'>Return to index</a> </br>";

//Printing session
var_dump($_SESSION);

session_destroy();

?>

答案 1

在 PHP 7 中,null 合并运算符可用于处理可选的请求变量。如果 post 数组中的 “product” 不是有效键,则可以更改对哪个的引用将解析为 null(而不是引发警告)。如果要同时检查 $_POST 和 $_GET 数组的值,可以使用 。$_POST['product']$_POST['product'] ?? null$_POST['product'] ?? $_GET['product'] ?? null


答案 2

我对你的代码有点困惑。看起来您的数组具有相同的键和值,因此:

$products['saucepan'] = 'saucepan'

也许您正在尝试执行此操作,这将检查产品是否存在于 products 数组中:

if(isset($_POST['product']) && array_key_exists($_POST['product'], $products))
{
  // do stuff
}
else
{
  echo "This item is not available";
}

推荐