0

I've got a problem with removing object from '$_SESSION' array. My aim is to delete each product from array after choosing one particular. This is the view part:

<?php                   
  for ($i=0; $i < count($this->products); $i++) { 
     echo "<a class='remove_from_basket' href='" .$this->baseUrl. "/shop/delete-product/id/" .$this->products[$i]->product_id. "'>Delete</a>";
  }    
?>

Then in PHP part I get this products ID with:

public function deleteProductAction() {    
        $productID = $this->_getParam('id', 0);
        session_start();
        $obj = $_SESSION['products'];    
        foreach ($obj as $key => $product) {
            if ($product['product_id'] == $productID) {
                unset($product);
            }
        }
        $_SESSION['products'] = $obj;    
    }

$obj after printing_r:

Array
(
    [2] => Zend_Db_Table_Row Object
        (
            [_data:protected] => Array
                (
                    [product_id] => 26
                )

            [_cleanData:protected] => Array
                (
                    [product_id] => 26

            [_modifiedFields:protected] => Array
                (
                )

            [_table:protected] => 
            [_connected:protected] => 
            [_readOnly:protected] => 
            [_tableClass:protected] => Application_Model_DbTable_Products
            [_primary:protected] => Array
                (
                    [1] => product_id
                )

        )

    [3] => Zend_Db_Table_Row Object
        (
            [_data:protected] => Array
                (
                    [product_id] => 26
                )

            [_cleanData:protected] => Array
                (
                    [product_id] => 26
                )

            [_modifiedFields:protected] => Array
                (
                )

            [_table:protected] => 
            [_connected:protected] => 
            [_readOnly:protected] => 
            [_tableClass:protected] => Application_Model_DbTable_Products
            [_primary:protected] => Array
                (
                    [1] => product_id
                )

        )

)

However, nothing happens... Could anyone help?

1 Answer 1

3

Here, in your code, you are just unsetting the $product, which is totally not related to your session variable. You need to use the index of the object and unset it in the original object.

foreach ($_SESSION['products'] as $key => $product) {
    if ($product['product_id'] == $productID) {
        unset($_SESSION['products'][$key]);
    }
}

Or just for the $obj you want to do, you can do like:

foreach ($obj as $key => $product) {
    if ($product['product_id'] == $productID) {
        unset($obj[$key]);
    }
}

The above code removes the index completely.

Sign up to request clarification or add additional context in comments.

13 Comments

Ok, but ofter using this, when displaying in view part I get a notice in this particular index: Notice: Undefined offset: 0
I would add a check in the of statement to see if the data you want to unset is present. Like this: if (isset($_SESSION['products'][$key]) && $product['product_id'] == $productID) { unset($_SESSION['products'][$key]); }`
@Sitethief doesn't unset quietly unsets?
You are correct there This is probably trivial but there is no error for unsetting a non-existing variable.
@Peter var_export not var_dump or print_r. But this could help as well.
|

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.