我正在尝试编写一个页面,其中包含以下内容:
产品类别,在该类别的产品类别中的唯一项目,以及用户可以选择" X"每个类别中所述独特项目的数量。
在购物车中选择时格式如下:
Item Category
Each unique id of said Category
Qty of Category Ordered
这就是我定义每件作品的方式。
$product_name = $_POST["product_name"]
- 类别
$product_id = $_POST["product_id"];
- 类别中每个项目的唯一标识符。
$product_qty = $_POST["product_qty"]
- 所选数量
$ product_id是一个字符串。我们假设我有2,4,6,8的唯一ID,因此当选择1的数量时,只选择ID 2。如果选择数量4,则选择ID 2,4,6,8。因此,我使用explode将字符串转换为数组,以便字符串中的每个ID都是唯一的。
$product_ids = explode(',', $product_id);
所以我的所有值都被表示出来,我可以从主页面成功获取它们。但我无法弄清楚如何使购物车本身正常运作。添加到购物车后,类别本身应保持静态,除非将其从购物车中删除 - 只有类别中的唯一ID才会更改。如果用户选择数量2,但随后决定选择数量4,我需要购物车在一个类别下添加或减去适当的ID而不添加新类别。应该添加新类别的唯一情况是用户从另一个类别中选择数量。有谁知道我怎么能完成我想要做的事情?
编辑:让我粘贴购物车代码,但要对我温和,因为这是我第一次尝试这个。这就是我试图做的事情,但它并没有像我想要的那样工作。请注意,我定义了很多变量,因为我测试了很多选项。我不一定非常需要它们。`<?php
session_start();
include_once("config.php");
//empty cart by distroying current session
if(isset($_GET["emptycart"]) && $_GET["emptycart"]==1) {
$return_url = base64_decode($_GET["return_url"]); //return url
session_destroy();
header('Location:'.$return_url);
}
//add item in cart
if(isset($_POST["type"]) && $_POST["type"]=='add') {
$product_name = $_POST["product_name"];
$product_qty = $_POST["product_qty"];
$return_url = base64_decode($_POST["return_url"]); //return url
$product_id = $_POST["product_id"];
$product_ids = explode(',', $product_id);
$product_select = implode(',', array_slice($product_ids, 0, $product_qty));
$product_final = explode(',', $product_select);
foreach ($product_final as $id) {
$results = $mysqli->query("SELECT * FROM products WHERE id = '$id'");
}
$obj = $results->fetch_object();
if ($results) {
$new_product = array(array('name'=>$product_name, 'code'=>$id, 'qty'=>$product_qty));
if(isset($_SESSION["products"])) {
$found = false;
foreach ($_SESSION["products"] as $cart_itm) {
if ($cart_itm["code"] == $id) {
$product[] = array('name'=>$cart_itm["name"], 'code'=>$cart_itm["code"], 'qty'=>$product_qty);
$found = true;
}
else {
$product[] = array('name'=>$cart_itm["name"], 'code'=>$cart_itm["code"], 'qty'=>$cart_itm["qty"]);
}
}
if($found == false) {
$_SESSION["products"] = array_merge($product, $new_product);
}
else {
$_SESSION["products"] = $product;
}
}
else {
$_SESSION["products"] = $new_product;
}
}
header('Location:'.$return_url);
}
if(isset($_GET["removep"]) && isset($_GET["return_url"]) && isset($_SESSION["products"])) {
$id = $_GET["removep"];
$return_url = base64_decode($_GET["return_url"]);
foreach ($_SESSION["products"] as $cart_itm) {
if($cart_itm["code"]!=$id) {
$product[] = array('name'=>$cart_itm["name"], 'code'=>$cart_itm["code"], 'qty'=>$cart_itm["qty"]);
}
$_SESSION["products"] = $product;
}
header('Location:'.$return_url);
}
?>`
另一个编辑:
我从新定义的数组中取出$ product_select字符串的版本。购物车按照我现在想要的方式运行,但是......如何将$ product_select字符串传递到下一页?
`<?php
session_start();
include_once("config.php");
//empty cart by distroying current session
if(isset($_GET["emptycart"]) && $_GET["emptycart"]==1) {
$return_url = base64_decode($_GET["return_url"]); //return url
session_destroy();
header('Location:'.$return_url);
}
//add item in cart
if(isset($_POST["type"]) && $_POST["type"]=='add') {
$product_name = $_POST["product_name"];
$product_qty = $_POST["product_qty"];
$return_url = base64_decode($_POST["return_url"]); //return url
$product_id = $_POST["product_id"];
$product_ids = explode(',', $product_id);
$product_select = implode(',', array_slice($product_ids, 0, $product_qty));
$results = $mysqli->query("SELECT * FROM products WHERE id = '$product_select'");
if ($results) {
$new_product = array(array('name'=>$product_name, 'qty'=>$product_qty));
if(isset($_SESSION["products"])) {
$found = false;
foreach ($_SESSION["products"] as $cart_itm) {
if ($cart_itm["name"] == $product_name) {
$product[] = array('name'=>$cart_itm["name"], 'qty'=>$product_qty);
$found = true;
}
else {
$product[] = array('name'=>$cart_itm["name"], 'qty'=>$cart_itm["qty"]);
}
}
if($found == false) {
$_SESSION["products"] = array_merge($product, $new_product);
}
else {
$_SESSION["products"] = $product;
}
}
else {
$_SESSION["products"] = $new_product;
}
}
header('Location:'.$return_url);
}
if(isset($_GET["removep"]) && isset($_GET["return_url"]) && isset($_SESSION["products"])) {
$product_name = $_GET["removep"];
$return_url = base64_decode($_GET["return_url"]);
foreach ($_SESSION["products"] as $cart_itm) {
if($cart_itm["name"]!=$product_name) {
$product[] = array('name'=>$cart_itm["name"], 'qty'=>$cart_itm["qty"]);
}
$_SESSION["products"] = $product;
}
header('Location:'.$return_url);
}
?>`
答案 0 :(得分:0)
$product_name = $_POST["product_name"];
$product_id = $_POST["product_id"];
// let's say "2,4,6,8"
$product_qty = $_POST["product_qty"];
// let's say 3
$product_ids = explode(',', $product_id);
$ product_ids现在应该是:
array(
[0] => 2
[1] => 4
[2] => 6
[3] => 8
)
从结果数组中取一个切片:
$grab_ids = array_slice( $product_ids, 0, $product_qty );
// starting with index 0 take $product_qty
$ grab_ids现在应该是
array(
[0] => 2
[1] => 4
[2] => 6
)
第一个参数是数组,第二个参数是要开始的键索引(0-3),第三个参数是要使用的数量(1-4)。
您可以执行其他操作:
echo implode( ',', $grab_ids );
// would output as: 2,4,6
答案 1 :(得分:0)
我终于弄明白了。所以我甚至不需要传递唯一的ID。相反,我从等式中删除了product_id,在我的最终结果中,根据项目的数量使用LIMIT。由于数量是一个字符串,我将字符串转换为int,这允许我在我的查询中使用数量作为变量。这给了我需要的结果。谢谢大家的帮助!