2015-11-21 2 views
0

Я почти сделал создание корзины покупок, но я не уверен, как удалить элементы из корзины покупок. Я использую массивы, которые хранятся внутри сеанса. Поэтому я хотел бы удалить выбранные элементы в массиве (используя флажок, который я добавил).unset значение массива и ключ в сеансе

products.php

cat<a href ="Adding-to-cart.php?id=2222"> add to cart<a/><br> 
dog<a href ="Adding-to-cart?id=1111"> add to cart<a/><br> 
bird<a href ="Adding-to-cart?id=5555"> add to cart<a/><br> 

Добавление в корзину

code 
    <?php 
session_start(); 
if(empty($_SESSION['animals'])) 
    { 
    $_SESSION['animals'] = array(); 
    } 

$_SESSION['animals']["".$_GET['id'].""] = 1; 


?> 

cart.php

<?php 
////////////////////////////////////////////// 
$con = mysql_connect("localhost","root",""); 
mysql_select_db("items",$con); 
////////////////////////////////////////////// 
session_start(); 

// create an array 
$my_array=array(); 


// put the array in a session variable 
if(!isset($_SESSION['animals'])) 
    $_SESSION['animals']=$my_array; 

// move submit code outside of foreach loop 
if (isset($_POST["submit"])) 
{ 
for ($i = 0; $i < count($_POST['aaa']); $i++) { 
    $aaa = $_POST['aaa'][$i]; 
    $key_var = $_POST['ke'][$i]; 

    // setting the session spesific session array value different for each key 
    $_SESSION['animals'][$key_var] = $aaa; 
} 

////removing checked item from shopping cart  
if (isset($_POST['brosrs'])) { 

/////////////Things that I have tried///////////// 
////unset($_SESSION['animals'][$key_var]);/////// 

//unset($_SESSION['animals'][$to_unset]); 

} 
////removing checked item from shopping cart///// 
//////////////////////////////////////////////// 
} 
?> 

<table > 
<tr > 
<td ><b>ID</b></td> 
<td ><b>Name</b></td>  
<td ><b>Price</b></td> 
<td ><b>Subtotal</b></td> 
<td ><b>Product ID is</b></td> 
<td ><b>Quantity</b></td> 
</tr> 

<form method="post" action=""> 
<?php 
//// declate the total price and start it as 0 coz its before the actual items added to cart 
$total_price=0; 
$subtotal = 0; 
// loop through the session array with foreach 
foreach($_SESSION['animals'] as $key=>$value) 
{ 

////////////////////////////DUMPING EVERYTHING FROM DATABASE//////////////////////////////////////////////// 

    $key_array = array_keys($_SESSION['animals']); 

// Get record where $key exists. 
$sql = "SELECT id, name, price FROM products WHERE id IN ({$key}) ORDER BY name"; 
$myData = mysql_query($sql,$con); 

// Loop through each record and see if $key_array is present in $row['id'] db 
while($row = mysql_fetch_array($myData)){ 
if(in_array($row['id'], $key_array)){ 
    // display records 

    echo "<tr>"; 
    echo "<td >". $row['id']. "</td>"; 
    echo "<td class='name'>".$row['name']. "</td>"; 
    echo "<td class='qtyid'>". $row['price']. "</td>"; 
    echo "<br/>"; 
    $quantity_calc = $value; 
    $subtotal = $value * $row['price']; 
    $price = $row['price']; 

    echo "<td>" . $subtotal . "</td>"; 
      } 
      $total_price += $subtotal; 

} 

////////////////////////////DUMPING EVERYTHING FROM DATABASE//////////////////////////////////////////////// 

    // and print out the values quantity 

    echo " <td> Product ID is " .$key. " Quantity is </td>"; 

    // getting the updated value from input box 
    ?> 
     <!-- <td ><input type="text" name="aaa[]" value="<?php echo $value ; ?>" size="2" /></td> --> 
     <td> <input id="numberinputsize" type="number" size="1" name="aaa[]" min="1" max="10" value="<?php echo $value ; ?>" > </td> 
     <!-- take a hidden input with value of key --> 
     <td ><input type="hidden" name="ke[]" value="<?php echo $key; ?>"><br></td> 

     <!------------------------adding a remove item checkbox ------------------------------> 
     <!------------------------adding a remove item checkbox ------------------------------> 
     <td> <input type ="checkbox" name="brosrs" value = "<?php echo $key; ?>"><?php echo $key; ?></input> </td> 
     <!------------------------adding a remove item checkbox ------------------------------> 
     <!------------------------adding a remove item checkbox ------------------------------> 
    <?php 

echo "</tr>"; 

} 

?> 

<tr> 
<td>Total amount $<?php Echo $total_price; ?></td> 
<td><a href="products-legit.php">back to shopping</a></td> 
<td> <input class="inputbox" type="submit" value="Update value of key" name="submit"/></td> 
</tr> 
</table> 
</form> 

