Сбросить переменную сеанса php

Я передаю идентификатор с помощью ajax для удаления с помощью $_SESSION. Часть ajax работает нормально, php получает в POST идентификатор, но переменная не может быть отменена. Почему??? Вот мой код:

Часть ajax:

    $(".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);
        }
    })

});

Принимающая часть php:

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!
}
}

Любое полезное предложение, почему я не могу отключить переменную сеанса? Спасибо!


person Escudo Bravo    schedule 02.03.2013    source источник
comment
А что именно не работает с этим кодом? Мы не будем догадываться, что происходит...   -  person Till Helge    schedule 02.03.2013
comment
Какую версию jQuery вы используете? .live() больше не рекомендуется.   -  person Phillip Berger    schedule 02.03.2013
comment
Извините, но просто для подтверждения правильности этого процесса: $ncart=$_SESSION['cart']; в $ncart=array_values($ncart); в $_SESSION['cart']=$ncart;?   -  person MichaelRushton    schedule 02.03.2013
comment
я подозреваю, что вы должны изменить if(count($ncart)==0) на if(count($_SESSION['cart'])==0)   -  person Mariano Montañez Ureta    schedule 02.03.2013
comment
@MichaelRushton Это просто перенумеровывает ключи в этом массиве, чтобы они были последовательными после удаления одного из середины. Это необходимо из-за необычной, но мощной природы типа массива PHP как одновременного списка/вектора и (упорядоченного) хэша.   -  person IMSoP    schedule 02.03.2013
comment
@MarianoMontañezUreta Эти два оператора if будут вести себя точно так же, поскольку одна переменная была записана в другую в предыдущей строке.   -  person IMSoP    schedule 02.03.2013
comment
@IMSoP, у меня был момент безумия, и я прочитал array_values как array_keys. Момент с красным лицом.   -  person MichaelRushton    schedule 02.03.2013
comment
Итак, кто-нибудь знает, как заставить его работать? Я уже использовал этот скрипт, и до сих пор он работал нормально!   -  person Escudo Bravo    schedule 07.03.2013


Ответы (1)


У меня есть собственное решение:

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";
 }  
}

Это потому, что массив был таким:

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

)
person Escudo Bravo    schedule 09.03.2013