Передача нескольких переменных PHP в URL для корзины электронной коммерции?

#php #html

#php #HTML

Вопрос:

Я работаю над проектом электронной коммерции, в котором я должен добавить товар в корзину с выбранным цветом, размером и количеством. Товар успешно добавлен в корзину, но значения цвета, размера и количества возвращают значение null. Я пытался использовать amp;_POST $_GET метод, но значения по-прежнему не возвращаются.

Добавить в корзину Интерфейс

                                     <div class='product-action d-flex flex-row align-items-center mb--10 mt--20'>
                                        <select name='sizes' id='sizes' class='customDrop'>
                                            $listSizes
                                        </select>
                                        <select name='colors' id='colors' class='customDrop' style='width:15rem'>
                                            $listColors
                                        </select>
                                        <div class='quantity'>
                                            <input type='number' class='quantity-input' name='qty' id='qty' value='1' min='1' max='10' readonly>
                                        </div>
                                        <a href='shop.php?add_wishlist=$pro_id'><i class='dl-icon-heart2'></i></a>
                                    </div>
                                    <div class='product-action d-flex flex-row align-items-center mb--30 mt--20'>
                                        <a href='shop.php?add_cart=$pro_id'>
                                            <button type='button' class='btn btn-style-1 btn-semi-large add-to-cart'>
                                                Add To Cart
                                            </button>
                                        </a>
                                    </div>
  

Функция корзины PHP:

 function cart(){

    global $conn;

    if(isset($_GET['add_cart'])){

        $ip_address = getIp();
        $size = $_GET['sizes'];
        $color = $_GET['colors'];
        $quantity = $_GET['qty'];
        $product_id = $_GET['add_cart'];

        $check_product = "SELECT * FROM cart WHERE ip_address = '$ip_address' AND product_uid = '$product_id'";
        $run_check_product = mysqli_query($conn, $check_product);

        if(mysqli_num_rows($run_check_product) > 0){

            echo "";

        } else {

            $insert_product = "INSERT INTO cart (ip_address, product_uid, product_color, product_size, quantity) VALUES ('$ip_address','$product_id', '$color', '$size', '$quantity')";
            $run_insert_product = mysqli_query($conn, $insert_product);

            echo "<script>window.open('shop.php', '_self')</script>";
        }

    }

}
  

Этот URL успешно вставляет товар shop.php?add_cart=$pro_id , но остальные значения возвращаются пустыми.

Чего я хочу добиться при Add To Cart клике shop.php?add_cart=$pro_idamp;size=(selected size)amp;color=(selected color)amp;qty=(selected qty) , как мы можем это сделать?

Я новичок в PHP и MySQL, буду признателен за любую помощь, спасибо!

Ответ №1:

Вы обернули свои входные данные и выбрали в теге? Кажется, что у вас нет.

  <div class='product-action d-flex flex-row align-items-center mb--10 mt--20'>
        <form action="/shop.php" method="get"></form>
        <select name='sizes' id='sizes' class='customDrop'>
            $listSizes
        </select>
        <select name='colors' id='colors' class='customDrop' style='width:15rem'>
            $listColors
        </select>
        <div class='quantity'>
            <input type='number' class='quantity-input' name='qty' id='qty' value='1' min='1' max='10' readonly>
        </div>
        <a href='shop.php?add_wishlist=$pro_id'><i class='dl-icon-heart2'></i></a>
    </div>
    <div class='product-action d-flex flex-row align-items-center mb--30 mt--20'>
        <a href='shop.php?add_cart=$pro_id'>
           <button type="submit" value="Submit">Add to Cart</button>
        </a>
    </form>
    </div>
  

Завершите ввод и выберите под тегом формы, а также измените кнопку «Добавить в корзину» на «Отправить». Если вам нужен ваш идентификатор продукта, вы также можете создать скрытый ввод, чтобы сохранить его для передачи shop.php .
https://www.w3schools.com/tags/att_input_type_hidden.asp

Ответ №2:

Вы не отправляете выбранные значения для размеров и цветов, если ваша кнопка отправки заключена в тег, который ссылается на другой URL, а не на ваш атрибут действия формы.

Просто измените свою форму.

 <form id="product-form" action="./shop.php" method="get">
    <input type="hidden" name="product_id" value="<?= htmlspecialchars( $product_id ) ?>">
    <!-- all your product property inputs here -->
    <button type="submit">add to card</button>
</form>
  

Просто используйте тег формы с правильными атрибутами. не заключайте ни один элемент в a-тег, который не будет передавать значения формы.

Кроме того, ваш запрос к базе данных широко открыт для внедрения sql. Это серьезная проблема безопасности. вы должны использовать подготовленные инструкции, чтобы оставаться в безопасности.

Комментарии:

1. Он не добавляет add_cart=$pro_id в URL, вместо этого он выполняется так же, как /shop.php?sizes=XLamp;colors=Royal Blueamp;qty=3 как я могу добавить это после shop.php ?

2. Я отредактировал свой ответ и добавил элемент ввода типа hidden. Этот скрытый элемент ввода получил имя product_id . В данном примере это приведет к shop.php?product_id={product_id}amp;sizes={sizes}amp;colors={colors}amp;qty={qty} .

3. Спасибо, это сработало! И спасибо, что дали мне знать, я изменю эти запросы в подготовленные инструкции, это много значит!