2

I'm passing an id by ajax to be removed by $_SESSION. The ajax part works fine, the php receive in POST the id, but the vairable can't be unset. Why??? Here my code:

The ajax part:

    $(".delete").live('click', function(e){
    e.preventDefault();
    var id_to_remove = $(this).attr('id');
    //alert(id_to_remove);
    $.ajax({
        type: "POST",
        url: 'inc/functions/remove_item_from_cart.php',
        data: { id : id_to_remove },
        success: function(data) {
          $("#content").load('inc/functions/get_checkout_content.php');
            alert(data);
        }
    })

});

The php receiving part:

session_start();
if(isset($_SESSION['cart']) && isset($_POST['id'])){
//echo var_dump($_SESSION['cart']);
$ncart=$_SESSION['cart'];
if (count($ncart)>0){
    unset($ncart[$_POST['id']]); // this is NOT working!!!
    $ncart=array_values($ncart);

    $_SESSION['cart']=$ncart;
    if(count($ncart)==0){
        unset($_SESSION['cart']);
        unset($_SESSION['cart_total']);
        echo "all_empty";
    } // this if part is the only working!
}
}

Any helpful suggestion why I can't unset the session variable? Thanks!

8
  • 2
    And what exactly doesn't work with this code? We won't guess what's going wrong... Commented Mar 2, 2013 at 19:21
  • What version of jQuery are you using? .live() is now deprecated. Commented Mar 2, 2013 at 19:21
  • Sorry, but just to confirm, is this process correct: $ncart=$_SESSION['cart']; to $ncart=array_values($ncart); to $_SESSION['cart']=$ncart;? Commented Mar 2, 2013 at 19:23
  • i suspect you must change if(count($ncart)==0) to if(count($_SESSION['cart'])==0) Commented Mar 2, 2013 at 19:24
  • @MichaelRushton That just re-numbers the keys in that array to be consecutive after removing one from the middle. It's necessary because of the unusual but powerful nature of PHP's "array" type as simultaneously list/vector and (ordered) hash. Commented Mar 2, 2013 at 19:27

1 Answer 1

3

I got my own solution:

if (count($_SESSION['cart'])>0){

 foreach ($_SESSION['cart'] as $key => $subarray){ 
  if ($subarray['id'] == $_POST['id']){ 
  unset($_SESSION['cart'][$key]); 
 break; 
 } 
} 

$_SESSION['cart'] = array_values($_SESSION['cart']);

} else {
 if(count($_SESSION['cart'])==0){
  unset($_SESSION['cart']);
  unset($_SESSION['cart_total']);
  echo "all_empty";
 }  
}

That's because the array was like this:

Array
(
    [0] => Array
        (
            [id] => 3
            [name] => Collier Ano petit
            [price] => 45
            [quant] => 1
            [ptotal] => 45
        )

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

Comments

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.