Как обновить количество товара в сеансе, когда те же товары добавляются в корзину?

#php #session #cart #shopping-cart

#php #сеанс #Корзина #корзина покупок

Вопрос:

Я создаю корзину, используя сеанс, но я не знаю, как обновить количество товара, когда тот же товар добавляется в сеанс корзины?

  1. Функция WhatsApp_add_cart, в которой я создаю сеанс..
  2. Получить данные из скрытого поля…
  3. WhatsApp_Cart_page, где я отображаю все значения сеанса, используя для каждого цикла.
 public function WhatsApp_Cart_button() {
        $whatsapp_names    = '';
        $whatsapp_price    = '';
        $whatsapp_quantity = '';
        $total_price       = '';
        $Whatsapp_id='';
        if ( isset( $_POST['WhatsApp_Cart_btn'] ) ) {

            if ( isset( $_POST['whatsapp_cart_nonce_field'] ) amp;amp; wp_verify_nonce( sanitize_text_field( wp_unslash( $_POST['whatsapp_cart_nonce_field'] ) ), 'whatsapp_cart_field' ) ) {

                echo '';
            }

            if ( isset( $_POST['product_name'] ) ) {

                    $whatsapp_names = sanitize_text_field( wp_unslash( $_POST ['product_name'] ) );
            }
            if ( isset( $_POST ['product_price'] ) ) {

                    $whatsapp_price = sanitize_text_field( wp_unslash( $_POST ['product_price'] ) );
            }

            if ( isset( $_POST ['quantity'] ) ) {
                $whatsapp_quantity = sanitize_text_field( wp_unslash( $_POST ['quantity'] ) );
            }
                if ( isset( $_POST ['product_id'] ) ) {
                $Whatsapp_id = sanitize_text_field( wp_unslash( $_POST ['product_id'] ) );
            }
            $product_info = array( $Whatsapp_id,$whatsapp_names, $whatsapp_price, $whatsapp_quantity);

            $_SESSION['WhatsApp_cart'][] = $product_info;

        }
    }

    public function Whatsapp_cart_function() {

        global $product;
        if( $product->is_type( 'simple' ) ){
        $product_id   = $product->get_id();
        $product_name = $product->get_title();

                // $p_Desp =$product->get_description();.
        $final_price = $product->get_price();
        $button_cart = get_option( sanitize_text_field( 'WhattsApp_BtnTxt_cart' ) );
        ?>
<form method="post" action="" enctype="multipart/form-data">
<input type="hidden" name="product_id" value="<?php echo esc_html( $product_id ); ?>">
<input type="hidden" name="product_name" value="<?php echo esc_html( $product_name ); ?>">
<input type="hidden" name="product_price" value="<?php echo esc_html( $final_price ); ?>">
<?PHP

  if ( ! empty( $_SESSION['WhatsApp_cart'] ) ) {
            foreach ( $_SESSION['WhatsApp_cart'] as $key => $values ) {
   p_id=$values[0];
    if ( isset( $_GET['product_id'] ) ) {
  if($p_id==$_GET['product_id']){

  $_SESSION["WhatsApp_cart"][$key][$values[3]]   $_POST["quantity"];
    ?>                                                              
<input type="hidden" name="quantity" value="1" min="1" max="10" step="1" />

<?PHP
      } 
     ?>

        <?PHP
        } 
  ?>
  <?php
  } 
  ?>

     <input type="submit" name="WhatsApp_Cart_btn" style="background:#25d366; color: white;" value=" 
           <? 
       PHP 
          echo esc_html( $button_cart ); ?>" id="demo" onclick="Add_items();" />

        <?php wp_nonce_field( 'whatsapp_cart_field', 'whatsapp_cart_nonce_field' ); ?>
          </form>

            public function WhatsApp_cart_page() {

            if ( isset( $_GET['index_to_remove'] ) ) {
                unset( $_SESSION['WhatsApp_cart'][$_GET['index_to_remove']]);
                wc_add_notice('Item removed from cart successfully' , 'success');
            }
        ?>
<table class="" cellspacing="0">
    <thead>
        <tr>
            <th class="product_id"><?php esc_html_e( 'Remove product', 'Woo-WhatsApp' ); ?></th>
            <th class="product-name"><?php esc_html_e( 'Product', 'Woo-WhatsApp' ); ?></th>
            <th class="product-price"><?php esc_html_e( 'Price', 'Woo-WhatsApp' ); ?></th>
            <th class="product-quantity"><?php esc_html_e( 'Quantity', 'Woo-WhatsApp' ); ?></th>
            <th class="Total-price"><?php esc_html_e( 'Total', 'Woo-WhatsApp' ); ?></th>
        </tr>
    </thead>
    <?php
        global $wp;
        if ( ! empty( $_SESSION['WhatsApp_cart'] ) ) {
            foreach ( $_SESSION['WhatsApp_cart'] as $key => $values ) {
                print_r( $_SESSION['WhatsApp_cart']);
                    $current_url    = home_url( $wp->request ); 
                    $remove_url     = $current_url . '?index_to_remove=' . $key;
                ?>
                <tr>
                    <th ><form action="" method="post"><a href="<?php echo esc_url($remove_url); ?> " name="index_to_remove" >X</a></form>
                    </th>
                    <?php echo '<th>' . esc_html( $values[1] ) . '</th>'; ?>
                    <?php echo '<th>' . esc_html( $values[2] ) . '</th>'; ?>
                    <th><input type="number" name="quantity" value="<?php echo $values[3]?>" min="0" max="10" step="1"> </th>
                </tr>
                
    <?php }
    ?>
                </table>

 <?php } ?>
  

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

1. Вы могли бы использовать product_id в качестве ключа в массиве сеанса, чтобы вы могли легко найти товар обратно в корзину. С помощью key_exist вы можете проверить, есть ли он уже в вашей корзине или нет.

2. Но вы можете лучше сохранить корзину в базе данных и предоставить пользователю уникальный и случайно сгенерированный идентификатор корзины в файле cookie. Таким образом, вы сможете лучше видеть, что люди добавляют в корзину, а корзина пользователей сохраняется до тех пор, пока существует файл cookie

3. Спасибо за ваше предложение. но я решил, что это соответствует идентификатору продукта. Смотрите ответ

4. Я надеюсь, что вы пересчитаете общую цену с данными из базы данных, когда кто-то проверит. Вы сохраняете цену в сеансе, который публикуется, чтобы посетители могли легко манипулировать этим значением.

Ответ №1:

 $flag = false;
            if ( ! empty( $_SESSION['WhatsApp_cart'] ) ) {
                foreach ( $_SESSION['WhatsApp_cart'] as $key => $values ) {
                    $p_id     = $values[0];
                    $quantity = $values[3];
                    if ( $p_id == $whatsapp_id ) {
                        $flag                               = true;
                        $whatsapp_upquantity                = $whatsapp_quantity   $quantity;
                        $total_uprice                       = $whatsapp_upquantity * $whatsapp_price;
                        $product_info                       = array( $whatsapp_id, $whatsapp_names, $whatsapp_price, $whatsapp_upquantity, $total_uprice, $whatsapp_desp );
                         $_SESSION['WhatsApp_cart'][ $key ] = $product_info;
                    }