每次POST值不等于数组中设置的值列表时,都会返回:Undefined Index error,我发了一个if语句但是没有用。
这是if语句:
if ($products[$_POST['product']] == $_POST['product']) {
do everything;}
else {
echo "This item is not available";
}
EDIT2:
看到避免警告的当前情况不会有太大帮助,因为我正在处理几个因素,例如购物车中的商品列表,如果无效产品未被删除,它将被添加到购物清单会话中
这是完整的脚本:
<?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();
?>
答案 0 :(得分:18)
我对你的代码感到有点困惑。看起来你的数组具有相同的键和值,所以:
$products['saucepan'] = 'saucepan'
也许您正在尝试这样做,这将检查产品数组中是否存在产品:
if(isset($_POST['product']) && array_key_exists($_POST['product'], $products))
{
// do stuff
}
else
{
echo "This item is not available";
}
答案 1 :(得分:8)
您应首先检查$ _POST ['product']是否设置为isset(),例如:
if( isset($_POST['product']) ){
// Do something with $_POST['product']
}
这应该取消警告。
答案 2 :(得分:6)
@$_POST['product']
(使用 @ )将返回相同的内容:
$product = (isset($_POST['product'])) ? $_POST['product'] : null;
更短更甜!! 代码少4倍!更易于阅读和理解。
@符号是错误控制操作符(AKA&#34;沉默&#34;或 &#34;闭嘴&#34;运营商)。它使PHP抑制任何错误消息(注意, 警告,致命等。)。
但要注意不要将@用于任何其他事情,因为它会使你的代码更难调试!
(这将在编辑前回答您的问题)
答案 3 :(得分:4)
在PHP 7中,null coalescing operator可用于处理可选的请求变量。您可以将$_POST['product']
的引用更改为$_POST['product'] ?? null
,如果'product'在post数组中不是有效的键,则它将解析为null(而不是发出警告)。如果要同时检查$ _POST和$ _GET数组的值,则可以使用$_POST['product'] ?? $_GET['product'] ?? null
。
答案 4 :(得分:3)
您也可以尝试
$product = (isset($_POST['product'])) ? $_POST['product'] : null;
如果存在,则将$ product设置为$ _POST值,否则设置为null。 然后你可以尝试
if ($product) {
do_something();
}
或使用
访问您的数组$products[$product];
我觉得这样可以使你的代码在眼睛上更容易一些......
答案 5 :(得分:0)
if (isset($products[$_POST['product']]) && $products[$_POST['product']] == $_POST['product'])
isset()函数将帮助您避免警告
答案 6 :(得分:0)
if(isset($products[$_POST['product']) && $products[$_POST['product'] != "")
请注意,变量可以为空,但也可以“设置”,以便在&amp;&amp;是必要的。
答案 7 :(得分:0)
您可以检查索引'product'是否在同一if语句中定义..
if (isset($_POST['product']) && $products[$_POST['product']] == $_POST['product']) {
do everything;
}
else {
echo "This item is not available";
}
答案 8 :(得分:0)
如果未设置值,则可以使用??
设置默认值。
$_POST['product'] ?? "No product";