php - 从 session 数组 php 获取单个元素以通过 MySQL SELECT 语句

标签 php mysql arrays loops session

我正在尝试获取我的数组的单个元素(产品 ID),然后使用 MYSQLi SELECT 语句获取有关该产品的附加信息。我已经将 print_r 用于测试目的,并且所有内容都正确存储在数组中。我只是不知道如何从 Session 变量中的嵌套数组中选择单个项目,然后使用它将它放入 SQL 语句中,然后循环显示项目,因为这是用于购物车的。

我也尝试过使用 mysqli_fetch_array 和 mysqli_fetch_assoc 两种方法都出现错误 这是我的代码:

if (isset($_GET['add'])) {
            echo "true";
            $pid = $_GET['add'];
            $wasFound = false;
            $i = 0;
            // If the cart session variable is not set or cart array is empty
            if (!isset($_SESSION['cart_array']) || count($_SESSION['cart_array']) < 1) {
                // RUN IF THE CART IS EMPTY OR NOT SET
                $_SESSION['cart_array'] = array(0 => array('item_id' => $pid, 'quantity' => 1));
            } else {
                // RUN IF THE CART HAS AT LEAST ONE ITEM IN IT
                foreach ($_SESSION['cart_array'] as $each_item) {
                    $i++;
                    while (list($key, $value) = each($each_item)) {
                        if ($key == 'item_id' && $value == $pid) {
                        // That item is in cart already so let’s adjust its quantity using array_splice()
                            array_splice($_SESSION['cart_array'], $i-1, 1, array(array('item_id' => $pid, 'quantity' => $each_item['quantity'] + 1)));
                            $wasFound = true;
                        } // close if condition
                    } // close while loop
                } // close foreach loop
                if ($wasFound == false) {
                    array_push($_SESSION["cart_array"], array("item_id" => $pid, "quantity" => 1));
                }
                //print_r ($_SESSION["cart_array"]);
                $sql = "SELECT * FROM  `products` WHERE  `productID` = '$pid'";
    $result = mysqli_query(Database::dbConnect(),$sql);
    while($row = mysqli_fetch_array($result)) {
    $str = <<<EOD
    <tbody>
        <tr>
            <td>{$row['productName']}</td>
            <td>{$row['productID']}</td>
            <td>'quantity'</td>
            <td>{$row['price']}</td>

        </tr>
    </tbody>
EOD;
            echo $str;
    }
                }


            }

最佳答案

尝试用

替换 $was_found
$cart_product = null;

并将您的 for 循环和 if 替换为(相同的第一行):

foreach ($_SESSION['cart_array'] as $each_item) {
    if ($each_item['item_id'] != $pid) {
        continue;
    }

    $cart_product = $each_item;
}

if (isset($cart_product)) {
    $cart_product['quantity']++;
} else {
    $cart_product = array('item_id' => $pid, 'quantity' => 1);
    array_push($_SESSION['cart_array'], $cart_product);
}

您不必循环遍历 $each_item 的内容。如果您的格式是外部 if 的第一部分中显示的格式,则项目 ID 应该可以直接使用。

顺便说一句,如果您定义一个产品类而不是数组,这会容易得多。你可以有一个购物车对象,你可以查询 cart_product 对象。

然后替换

            <td>'quantity'</td>

            <td>{$cart_product['quantity']}</td>

我完全不清楚您的 SQL 查询与此有何关系。

与你的问题无关,但是

        $pid = $_GET['add'];

其次是

            $sql = "SELECT * FROM  `products` WHERE  `productID` = '$pid'";

极度不安全。参见 How can I prevent SQL injection in PHP?

关于php - 从 session 数组 php 获取单个元素以通过 MySQL SELECT 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54000624/

相关文章:

php - 正则表达式 php 前瞻号码

Python MySQL 标准

mysql - 识别 SQL 中的模式。是否可以?

mysql - 在 codeigniter 3 的 database.php 文件中获取用户数据 session

C函数输入字符串并计算

php - 从数字字符串中提取最后两个字符

php - 如何在不渲染 Twig 模板的情况下分析它们?

php - 根据当前时间和用户选择的时间对 mySQL 结果进行排序?

java - 不同类数组单例实例中 Find And Delete 方法中数组的全局索引

arrays - 如何查找其特定字段不是数组类型的文档?