为了显示相关产品,我通过 GET 方法选择了值,在这种情况下,值是产品的 id。
它通过查询获得数据,本例中的示例是产品具有的颜色。
$sql = "SELECT * FROM colors WHERE product_id='$id'";
现在,在购物车中,我想显示一个部分,表明您可能也对这些产品感兴趣。
假设在名为 products 的数据库中,您有 6 个产品。
id | producto
------ | ------
1 | Cell
2 | Cell
3 | Cell
4 | Cell
5 | Cell
6 | Cell
在购物车中,我添加了带有id的产品 1,3,6
正如我在本节中展示的那样,除了已经添加到购物篮中的产品之外,您也可能对这些产品感兴趣。
我只用已经提到的例子这样的产品进行了测试。
在这种情况下,将如何考虑或查询将如何。
仅显示未添加到购物车的产品。
这是我的购物车card.php
//Carro de la compra
//Si esta definida la ID obtenido por URL
if (isset($_GET['articulo'])) {
$id_tutorial = $_GET['articulo'];//Obtenemos el ID del producto añadido, para poder acer comprobaciones a mostrar otros resultados.
//Si esta definido la sesion carro -> es decir si ay algun articulo comprado
if (isset($_SESSION['carrito'])) {
$arreglo = $_SESSION['carrito'];
$encontro = false;
for ($i=0; $i<count($arreglo); $i++) {
if ($arreglo[$i]['Id'] == $_GET['articulo']) {
$encontro = true;
}
}
if ($encontro == false) {
$titulo = "";
$precio = 0;
$precioUSD = 0;
$icon = "";
$stmt = $c->prepare("SELECT titulo,precio,icon,id_autor FROM products WHERE page=? and status=1");
$stmt->bind_param("i",$_GET['articulo']);
$stmt->execute();
$stmt->store_result();
if ($stmt->num_rows > 0) {
$stmt->bind_result($titulo,$precio,$icon,$id_autor);
while ($stmt->fetch()) {
//Sentencia prepare -> autor proyecto
$stmtN = $c->prepare("SELECT autor FROM autor WHERE id_autor=?");
$stmtN->bind_param("i", $id_autor);
$stmtN->execute();
$stmtN->bind_result($autor);
$stmtN->fetch();
$stmtN->close();
$datosnuevos = array('Id' => $_GET['articulo'], 'Titulo' => $titulo, 'Precio' => $precio, 'Icon' => $icon, 'Cantidad' => 1 );
/*
#Si se utiliza array_push() para añadir un solo elemento al array, es mejor utilizar $array[] = ya que de esta forma no existe la sobrecarga de llamar a una función.
*/
//array_push($arreglo, $datosnuevos);
$arreglo[] = $datosnuevos;
$_SESSION['carrito'] = $arreglo;
$data = $_SESSION['carrito'];
$value_carrito = count($data);
$_SESSION['compras'] = $value_carrito;
} $stmt->close();
} else {
$stmt->close();
}
}
} else { //Caso falso añadimos primer articulo al carro
$titulo = "";
$precio = 0;
$precioUSD = 0;
$icon = "";
$stmt = $c->prepare("SELECT titulo,precio,icon,id_autor FROM products WHERE page=? and status=1");
$stmt->bind_param("i",$_GET['articulo']);
$stmt->execute();
$stmt->store_result();
if ($stmt->num_rows > 0) {
$stmt->bind_result($titulo,$precio,$icon,$id_autor);
while ($stmt->fetch()) {
//Sentencia prepare -> autor proyecto
$stmtN = $c->prepare("SELECT autor FROM autor WHERE id_autor=?");
$stmtN->bind_param("i", $id_autor);
$stmtN->execute();
$stmtN->bind_result($autor);
$stmtN->fetch();
$stmtN->close();
} $stmt->close();
} else {
$stmt->close();
}
$arreglo[] = array('Id' => $_GET['articulo'], 'Titulo' => $titulo, 'Precio' => $precio, 'Icon' => $icon, 'Cantidad' => 1 );
$_SESSION['carrito'] = $arreglo;
$data = $_SESSION['carrito'];
$value_carrito = count($data);
$_SESSION['compras'] = $value_carrito;
//echo "<script>window.location.reload();</script>";
}
}
更新其他详细信息。
产品表。
id_product Producto Marca subcategoría
------------- ---------------- ---------- ------
1 Mini Parlantes 0 1
2 flash Memory 0 1
类别表。
id cat_name categoría
---- ---------- -----------
1 HP 0
2 accesorios 1
3 Samsung 0
结构:
<!-- language: lang-none -->
CREATE TABLE IF NOT EXISTS categories (
id int(100) NOT NULL,
cat_name text NOT NULL,
categoria int(5) NOT NULL
) ENGINE=InnoDB AUTO_INCREMENT=5 DEFAULT CHARSET=latin1;
- 生命值
- 配件
- 三星
- 配件
在 HP 类别中,我们展示了所有 HP 品牌产品,包括配件等。
在配件子类别中,我们仅展示以下产品:闪存、扬声器、耳机等。
注:附件以对应品牌为准。
现在它是不属于配件的产品,例如,笔记本电脑子类别而不是值 1 为 NULL,该产品只会在主类别 HP 中显示。
如果有另一个名为 lapto 的子类别,该产品将显示在该子类别中。
建议:页面的某个部分需要列出5个相关产品(来自同一类别)到那些已经添加到购物车的产品:
带有 prepare() 语句的示例
我也想留下一个例子,虽然它已经被评估和批准,但我没有看到任何人以创建问题的方式回答,因为我没有看到答案中的句子
prepare()
,以便更安全地工作并发送我们的参数由服务器分开。Que problema tenemos para enviar mediante
prepare()
, tenemos que asociar los parametros segun nuestra sentencia creado, en este caso tenemos el problema, que segun la compra tendremos mas parametros o menos parametros, como podemos solucionar esto, os dejo un código funcionado correctamente en mi web :)Este ejemplo dará una ventaja inicial sobre cómo construir la consulta
SELECT
:Supongamos
$_SESSION['carrito']
contiene los productos que ya han sido comprados por el cliente y$_SESSION[ 'compras']
mantiene el recuento del número total de productos adquiridos, la consultaSELECT
para recuperar los productos restantes sería así:您应该考虑使用元标记。也就是说,创建一个新表,在其中添加与相关产品相关的关键字。与博客的做法非常相似,或者就在 stackoverflow 上。
当您创建产品时,您将这些关键字分配给它,这样您就可以识别其他相关产品。您可以根据产品的受欢迎程度(浏览量、销售量)或者这是您获得报酬来推广的产品,来调整您列出产品和展示它们的方式。
我不知道你的模型,但你应该认真考虑扩展它。您可以存储的信息越多,执行数据挖掘并向您的用户提供更好的信息就越容易。
如果您只剩下一个字段(或表格),其中产品只能属于一个类别,那么您就限制了可以向用户展示的产品选项。
我理解你们的产品很少,但这并不意味着你们以后不能在一个更复杂、更完整的模型中前进。通过向用户提供更好的信息,这将在短期内使您受益,并且当您的应用程序模型而非产品增长时,现在比将来更容易实施。
分析其他做同样事情的公司是如何管理的。Amazon、Ebay、Mercadolibre、Stackoverflow 等,请查看任何博客。他们都使用标签来识别他们的帖子。
一个简单的模型是:
1 产品可以有1:1类别或1:N,具体取决于您按类别定义的内容。
该产品应该有N个标签或关键字。
所以假设你有这个产品:
金士顿内存 64GB
在类别中,您可以说以下两个:
以及如何添加标签:
有了这个,如果有人选择了32 GB 的 Sandisk USB 记忆棒,您可以向他们展示 64 GB 的记忆棒,前提是知道 32 GB 记忆棒与金士顿记忆棒共享内存和 Pendrive 标签。
所以你建立你的模型和你展示它的方式。
您可以加载您在字符串中显示的产品的 ID,以便在第二个查询中使用 NOT IN 排除它们。
例如:
您也可以简单地构建相关产品的数组,并遍历它以检查相关产品 ID 是否已经在购物车会话中,以及它是否已经“继续”;以便它在一段时间内跳过它
如果您需要显示 x 个产品,请跳过您增加计数器变量。
提议:
1.. 在 MySql 代码中的第一种方式,您只对您不想被看到的内容进行分组,并且在一次调用中,您已经有了所需的过滤器
结果你得到了除了1和2的匹配之外的所有产品
要为 N 过滤器构建这种结构,它将是
上面的过程描述了,只是形成一个链的过程,,,,对你不想被看到的产品进行分组,这就是为什么你把这个表达式id!=1 , 像这样组合起来WHERE pro.id != 1。
1..你只得到购物车列表。
2..您从购物车中删除选定的产品。
3..您对购物车中已经存在的产品进行了 Mysql 过滤器,从而显示了那些不在购物车中的产品。
4..显示剩余产品,或与购物车中输入的列表不同的产品。
想到这是一种快速排除值的方法(我不建议将它与太多的 ID 值一起使用,因为这相当于一行纯 OR 否定)。
product_id
这显示了除1 、 3 或 6之外的所有记录在以下链接中,您可以下载一个使用 PHP 和 JavaScript 编写的购物车示例;数据库脚本附在此处。
https://www.dropbox.com/s/q8qb1iaenj79r4w/example_cart.zip?dl=0
如何创建订单?