【发布时间】:2014-06-07 17:45:24
【问题描述】:
我在使用数组时遇到了问题,我对 PHP 并不陌生,但我在处理复杂数组方面有一点经验,就像我现在需要的那样。
我正在构建购物车,我对购物车的想法是每个用户都会拥有的数据库行,购物过程应该是这样的
当用户购买产品时,如果购物车脚本中不存在产品,则应将产品添加到购物车中,例如1=1 或数组字 $cart = [ [1]=>'1' ] 表示产品 ID1 数量 1,现在如果产品已经存在于购物车脚本中,则应该更新数量,例如1=2 等更多数量。
这是我完成上述的糟糕尝试
PHP
<?php session_start();
require_once('config.php');
$member_id = '1'; // Test data
$pr_id = filter_input(INPUT_POST, 'pr_id', FILTER_SANITIZE_STRING); // Sending ID with jQuery/AJAX which works fine of course
$pr_qty = '1'; // Start quantity
$up_qty = '5'; // Test data
try {
$getCart = $conn->prepare("SELECT cart FROM members WHERE member_id = :member_id ");
$getCart->bindParam(':member_id', $member_id);
$getCart->execute();
$cart = $getCart->fetch(PDO::FETCH_ASSOC);
if(array_key_exists($pr_id, $cart)) {
$cart[$pr_id] = $up_qty . ',';
}
else {
$cart[$pr_id] = $pr_qty . ',';
}
$updateCart = $conn->prepare("UPDATE members SET cart = :cart WHERE member_id = :member_id ");
$updateCart->bindParam(':member_id', $member_id);
$updateCart->bindParam(':cart', implode($cart));
if($updateCart->execute()) {
echo '1';
}
}
catch(PDOException $error) {
echo 'Error: ' . $error->getMessage();
}
$conn = null;
?>
稍后我应该能够从数据库中检索产品 ID 和数量,但到时候...
我在这方面工作了大约三天,但我很绝望,我到处搜索,找到了很多关于多维数组的教程,但我认为我的问题有点独特,或者我只是够愚蠢,无法解决它。
先谢谢大家了,希望大家一起解决,多开脑洞=多知识=解决方案;)
【问题讨论】:
-
var_dump($cart)显示什么? -
是
$connmysqli 对象还是pdo 对象? -
@u_mulder 它显示
NULL,但是当我用内爆回显它时,它显示1,1,1, -
在您的第一个
try中,您在prepare 语句中使用了变量。准备好的语句(或至少在 mySQLi::prepare 中)不允许以这种方式注入变量以防止 SQL 注入,所以我相信。尝试使用 bindParam 将变量添加到语句中。 -
@Beneto 在第一条语句中我正在从数据库中提取购物车,当我使用
implode回显它时它可以正常工作,它会在购物车中显示数据但array_key_exists不起作用。跨度>
标签: php mysql arrays database pdo