нужно удалить только один товар из моей корзины, не все товары с одинаковым идентификатором - PullRequest
0 голосов
/ 14 июля 2011

Я не понимаю, почему этот код не только удаляет pizza_id с указанным ключом, который передается через URL. Я возвращаю значение $_GET['key'], чтобы проверить, есть ли у меня нужный номер, и он работает нормально. Значение ключа берется из другого цикла foreach $key=>$value, который формирует корзину покупок и содержит ссылку для удаления с идентификатором пиццы и ключом $.

switch ($action) {
    case 'add':
        if ($cart) {
            $cart .= ','.$_GET['pizza_id'];
        } else {
            $cart = $_GET['pizza_id'];
        }
        break;
    case 'delete':
        echo "KEY: ".$_GET['key']."<br>";
        if ($cart) {
            $items = explode(',',$cart);
            $newcart = '';
            foreach ($items as $key => $item) 
            {
                if ($_GET['pizza_id'] != $item && $GET['key']!= $key ) 
                {
                    if ($newcart != '') 
                    {
                        $newcart .= ','.$item;
                    } 
                    else 
                    {
                        $newcart = $item;
                    }
                }
            }
            $cart = $newcart;
        }
        break;
}

РЕДАКТИРОВАТЬ: возможно, я должен также упомянуть, что основа кода взята с этой веб-страницы http://v3.thewatchmakerproject.com/journal/276/

Ответы [ 3 ]

0 голосов
/ 14 июля 2011

Я не понимаю твоей проблемы ... но у тебя есть опечатка в условии if.

$GET[

не хватает подчеркивания ...

0 голосов
/ 14 июля 2011

Ну, как минимум, вам не нужен ключ $ в foreach.

if ($cart) {
    // you car is now an array of $items.
    $items = explode(',',$cart);
    $key = $_GET[ 'key' ];
    // are you sure pizza_id is correct too? You may want to echo/log it
    // if there is an $item which corresponds to $key, remove it.
    if( isset( $items[ $key ] ) )
          unset( $items[ $key ] );

    // this loop searches for all indexes of $_GET[ 'pizza_id' ] and removes them
    // comment this out if you don't want to do that. For some reason 
    // I missed it the first go round.
    while( ($pos = $array_search( $items, $_GET[ 'pizza_id' ] ) !== FALSE )
    {
        array_splice( $items, $pos, 1 );
    }
    // implode afterwards
    $cart = implode( ',', $items );
}

Другой автор указал, что ваш исходный код также имеет $GET['key'].Badness 10000. У вас есть предупреждения и вывод ошибок на максимальном уровне во время разработки?

0 голосов
/ 14 июля 2011

Проверьте, будет ли это работать

foreach ($items as $key => $item) 
                            {
                if ($_GET['pizza_id'] != $item && $GET['key']!= $item ) 
...