<style> 
table { 
width:1000px; 
} 
</style> 

СПАСИБО!

ОБНОВЛЕНИЕ! Извините, но для того, чтобы это было понятно, у меня есть страница с продуктами, в которой я добавляю id в массив как ключ, который хранится в сеансе. После нажатия кнопки «Добавить в корзину» пользователь перенаправляется на страницу «Добавить в корзину», где массив вставлен в сеанс. Затем, когда вы отправляетесь на тележку, вы можете видеть предметы. Проблема в том, что >>>, когда у меня есть 2 предмета или больше в корзине, и удалите первый элемент, последний элемент в корзине удаляет вместо него.

+0

Итак, где проблема? Просто * unset * элемент массива с элементом, который вам больше не нужен. – Rizier123

+0

Просто используйте 'unset'. Если вы хотите уничтожить все сеансы, проверьте эти два метода: http://php.net/manual/en/function.session-unset.php и http://php.net/manual/en/function.session-destroy. php – sinaza

+0

hi jackie утром ваш вопрос был удален в то время, когда я сделал демонстрационную страницу, чтобы показать вам, как решить вашу проблему, вот ваш подход к решению, который вы можете использовать по своему усмотрению по своему усмотрению .. см. мой ответ и выберите его как ответ если поможет .. HappyCoding .. !! – PRANAV

ответ

0

это демо, как иметь представление о том, что нужно изменить реализацию в пути

cart.php

<?php 

ob_start(); 
session_start(); 
$_SESSION['data']=array('Cat','dog','bird'); 
//echo "<pre>"; print_r($_SESSION['data']);exit; 
?> 
<html> 
<head> 
<script src="jquery.js"></script> 
<script> 
$(document).ready(function(){ 
    $("#remove").on('click',function(){ 
     var toRemove=$('#toRemove').val(); 
     $.ajax('goToRemove.php',{ 
      data:{"toRemove":toRemove} 
     }); 


    }); 
}); 
</script> 
</head> 
<body> 
<form name="add" id="frmAdd" method="post" action="add.php?action=add" enctype="multipart/form-data"> 
<input type="text" name="toRemove" value="" id="toRemove"/> 
<input type="button" name="add" id="remove" value="ADD"> 
</form> 

</body> 
</html> 

goToRemove.php

<?php 
ob_start(); 
session_start(); 
echo "<pre>"; print_r($_SESSION['data']); 
$to_delete=array_search($_REQUEST['toRemove'], $_SESSION['data']); 
unset($_SESSION['data'][$to_delete]); 
echo "<pre>";print_r($_SESSION); 
?> 
+0

Спасибо за ваши усилия PRANAV, но как я это точно реализовать с моим кодом? – Jakie

+0

мужчина, я видел вас со стоимостью моей репутации -1, теперь вы должны реализовать то же самое в своем коде. – PRANAV

+0

сначала укажите идентификатор кнопки, который позволяет пользователю удалять по этой кнопке щелчок 1) получить имя элемента, которое он хочет удалить, и 2) вызвать ajax для отмены заданного имени с сеанса – PRANAV

0

Im предполагая, что ваша корзина многомерный массив, так как вы не указали пример своих данных. Самый простой способ найти и удалить элемент из корзины, чтобы объединить array_search() с array_column();

$cart = array(
 
    array('id'=>1,'name'=>'Awesome sauce'), 
 
    array('id'=>2,'name'=>'Not so awesome sauce'), 
 
    array('id'=>3,'name'=>'Really awesome sauce'), 
 
); 
 

 
//search $cart array for the value of 2 in the id key of the array and unset it. 
 
unset($cart[array_search(2, array_column($cart, 'id'))]); 
 

 
print_r($cart); 
 

 
/* 
 
OUTPUT: 
 

 
Array ([0] => Array ([id] => 1 [name] => Awesome sauce) [2] => Array ([id] => 3 [name] => Really awesome sauce)) 
 

 
*/ 
 

 
/*******Indexed array****************/ 
 
$cart = array('2222' => 1 ,'1111' => 1 ,'6666' => 1 ,'5555' => 1); 
 
unset($cart['2222']); 
 
print_r($cart); 
 

 
/* 
 
OUTPUT: 
 
Array ([1111] => 1 [6666] => 1 [5555] => 1) 
 
*/

+0

Я загрузил полный код, и да, я использую многодисковый массив :). но моя проблема заключается в том, что, когда вы используете отмену вне цикла и отмечаете одно поле и удаляете элемент, он удаляет только последний элемент в корзине, а не выбранный. – Jakie

+0

@ Jakie, пожалуйста, разместите дамп вашего массива, т.е. print_r ($ массив); Поэтому я могу видеть формат – kurt

+0

Array ([2222] => 1 [1111] => 1 [6666] => 1 [5555] => 1), если я хочу удалить 222, который является первым предметом в корзине, он будет удалить последний из них 555 – Jakie

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