Javascript-форум (https://javascript.ru/forum/)
-   Серверные языки и технологии (https://javascript.ru/forum/server/)
-   -   Удаляет все одинаковые элементы из массива $_SESSION[] (https://javascript.ru/forum/server/14639-udalyaet-vse-odinakovye-ehlementy-iz-massiva-%24_session%5B%5D.html)

Saimon7887 24.01.2011 13:44

Удаляет все одинаковые элементы из массива $_SESSION[] полтос на мобилу кто поможет
 
Вообщем ребят очень прошу помощи, сначала код:
Это код удаления позиции из корзины
<?php $head = "no_header"; require_once('_inc/bd.php');
    if (isset($_POST['process'])) {$process = $_POST['process'];}
    session_start();
    //Показ корзины
    if ($process == "enter_cart") {
        ?><div id="cont">
        <table cellpadding="2px" cellspacing="5px" border="0px">
            <thead>
            <tr>
                <td align="center" width="400px">Наименование</td>
                <td align="center" width="150px">Цена</td>
                <td align="center" width="150px">Удалить</td>
            </tr>
            </thead>
            <tbody>
            <?php
            
            $i = 0;
            foreach ($_SESSION['cart']['tov'] as $n => $tovar[$n]) {

                    if ($_POST['action'] == "delete_tovar") { //Удаление позиции   СОБСТВЕННО ВОТ ЗДЕСЬ И ПРОБЛЕМА---)))) ВНИЗУ ВОПРОС!!!!--++_)
                        if ($_SESSION['cart']['tov'][$i] == $_POST['tovar_delete']) {
                            unset($_SESSION['cart']['tov'][$i]);
                            unset($_SESSION['cart']['pr'][$i]);
                        }
                    }
                $tovar_v = $_SESSION['cart']['tov'][$i];
                

                $result_products = mysql_query("SELECT `name` FROM `products` WHERE `id`='$tovar_v'", $db);
                $row_products = mysql_fetch_array($result_products);
                if (!empty($tovar_v)) {
                    echo "
                        <tr>
                            <td align='left'>&nbsp;&nbsp;".$row_products['name']."</td>
                            <td align='right'>".$_SESSION['cart']['pr'][$i]."&nbsp;рублей</td>
                            <td id='cart_delete' align='center'"; ?> onclick="javascript: tovar_delete('<?php echo $tovar_v; ?>', 'enter_cart', 'delete_tovar')" <?php echo ">Удалить</td>
                        </tr>
                    ";
                }
            $summa = $summa + $_SESSION['cart']['pr'][$i];
            $i++;
            }
            
        $_SESSION['summa'] = $summa;
        ?>
            </tbody>
            <tfoot>
            <tr>
                <td colspan="3" align="center"><?php if ($_SESSION['summa'] == 0) {echo "Корзина пуста!";} ?></td>
            </tr>
            <tr>
                <td colspan="3" id="total_summa">Общая сумма:&nbsp;&nbsp;&nbsp;<?php echo $_SESSION['summa']; ?> &nbsp;рублей</td>
            </tr>
            </tfoot>
        </table>
    <center>
        <table cellpadding="0px" cellspacing="0px" border="0px" id="cart_buttons" width="160px" align="center">
            <tr>
                <td id="zakaz">
                </td>
            </tr>
        </table>
    </center>
    </div>
        <?php
        
    }
    
?>


<script type="text/javascript" language="javascript">
$('#zakaz').click(function(){ //entering cart
    $('#content').fadeOut(0);
    $('#content').fadeIn(200);
    $.ajax({
        url:'_page/index_zakaz.php',
        type:'POST',
        data:'page=index',
        dataType:'html',
        success:function(html){
            $('#content').html(html);
            
        }
    });
});
    //delete_tovar
    function tovar_delete(id_tovar, action, view){ 
        $.ajax({
            url:'cart_user.php',
            type:'POST',
            data:({tovar_delete:id_tovar, process:action, action:view}),
            dataType:'html',
            success:function(html){
                $('#content').html(html);
            }
        });
    };
    //end_delete_tovar

</script>

Скрипт собственного производства сильно не пинайте, просто кто знает подскажите где ошибка!??? Буду Оооочень признателен.
Вот короче если в списке товаров есть одинаковые товары, то при удалении одной позиции, он удаляет все одинаковые позиции. Что только я уже не пробывал, может просто туплю. Подскажите плиззззз где ошибка? Кто поможет полтос на мобилу пришлю (P.S. Которые поддерживает webmoney.)


P.P.S. Можно посмотреть в реале taibai.ru добавьте несколько одинаковых товаров, а потом в корзине попробуйте удалить.

DooMer 24.01.2011 18:31

Хм, а как нам узнать что из мебя представляет массив $_SESSION ?

Сделайте print_r($_SESSION) и покажите нам. Естественно наберите в корзину одинаковых позиций

Saimon7887 24.01.2011 19:33

Выполнил
Цитата:

Array ( [cart] => Array ( [tov] => Array ( [0] => 2105 [1] => 2951 [2] => 2951 [3] => 2914 [4] => 2914 [5] => 2915
[6] => 2916 [7] => 2003 ) [pr] => Array ( [0] => 150 [1] => 239 [2] => 239 [3] => 170 [4] => 170 [5] => 210 [6] => 260 [7] => 40 ) ) [summa] => 1478 )
А вот таким макаром добавляю
if (isset($_POST['tovar_select'])) {$_SESSION['cart']['tov'][] = $_POST['tovar_select'];} //выбранный товар
if (isset($_POST['tovar_price'])) {$_SESSION['cart']['pr'][] = $_POST['tovar_price'];} //цена товара

DooMer 26.01.2011 17:32

if ($_POST['action'] == "delete_tovar") { //Удаление позиции   СОБСТВЕННО ВОТ ЗДЕСЬ И ПРОБЛЕМА---)))) ВНИЗУ ВОПРОС!!!!--++_)
		$zzz = array_search($_POST['tovar_delete'],$_SESSION['cart']['tov'])
		if ($zzz!==false) {
			unset($_SESSION['cart']['tov'][$zzz]);
			unset($_SESSION['cart']['pr'][$zzz]);
		}
	}

Только вынесите этот блок кода за цикл(вверх)

Saimon7887 26.01.2011 23:06

<?php $head = "no_header"; require_once('_inc/bd.php');
    if (isset($_POST['process'])) {$process = $_POST['process'];}
    session_start();
    //Показ корзины
    if ($process == "enter_cart") {
        ?><div id="cont">
        <table cellpadding="2px" cellspacing="5px" border="0px">
            <thead>
            <tr>
                <td align="center" width="400px">Наименование</td>
                <td align="center" width="150px">Цена</td>
                <td align="center" width="150px">Удалить</td>
            </tr>
            </thead>
            <tbody>
            <?php
            
            $i = 0;
if ($_POST['action'] == "delete_tovar") { //Удаление позиции   СОБСТВЕННО ВОТ ЗДЕСЬ И ПРОБЛЕМА---)))) ВНИЗУ ВОПРОС!!!!--++_)
		$zzz = array_search($_POST['tovar_delete'],$_SESSION['cart']['tov']);
		if ($zzz !== false) {
			unset($_SESSION['cart']['tov'][$zzz]);
			unset($_SESSION['cart']['pr'][$zzz]);
		}
	}
    echo $zzz;
            
            foreach ($_SESSION['cart']['tov'] as $n => $tovar[$n]) {

                    /*if ($_POST['action'] == "delete_tovar") {
                        if (($_SESSION['cart']['tov'][$i] == $_POST['tovar_delete'])) {
                            unset($_SESSION['cart']['tov'][$i]);
                            unset($_SESSION['cart']['pr'][$i]);
                            
                        }
                    }*/
                $tovar_v = $_SESSION['cart']['tov'][$i];


                $result_products = mysql_query("SELECT `name` FROM `products` WHERE `id`='$tovar_v'", $db);
                $row_products = mysql_fetch_array($result_products);
                if (!empty($tovar_v)) {
                    echo "
                        <tr>
                            <td align='left'>&nbsp;&nbsp;".$row_products['name']."</td>
                            <td align='right'>".$_SESSION['cart']['pr'][$i]."&nbsp;рублей</td>
                            <td id='cart_delete' align='center'"; ?> onclick="javascript: tovar_delete('<?php echo $tovar_v; ?>', 'enter_cart', 'delete_tovar')" <?php echo ">Удалить</td>
                        </tr>
                    ";
                }
            $summa = $summa + $_SESSION['cart']['pr'][$i];
            $i++;
            }
        $_SESSION['summa'] = $summa;
        ?>
            </tbody>
            <tfoot>
            <tr>
                <td colspan="3" align="center"><?php if ($_SESSION['summa'] == 0) {echo "Корзина пуста!";} ?></td>
            </tr>
            <tr>
                <td colspan="3" id="total_summa">Общая сумма:&nbsp;&nbsp;&nbsp;<?php echo $_SESSION['summa']; ?> &nbsp;рублей</td>
            </tr>
            </tfoot>
        </table>
    <center>
        <table cellpadding="0px" cellspacing="0px" border="0px" id="cart_buttons" width="160px" align="center">
            <tr>
                <td id="zakaz">
                </td>
            </tr>
        </table>
    </center>
    </div>
        <?php
        /*$tt = 0;
        while ($tt !== count($_SESSION['cart']['tov'])) {
            echo "tov = ".$_SESSION['cart']['tov'][$tt]."  pr = ".$_SESSION['cart']['pr'][$tt]."<br />";
            $tt++;
        }*/
        print_r($_SESSION);
    }
    
?>


<script type="text/javascript" language="javascript">
$('#zakaz').click(function(){ //entering cart
    $('#content').fadeOut(0);
    $('#content').fadeIn(200);
    $.ajax({
        url:'_page/index_zakaz.php',
        type:'POST',
        data:'page=index',
        dataType:'html',
        success:function(html){
            $('#content').html(html);
            
        }
    });
});
    //delete_tovar
    function tovar_delete(id_tovar, action, view){ 
        $.ajax({
            url:'cart_user.php',
            type:'POST',
            data:({tovar_delete:id_tovar, process:action, action:view}),
            dataType:'html',
            success:function(html){
                $('#content').html(html);
            }
        });
    };
    //end_delete_tovar

</script>

И такая конструкция не работает, и чтото непонятное написано по этой ссылке
Мой скрипт работает только на половину, он удалять удаляет, только не могу счетчик "лимита удалений" пробывал и так и сяк, может ты попробуешь в эту сторону капнуть, есть идеи?

DooMer 27.01.2011 13:26

Saimon7887,
Не понимаю зачем счетчик ? Удаляется то 1 товар ?? значит счетчик будет или 0 или 1. Просто не люблю вычитывать кучу кона не относящегося к тебе.
Если надо от суммы отнять то...
unset($_SESSION['cart']['tov'][$zzz]);
$_SESSION['summa']-=$_SESSION['cart']['pr'][$zzz];
unset($_SESSION['cart']['pr'][$zzz]);

Цитата:

и чтото непонятное написано по этой ссылке
ну даже с моими, ниже школьных, познаниями в английском я не понимаю чего там не понятно

Saimon7887 28.01.2011 09:41

Цитата:

Сообщение от DooMer (Сообщение 89967)
Saimon7887,
Не понимаю зачем счетчик ? Удаляется то 1 товар ?? значит счетчик будет или 0 или 1. Просто не люблю вычитывать кучу кона не относящегося к тебе.
Если надо от суммы отнять то...
unset($_SESSION['cart']['tov'][$zzz]);
$_SESSION['summa']-=$_SESSION['cart']['pr'][$zzz];
unset($_SESSION['cart']['pr'][$zzz]);


ну даже с моими, ниже школьных, познаниями в английском я не понимаю чего там не понятно

Да блин я только рад бы но увы не работает твой способ, все равно удаляет по две а то и по три, и переменная $zzz выдает странные значения то 0 то 1 то 2 то 3 хотя нажимаю на позиции и индексом 11 13 и тд. Почему!

Saimon7887 09.02.2011 14:14

Ребят, срочно присрочно нужно решение проблемы. Кто поможет реально в решении, посути тут просто где то мышь зарылась, просто не могу понять где, и уже не знаю что делать.
Сотку на трубу закину, помогите плииззз!!!

Вариант DooMer`a не работает, если что!

Saimon7887 10.02.2011 08:58

Всем спасибо если что-)))) Сам решил-)! Тему в топку


Часовой пояс GMT +3, время: 05:25.