PHP: Avoid undefined index?

Each time the POST value is not equal to the list of values ​​specified in the array, it is returned: Undefined Index error, I made an if statement, but it does not work.

Here's the if statement:

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

EDIT2:

Avoiding the warning will not help to see the current situation, because I am dealing with several factors, for example, the list of items in the shopping cart, if an invalid product is not deleted, it will be added to the shopping list session.

This is the full script:

 <?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(); ?> 
+6
source share
7 answers

I am a little confused by your code. It looks like your array has the same key and value, so:

 $products['saucepan'] = 'saucepan' 

Perhaps you are trying to do this to check if a product exists in a product array:

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

You must first check if $ _POST ['product'] is installed with isset () , for example:

 if( isset($_POST['product']) ){ // Do something with $_POST['product'] } 

This should suppress the warning.

+7
source

You can also try

 $product = (isset($_POST['product'])) ? $_POST['product'] : null; 

This will set $ product to $ _POST if it exists, or null if not. Then you can try

 if ($product) { do_something(); } 

or access your array using

 $products[$product]; 

I feel this makes your code a little easier on the eyes.

+2
source
 @$_POST['product'] 

(with @ ) will return the same as:

 $product = (isset($_POST['product'])) ? $_POST['product'] : null; 

In short, sweeter !! 4 times less code! Easier to read and understand.

The @ symbol is an error management statement (AKA is “silence” or “locking” operator). This causes PHP to suppress any error messages (notification, warning, fatal, etc.).

But be careful not to use @ for any other thing, as this will make your code much harder to debug!

(this will answer your question before editing)

+2
source
 if (isset($products[$_POST['product']]) && $products[$_POST['product']] == $_POST['product']) 

isset () function helps you avoid warning

0
source
 if(isset($products[$_POST['product']) && $products[$_POST['product'] != "") 

Please note that vriable may be empty, but it is also “installed”, so what happens after && is necessary.

0
source

you can check if the index "product" is defined in the same if statement.

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

Source: https://habr.com/ru/post/886998/


All Articles