2013-05-15 3 views
0

У меня есть набор элементов, хранящихся в сеансовой тележке. Он заселен в таблице. каждая строка имеет индекс и кнопку, чтобы удалить этот конкретный элемент (элементы массива) от $ _SESSION [ «телега»] ..Удалить массив элементов из сеанса Корзина

Это код, у меня есть на данный момент:

$i = 0; 
foreach($_SESSION['cart'] as $item) 
{ 
    //Populate items in a table ?> 
<tr> 
<td><center><?php echo $i; ?></center></td> 
<td><center><?php echo $item['item'];?></center></td> 
<td><center><?php echo '£'. $item['unitprice'];?></center></td> 
<td><center><?php echo $item['quantity'];?></center></td> 
    <td><center><?php echo '£'.($item['unitprice'] * $item['quantity']) ?></center></td> 
<td><input type="submit" value="Remove" Onclick = unset($_SESSION['cart'][$i]); ></td> 
</tr> 
<?php 
$total += ($item['unitprice'] * $item['quantity']); 
$i++; 
} 

Все I хотите сделать, это удалить одну строку данных (каждая строка содержит индекс, элемент, цену товара, общее количество (если есть несколько элементов) и кнопка удаления) из сеансовой тележки. Заранее спасибо.

ответ

0

Неверный вариант, но PHP выполняется на стороне серверов. Так как это действие клиента, вам нужно будет использовать JavaScript для того, чтобы поднять действие. (вы также можете использовать старую форму fasion). Я предпочитаю использовать jQuery, поскольку он hasready имеет встроенную поддержку ajax и упрощает ее. В принципе, просто вызовите функцию из onClick, которая передает «идентификатор» элемента, который вы хотите удалить. Затем эта функция вызовет вызов AJAX другому скрипту, который примет этот идентификатор и удалит элемент. Когда этот скрипт вернется к успеху, удалите JavaScript (или скройте) элемент. Таким образом, пользователь никогда не покидает или обновляет страницу, и сценарий может сделать некоторые дополнительные очистки (например, обновление базы данных, обновление сеанса, проверками запроса и т.д.)

i = 0; 
foreach($_SESSION['cart'] as $item) 
{ 
    //Populate items in a table ?> 
<tr> 
<td><center><?php echo $i; ?></center></td> 
<td><center><?php echo $item['item'];?></center></td> 
<td><center><?php echo '£'. $item['unitprice'];?></center></td> 
<td><center><?php echo $item['quantity'];?></center></td> 
    <td><center><?php echo '£'.($item['unitprice'] * $item['quantity']) ?></center></td> 
<td><input type="submit" value="Remove" onClick="RemoveItem(<?= $i ?>)" ></td> 
</tr> 
<?php 
$total += ($item['unitprice'] * $item['quantity']); 
$i++; 
} 

Здесь я изменил раздел OnClick для использования вместо этого используется javascript-вызов. Вы заметите, что я использовал <?= tag вместо полного <?php echo. Это связано с тем, что с php5 вы можете использовать стенографию <?= для эхо-выражения.

В разделе сценария вы можете сделать что-то подобное. Я использую POST, поскольку он более безопасен.

function RemoveItem(id) { 
    $.post('script-to-remove.php', 
     { ItemID: id }, 
     function(data) { 
     if(data==='success') { 
      //Remove item from DOM 
     } else alert("There was an error!"); //If you want error handling 
     } 
    ); 
} 

Для удаления элементов из РОМА, его немного сложнее с таблицами, так как ни один из крутых эффектов будут действительно работать, такие как FADEOUT, slideUp, анимировать, и т.д. Я хотел бы посмотреть на переформатирование с дивами.

Что касается скрипта php, который он вызывает, его так же просто, как вызов unset. Вы можете разработать его больше, чтобы, возможно, проверить правильность запроса, но пока я просто собираюсь сделать это незавершенным.

<?php 
$ItemID = isset($_POST['ItemID'])?intval($_POST['ItemID']):-1; 
if($ItemID<0) die("Invalid ID"); //Change this if you want 
if(isset($_SESSION['cart'][$ItemID])) unset($_SESSION['cart'][$ItemID]); 
echo 'success'; 
?> 

В основном в этом, я сначала проверить, что правильный параметр пришел, убедитесь, что это целое число и сохранить его, в противном случае я по умолчанию это значение -1. Тогда, если Item ID находится под 0 (так определенно неправильно), я говорю сценарию, чтобы вывести сообщение и выйти. Наконец, я проверяю, есть ли значение для этого идентификатора или индекса, как оно есть на самом деле, и отключите его. Если это дойдет до конца, выведите успех.

+0

Эй! Спасибо за быстрый ответ ..., но, честно говоря, я никогда не пробовал AJAX или jQuery, поэтому я не думаю, что у меня возникла идея ... Извините, я не очень опытный, я нооб))) –

+0

Я обновил его немного, чтобы помочь вам, некоторые дополнительные чтения можно сделать с помощью Google. Если вы действительно не хотите погружаться в AJAX (но вы должны), вы также можете использовать форму, которая подходит к сценарию unset. Но вам нужно пройти по идентификатору должным образом. В противном случае, вот некоторые чтения. http://phpcodeforbeginner.blogspot.com/2013/01/jquery-ajax-tutorial-and-example-of.html http://net.tutsplus.com/articles/web-roundups/jquery-for- absolute-beginners-video-series/ – CP510

+0

Это замечательно, спасибо большое! Эта функция RemoveItem .. это php-функция? –

Смежные вопросы