Почему мой код бронирования вставляет несколько записей mysql? - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть сайт для резервирования, дело в том, что в некоторых конкретных случаях пользователи, у которых, как мне кажется, плохое соединение inte rnet, при отправке резервирования многократно вставляют в мою базу данных sql, каждая запись в другом таблицы дублируются за исключением первичного ключа конечно. это часть кода, которая вызывает подозрения.

кнопка, которая вызывает функцию проверки корзины перед вставкой:

<button id="aceptar" class="btn btn-success btn-sm pull-right" onclick="checkCart();" disabled>Aceptar Terminos y Reservar</button>
function checkCart(){
    var cart = <?php echo json_encode(filter_input(INPUT_POST, 'cart_list')); ?>;
    var dataString = 'cart=' + cart;
    $.ajax({
        type: "POST",
        url: "ajax_verify_cart.php",
        data: dataString,
        cache: false,                         
        success: function(data){
            if(data==0){
                realizarPedido();
            }
            else {
                alert('Ya Existe un Item Reservado.')
            }
        },
        error: function (response) {
    }           
    });
}

функция, которая передает данные в insert, в некоторых случаях это называется несколько раз.

function realizarPedido(){
    $('.blog *').attr("disabled", "disabled").off('click');
    $('.loaderImage').show();
    $('.vanish').hide();
    $('html, body').animate({
        scrollTop: $("div.loaderImage").offset().top
    }, 3000)
    var apellido = $('input#apellido').val();
    var nombres = $('input#nombres').val();
    var direccion = $('input#direccion').val();
    var dni = $('input#dni').val();
    var email = $('input#email').val();
    var pago = 1;
    var estadoventa = 1;

    var apellidonombre = $('input#apellidonombre').val();
    var dnit = $('input#dnit').val();

    var cart = <?php echo json_encode(filter_input(INPUT_POST, 'cart_list')); ?>;

    var dataString = 'pago=' + pago + '&estadoventa=' + estadoventa + '&apellido=' + apellido + '&nombres=' + nombres + '&direccion=' + direccion + '&dni=' + dni + '&email=' + email + '&apellidonombre=' + apellidonombre + '&dnit=' + dnit + '&cart=' + cart;
    $.ajax({
        type: "POST",
        url: "../includes/ajax_procesar_pedido.php",
        data: dataString,
        cache: false,                         
        success: function(data){
            $('.loaderImage').hide();
            $('.thanks').show();
            //prueba
            var dString = 'id_venta=' + data + '&email=' + email;
            $.ajax({
                type: "POST",
                url: "send_notify.php",
                data: dString,
                cache: false,
                success: function (data) {

                }
            });
            //prueba
        },
        error: function (response) {
           //Handle error
           //$("#progressBar").hide();

    }           
    });
}

php Файл, который выполняет вставку, возвращает идентификатор продажи для отправки электронного письма с файлом send_notify. php

       ......   
        switch ($param) {
                case 0:
                    insertarDetalleVentaMesaPrimeraFila($idVenta, $id_producto, $monto, $mysqli);
                    actualizarEstadoMesaPrimeraFila($id_producto, 2, $mysqli);
                    break;
                case 1:
                    insertarDetalleVentaMesaSegundaFila($idVenta, $id_producto, $monto, $mysqli);
                    actualizarEstadoMesaSegundaFila($id_producto, 2, $mysqli);
                    break;
                case 2:
                    $montoTotal = $monto * $cantidad;
                    insertarDetalleVentaTribunas($idVenta, $id_producto, $cantidad, $montoTotal, $mysqli);
                    //Si reserva, suma en reservas, sino, suma venta
                    if($estado_venta==1){
                        $cantidad_actual = obtenerCantidadTribunaReservas($id_producto, $mysqli);
                        $nueva_cantidad = $cantidad_actual+$cantidad;
                        actualizarTribunaReservas($id_producto, $nueva_cantidad, $mysqli);
                    } else {
                        $cantidad_actual = obtenerCantidadTribunaVendidas($id_producto, $mysqli);
                        $nueva_cantidad = $cantidad_actual+$cantidad;
                        actualizarTribunaVentas($id_producto, $nueva_cantidad, $mysqli);
                    }
                    break;
            }
        }
    }
    echo "$idVenta";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...