我正在尝试使用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']);
}
?>
答案 0 :(得分:2)
改变这个:
'<a href=' . $_SERVER['REQUEST_URI'] .'&idToRemove=' . $id . '&action=remove> Remove </a>'
进入这个:
'<a href="?idToRemove=' . $id . '&action=remove"> Remove </a>'
因为$_SERVER['REQUEST_URI']
已包含网址中当前存在的所有参数。
这将创建一个仅包含idToRemove
和action
参数的空白网址(指向当前页面)。
(并添加双引号,以使网址完全包含在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'];
}
}
}