从购物篮PHP中删除一个项目

时间:2016-02-18 11:23:17

标签: php mysql

我正在尝试使用PHP创建一个购物篮,我可以添加项目,清除整个篮子但是当我试图从篮子中删除一个项目时我被卡住了。我尝试将GET变量发送到URL中,然后根据它的ID减少指定项目的数量。虽然目前它似乎无法工作,但如果我多次点击URL会变得很大并且GET变量会不断添加到最后而不是更改整个URL。

这是我的PHP

    <?php if(isset($_SESSION["cart"])) {
            foreach ($_SESSION["cart"] as $id => $value) {
               $ids .= $id . ',';

               $count += $value['quantity'];

               $totalPrice += $value['price'];

            } 

             $query = $database->find_item_db($ids);

            foreach ($query as $single_query) {
                $id = $single_query['Sweet_ID'];
            echo $single_query['Description']; ?> x <?php echo $_SESSION['cart'][$id]['quantity'] . '<a href=' . $_SERVER['REQUEST_URI'] .'&idToRemove=' . $id . '&action=remove> Remove </a>' . '</br>';
            } ?>

        <h3>Currently <?php echo $count; ?> Items in the basket</h3>
        <h4> Total Price £<?php echo $totalPrice; ?> </h4>

        <?php
          } else {
            echo "Your cart is empty";
          }
    ?> 


<?php
session_start();

if ($_GET['action'] == "add") {

    $idNumber=intval($_GET['id']); 

    if (isset($_SESSION['cart'][$idNumber])) {

        $_SESSION['cart'][$idNumber]['quantity']++;

    } else {
        $sql = $database->display_single($idNumber);

        $second_id = $sql[0]['Sweet_ID'];
        $price = $sql[0]['Price'];

        $_SESSION['cart'][$second_id]=array(
                "quantity" => 1,
                "price"   => $price
        );
    }

} else if ($GET['action'] == 'remove') {

    $idNumber=intval($_GET['idToRemove']); 

    $_SESSION['cart'][$idNumber]['quantity']--;

}  else if ($_GET['action'] == 'clear') {
    unset($_SESSION['cart']);
}

?>

3 个答案:

答案 0 :(得分:2)

改变这个:

'<a href=' . $_SERVER['REQUEST_URI'] .'&idToRemove=' . $id . '&action=remove> Remove </a>'

进入这个:

'<a href="?idToRemove=' . $id . '&action=remove"> Remove </a>'

因为$_SERVER['REQUEST_URI']已包含网址中当前存在的所有参数。 这将创建一个仅包含idToRemoveaction参数的空白网址(指向当前页面)。

(并添加双引号,以使网址完全包含在href属性中)

答案 1 :(得分:0)

问题来自您的HTML代码。 我认为你的PHP中有这样的东西:

<form action="<?php echo $_SERVER['PHP_SELF'].'?'.$_SERVER['QUERY_STRING']?>"

当你总是(重新)调用相同的HTML表单时,之前发布的GET vars一次又一次地发布....

答案 2 :(得分:0)

我根据您可以使用的会话编写了一个篮子课程,任何问题请问我

class basket {
function add($pid,$qty){


if(!isset($_SESSION['basket'])){
$_SESSION['basket']=array();
$_SESSION['basket'][0]['productid']=$pid;
$_SESSION['basket'][0]['qty']=$qty;
echo 'The product was successfully added';
}

else {

if($this->isexist($pid,$qty)){
echo 'The quantity was successfully updated';
}
else{
$m=$_SESSION['basket'];
$max=count($m);
$_SESSION['basket'][$max]['productid']=$pid;
$_SESSION['basket'][$max]['qty']=$qty;
echo 'The product was successfully added';
}
}

}

function isexist($pid,$qty) {
$m=$_SESSION['basket'];
$max=count($m);
for($i=0;$i<$max;$i++){
if($pid==$_SESSION['basket'][$i]['productid']){
$_SESSION['basket'][$i]['qty']=$qty;
return true;break;}
}
return false;}

function delete($pid){
$m=$_SESSION['basket'];
$max=count($m);
for($i=0;$i<$max;$i++){
if($pid==$_SESSION['basket'][$i]['productid']){
unset($_SESSION['basket'][$i]);
$_SESSION['basket']=array_values($_SESSION['basket']);
$_SESSION['basket'.'num']-=1;echo 'The product was successfully delete';
break;}
}
}


function modify($pid,$qty){
$m=$_SESSION['basket'];
$max=count($m);
if($qty>0){
for($i=0;$i<$max;$i++){
if($pid==$_SESSION['basket'][$i]['productid']){
$_SESSION['basket'][$i]['qty']=$qty;break;}
}
}
else $this->delete($pid);


}

function show_basket() {

$max=count($_SESSION['basket']);
for($i=0;$i<$max;$i++){
echo 'id=>'.$_SESSION['basket'][$i]['productid'].'qty=>'.$_SESSION['basket'][$i]['qty'];
}
}

}