У меня есть сайт для резервирования, дело в том, что в некоторых конкретных случаях пользователи, у которых, как мне кажется, плохое соединение 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";