【问题标题】:Write session data to database将会话数据写入数据库
【发布时间】:2012-05-01 05:59:36
【问题描述】:

我正在创建一个迷你购物车,我想知道是否有办法从会话中获取数据并将其写入数据库。 用户选择的零件应该被添加到他们的购物车中。完成后,我将如何获取存储到会话中的数据,并将其写入数据库,以便他们下次登录时购物车仍然存在?

<?php
if (isset($_GET['add'])) {
$quantity = mysql_query('SELECT partID, quantity, catergory FROM computerparts WHERE partID=' . mysql_real_escape_string((int) $_GET['add']));
while ($quantity_row = mysql_fetch_array($quantity)) {
    if ($quantity_row['quantity'] != $_SESSION['index_' . $_GET['add']]) {
        $_SESSION['index_' . $_GET['add']]+='1';
    }
}
header('Location: ' . $page);
}

 if (isset($_GET['delete'])) {
$_SESSION['index_' . (int) $_GET['delete']] = '0';
header('Location: ' . $page);
}

function cart() {
$total = "";
$sub = "";
foreach ($_SESSION as $name => $value) {
    if ($value > 0) {
        if (substr($name, 0, 6) == 'index_') {
            $id = substr($name, 6, (strlen($name) - 6));
            $get = mysql_query('SELECT partID, partName, price FROM computerparts WHERE partID=' . (int) $id);
            while ($get_row = mysql_fetch_array($get)) {
                $sub = $get_row['price'] * $value;
                echo $get_row['partName'] . 'x' . $value . '@ &pound;' . $get_row['price'] . '=' . $sub . '<a href="index.php?delete=' . $id . '">Delete</a> <br />';
            }
        }
        $total += $sub;
    }
}
if ($total == 0) {
    echo 'Your cart is empty';
} else {
    echo 'Total: &pound' . $total;
}
}
?>

为了让事情变得更容易,我从这个网站上删除了一些功能。将不会购买任何物品,所有发生的事情是用户选择他想要的物品并保存在他希望您可以将其引用到规范的任何时候访问该信息。 (规格表)他选择的项目将被写入该表。使用当前登录的用户 ID。

【问题讨论】:

  • 你尝试过的逻辑是什么
  • 你如何确定when the user done?点击注销?点击done 按钮?还是直接离开页面?
  • 那么您希望将代码的哪些部分添加到数据库中,以及以什么方式和方法?
  • 我认为您没有有效地使用会话。或者至少,您没有在代码顶部开始会话或显示信息在会话全局中的存储位置。如果您有购物车数据的特定会话密钥,例如$_SESSION[cart],也许调试起来会更容易?
  • 点击完成。 @think123 我只需要写入数据库的部分ID(选择的项目)以及当前的用户ID。大概是这样的

标签: php mysql session


【解决方案1】:

法达米

您正在考虑将会话数据存储在数据库中,因为如果用户将商品添加到购物车中,然后他在没有从您的购物车中购买商品的情况下退出。

那么下次他来时,我们必须向他展示该物品(您已将该物品添加到购物车但未购买...)

我认为这是你的逻辑......为此我有一个答案..

您可以在您的 purchase_item_by_user 表中使用“标志类型“待定”来存储该特定购买项目。

所以每次你必须检查列表中是否有待处理列表中的项目......(你也可以检查特定的日期或时间......)

之后,当用户购买该项目时,您可以将其标志更改为“已购买”,或者如果用户取消该项目,那么您可以设置标志“已取消”..

这将帮助您... 谢谢, 塔伦马尔帕尼...

【讨论】:

  • 感谢您的建议。但它实际上比这更基本。将不会购买任何物品,所有发生的事情是用户选择他想要的物品并保存在他希望您可以将其引用到规范的任何时候访问该信息。 (规格表)他选择的项目将被写入该表。使用当前登录的用户 ID。
【解决方案2】:

如果我正确理解您的问题,您已经在会话数组中存储了您想要的值。

在这种情况下,由于数据存储在会话中,如果会话仍处于活动状态,您可以通过以下方式访问值:$_SESSION['cartItem']

然后要将这些值存储在数据库中,请查看此链接:

PHP and Writing to MySQL Databases。这是假设它是一个 mysql 数据库,我不确定您打算如何连接或连接哪种类型的数据库,如果它是不同的,请澄清这一点。


现在是表格本身,您需要保存选定的项目,并使用一个值来确定它是否已被购买。您可以在用户离开时提示他们是否想保存购买以供日后使用。如果是这样,您可以通过 ajax 将值(在这种情况下为“是”)传递给 php 函数,然后该函数将启动将会话值发送到数据库,其中有一列指定购买是挂起还是完成。

查看这些链接以进一步了解如何实现这一点:AJAX and PHP


这也可以通过检查当前用户的“购物车”是否已满来实现,如果是,当他们离开时,您可以自动将数据保存到引用用户 ID 的数据库中。因此,当该用户重新登录购物车时,系统会保存并可以再次访问。

检查onbeforeunload javascript 事件。您可以利用它来查看他们是否正在关闭/询问他们是否要关闭,如果是,他们是否会“保存他们的购物车?”,或者只是将该数据保存到数据库中以便他们稍后登录,这也可以当他们继续注销时触发一个函数。

查看此链接以获取演示和更多信息:onbeforeunload event


有很多方法可以做到这一点,我不愿意为所述过程编写一个单一的方法。然而,这些信息是可用的,只要记住准备好您的声明和/或使用 PDO 并尽可能以安全的方式转移东西。

参考链接:Prepared StatementsPDO

*对 PHP 发出愤怒的嘶嘶声

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-17
    • 1970-01-01
    • 2014-11-25
    • 1970-01-01
    • 2013-02-01
    • 2013-02-01
    • 1970-01-01
    相关资源
    最近更新 更多