добавление элементов корзины в массиве сессии в базу данных mysql - PullRequest
0 голосов
/ 01 мая 2019

Как можно отправить данные из корзины покупок в базу данных mysql, на данный момент я могу добавить товары в корзину и очистить их, однако я также создал кнопку оформления заказа, но не могу понять, как получить данные из корзины покупок в База данных MySQL, я пробовал действие check_out, но я делаю это совершенно неправильно

это мой файл action.php, который получает элементы из корзины для покупок в массив и добавляет или удаляет их.

<?php
include('cart/database_connection.php');
//action.php

session_start();

if(isset($_POST["action"]))
{
    if($_POST["action"] == "add")
    {
        if(isset($_SESSION["shopping_cart"]))
        {
            $is_available = 0;
            foreach($_SESSION["shopping_cart"] as $keys => $values)
            {
                if($_SESSION["shopping_cart"][$keys]['product_id'] == $_POST["product_id"])
                {
                    $is_available++;
                    $_SESSION["shopping_cart"][$keys]['product_quantity'] = $_SESSION["shopping_cart"][$keys]['product_quantity'] + $_POST["product_quantity"];
                }
            }
            if($is_available == 0)
            {
                $item_array = array(
                    'product_id'               =>     $_POST["product_id"],  
                    'product_name'             =>     $_POST["product_name"],  
                    'product_price'            =>     $_POST["product_price"],  
                    'product_quantity'         =>     $_POST["product_quantity"]
                );
                $_SESSION["shopping_cart"][] = $item_array;
            }
        }
        else
        {
            $item_array = array(
                'product_id'               =>     $_POST["product_id"],  
                'product_name'             =>     $_POST["product_name"],  
                'product_price'            =>     $_POST["product_price"],  
                'product_quantity'         =>     $_POST["product_quantity"]
            );
            $_SESSION["shopping_cart"][] = $item_array;
        }
    }

    if($_POST["action"] == 'remove')
    {
        foreach($_SESSION["shopping_cart"] as $keys => $values)
        {
            if($values["product_id"] == $_POST["product_id"])
            {
                unset($_SESSION["shopping_cart"][$keys]);
            }
        }
    }
    if($_POST["action"] == 'empty')
    {
        unset($_SESSION["shopping_cart"]);
    }


    if($_POST["action"] == 'check_out')
    {
        if(isset($_SESSION["shopping_cart"]))
        {
            foreach($_SESSION["shopping_cart"] as $values)
        {
             $sql ="INSERT INTO orders (total, product_id)
                    values ('{$values['product_id']}','{$v['total']}')";
                    $statement = $connect->prepare($query);
                    $statement->execute();
        if ($statement) {
            $_SESSION['success'] = 'Information updated successfully';

            header("location: my_account.php");
            exit;
        } else {
            $_SESSION['errormsg'] = 'Someting is wrong in updating your Information, Please try again later.';
            header("location: my_account2.php");
            exit;
        }}
    }

}
?>

и это скрипт, который я использую для вызова функций из моего index.php

<script>  
$(document).ready(function(){
    load_cart_data();

    function load_product()
    {
        $.ajax({
            url:"cart/fetch_item.php",
            method:"POST",
            success:function(data)
            {
                $('#display_item').html(data);
            }
        });
    }

    function load_cart_data()
    {
        $.ajax({
            url:"cart/fetch_cart.php",
            method:"POST",
            dataType:"json",
            success:function(data)
            {
                $('#cart_details').html(data.cart_details);
                $('.total_price').text(data.total_price);
                $('.badge').text(data.total_item);
            }
        });
    }

    $('#cart-popover').popover({
        html : true,
        container: 'body',
        content:function(){
            return $('#popover_content_wrapper').html();
        }
    });

    $(document).on('click', '.add_to_cart', function(){
        var product_id = $(this).attr("id");
        var product_name = $('#name'+product_id+'').val();
        var product_price = $('#price'+product_id+'').val();
        var product_quantity = $('#quantity'+product_id).val();
        var action = "add";
        if(product_quantity > 0)
        {
            $.ajax({
                url:"cart/action.php",
                method:"POST",
                data:{product_id:product_id, product_name:product_name, product_price:product_price, product_quantity:product_quantity, action:action},
                success:function(data)
                {
                    load_cart_data();
                    alert("Item has been Added into Cart");
                }
            });
        }
        else
        {
            alert("Please Enter Number of Quantity");
        }
    });

    $(document).on('click', '.delete', function(){
        var product_id = $(this).attr("id");
        var action = 'remove';
        if(confirm("Are you sure you want to remove this product?"))
        {
            $.ajax({
                url:"cart/action.php",
                method:"POST",
                data:{product_id:product_id, action:action},
                success:function()
                {
                    load_cart_data();
                    $('#cart-popover').popover('hide');
                    alert("Item has been removed from Cart");
                }
            })
        }
        else
        {
            return false;
        }
    });

    $(document).on('click', '#clear_cart', function(){
        var action = 'empty';
        $.ajax({
            url:"cart/action.php",
            method:"POST",
            data:{action:action},
            success:function()
            {
                load_cart_data();
                $('#cart-popover').popover('hide');
                alert("Your Cart has been clear");
            }
        });
    });

$(document).on('click', '#check_out_cart', function(){
        var action = 'empty';
        $.ajax({
            url:"cart/action.php",
            method:"POST",
            data:{action:action},
            success:function()
            {
                load_cart_data();
                $('#cart-popover').popover('hide');
                alert("Your Cart has been clear");
            }
        });
    });




});

</script>

databaseconnection.php

<?php

//database_connection.php

$connect = new PDO("mysql:host=localhost;dbname=foodsystem", "root", "");

?>

Я проверил сессию корзины и вижу элементы в массиве

Array
(
    [0] => Array
        (
            [product_id] => 1
            [product_name] => Chicken Burger
            [product_price] => 10
            [product_quantity] => 1
        )

    [1] => Array
        (
            [product_id] => 2
            [product_name] => Fish Burger
            [product_price] => 10
            [product_quantity] => 1
        )

    [2] => Array
        (
            [product_id] => 3
            [product_name] => Ham Burger
            [product_price] => 10
            [product_quantity] => 1
        )

1 Ответ

0 голосов
/ 01 мая 2019

Вы определяете переменную с именем $sql и запускаете переменную с именем $query.

Такие ошибки случаются, потому что запросы в качестве переменных первой и выполнение второй принципиально проблематичны.Гораздо лучше определить запрос в качестве аргумента, чтобы вы не могли его пропустить:

$stmt = $connect->prepare("INSERT INTO orders (total, product_id) VALUES (:total, :product_id)");
$stmt->execute($v);

Существует нулевая вероятность того, что случайно запустится неправильный запрос или вообще не будет запроса.

Это также исправляет ошибку SQL-инъекции с использованием значений заполнителей, что так нелепо легко с PDO, что на самом деле нет оправдания этому не делать.Если вы сопоставите именованные заполнители в запросе с ключами в $v, он автоматически запустится с нужными данными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...