Actualizar consiste básicamente en mandar por ajax a un script que:
- Borra todos los registros de la tabla (DELETE)
- Abre el csv ($puntero = fopen(...))
- Un while con ($data = fgetcsv($puntero,.....)) para rescatar los campos del csv
- Finalmente un INSERT en la tabla) los campos serán $data[0],$data[1],...,$data[N]
CARGA Y RECARGA DE LA DATATABLE DESDE UNA TABLA
Cargamos la datatable (para ver lo que pasa) como en
CARGAR DATATABLE
Para recargarla desde la tabla usamos
tabla.ajax.reload(null,false);
el primer parámetro es una función callback normalmente null, el segundo si es true va a la página
de l paginado de la datatable de donde salimos, false va al principio.
JAVASCRIPT--------------------------------------
<script type="text/javascript" src="../scripts/jquery-3.6.4.min.js"></script>
<script src="../scripts/bootstrap.min.js"> </script>
<script src="../scripts/datatables.min.js"> </script>
<script src="../scripts/dataTables.responsive.min.js" > </script>
<LINK href="../scripts/bootstrap.min.css" type=text/css rel=StyleSheet>
<LINK href="../scripts/jquery.dataTables.min.css" type=text/css rel=StyleSheet>
<script>
$(document).ready( function () {
// inicializo tabla
var tabla = $('#mitabla').DataTable({
searching: true,
ordering: true,
responsive: true,
columnDefs: [
{
targets: 1,
className: 'dt-body-center'
}
],
ajax: {
url: 'tec-php-actualizardecsv-procesar.php?accion=cargar',
dataSrc:''
},
columns: [
{ data: 'item' },
{ data: 'marca' },
{ data: 'precio' },
{ data: 'cantidad' }
]
});
$("#recargar").click(function(evento){
$("#msg1").html(''); //borra los mensajes anteriores
$("#msg2").html(''); //borra los mensajes anteriores
tabla.ajax.reload(null,false);
}); //fin de click recargar
$("#actualizar1").click(function(evento){
var ruta = "tec-php-actualizardecsv-procesar.php?accion=actualizar1"; //ruta del script actualizar lista
$("#esperando1").css("visibility", "visible"); // esperando.....
$("#msg1").html(''); //borra los mensajes anteriores
$("#msg2").html(''); //borra los mensajes anteriores
$.ajax({
url: ruta,
success: function(datos){
if(datos.indexOf('exito') == 0){
$("#msg1").html('La lista1 se ha actualizado con éxito'); //borra los mensajes anteriores
$("#esperando1").css("visibility", "hidden"); //desaparece esperando....
}else{
$("#esperando1").css("visibility", "hidden"); //desaparece esperando....
$("#msg1").html(datos); //envío el mensaje de error
}
} //fin success
}); //fin ajax
}); // fin de #actualizar listas
$("#actualizar2").click(function(evento){
var ruta = "tec-php-actualizardecsv-procesar.php?accion=actualizar2"; //ruta del script actualizar lista
$("#esperando2").css("visibility", "visible"); // esperando.....
$("#msg1").html(''); //borra los mensajes anteriores
$("#msg2").html(''); //borra los mensajes anteriores
$.ajax({
url: ruta,
success: function(datos){
if(datos.indexOf('exito') == 0){
$("#msg2").html('La lista2 se ha actualizado con éxito'); //borra los mensajes anteriores
$("#esperando2").css("visibility", "hidden"); //desaparece esperando....
}else{
$("#esperando2").css("visibility", "hidden"); //desaparece esperando....
$("#ms2").html(datos); //envío el mensaje de error
}
} //fin success
}); //fin ajax
}); // fin de #actualizar listas
}); // fin ready.
</script>
<style>
.boton{
margin-bottom: 10px;
}
</style>
</head>
HTML------------------------------------------------------------
<div style="padding:10px; padding-top:0px;">
<div class="boton">
<input id="actualizar1" type="button" value="Actualizar 1" style="width:155px; "/>
<span id="esperando1" style="visibility: hidden; ">
<img src="esperando.gif" width="16" height="16" />
</span>
<span id="msg1"></span>
</div>
<div class="boton">
<input id="actualizar2" type="button" value="Actualizar 2" style="width:155px;"/>
<span id="esperando2" style="visibility: hidden; ">
<img src="esperando.gif" width="16" height="16" />
</span>
<span id="msg2"></span>
</div>
<div class="boton">
<input id="recargar" type="button" value="Ver/recargar datatable" style="width:155px;"/>
</div>
</div>
<div style="margin-top: 20px;">
<table id="mitabla" class="display compact" style="width:100%"> <!-- sin width:100% no funciona el responsive -->
<thead>
<tr>
<th>ITEM</th>
<th>MARCA</th>
<th>PRECIO LISTA</th>
<th>STOCK</th>
</tr>
</thead>
</table>
</div>
SCRIPT PHP (AJAX)---------------------------------------
<?php
include("conexion.php"); // abre la conexión a la base de datos
global $conn; //lo usamos en conexion, lo declaramos acá para no llamar siempre a $GLOBALS[]
$accion= $_GET["accion"];
Switch ($accion){
case "cargar":
$resultado= array();
if(conectar()){
$sqltxt = "SELECT * FROM precios";
$sqldevolucion = mysqli_query($conn,$sqltxt);
if (!mysqli_num_rows($sqldevolucion)) {
echo("Error, no se devuelven registros");
} else {
while ($r = mysqli_fetch_array($sqldevolucion, MYSQLI_ASSOC)){
$resultado[] = $r;
} // fin while
echo json_encode($resultado); // lo paso a json y lo exporto
mysqli_free_result($sqldevolucion); //devuelvo recurso a memoria
mysqli_close($conn); // cierro conexion
}
}else{
echo(mysqli_error($conn));
} //fin if conectar
break;
// fin de CARGAR
case "actualizar1":
if (file_exists("tec-php-actualizardecsv-base1.csv")) {
if(conectar()){
$data = array();
$sqltxt="DELETE FROM precios";
$sqldevolucion = mysqli_query($conn,$sqltxt);
if($puntero = fopen("tec-php-actualizardecsv-base1.csv","r")){
while (($data = fgetcsv($puntero, 1000, ";")) !== FALSE) {
$sqltxt="INSERT INTO precios (item,marca,precio,cantidad) VALUES ('" . $data[0] . "','" . $data[1] . "','" . $data[2] . "','" .$data[3]. "')";
$sqldevolucion = mysqli_query($conn,$sqltxt);
}
fclose($puntero);
echo "exito";
}else{
echo "No se puede abrir el archivo tec-php-actualizardecsv-base1.csv.";
}
mysqli_close($conn); // cierro conexion
}else{
echo "No se puede abrir la base de datos.";
}
} else {
echo "tec-php-actualizardecsv-base1.csv no existe, subir la lista.";
}
break;
// fin de ACTUALIZAR1
case "actualizar2":
if (file_exists("tec-php-actualizardecsv-base2.csv")) {
if(conectar()){
$data = array();
$sqltxt="DELETE FROM precios";
$sqldevolucion = mysqli_query($conn,$sqltxt);
if($puntero = fopen("tec-php-actualizardecsv-base2.csv","r")){
while (($data = fgetcsv($puntero, 1000, ";")) !== FALSE) {
$sqltxt="INSERT INTO precios (item,marca,precio,cantidad) VALUES ('" . $data[0] . "','" . $data[1] . "','" . $data[2] . "','" .$data[3]. "')";
$sqldevolucion = mysqli_query($conn,$sqltxt);
}
fclose($puntero);
echo "exito";
}else{
echo "No se puede abrir el archivo tec-php-actualizardecsv-base2.csv.";
}
mysqli_close($conn); // cierro conexion
}else{
echo "No se puede abrir la base de datos.";
}
} else {
echo "tec-php-actualizardecsv-base2.csv no existe, subir la lista.";
}
break;
// fin de ACTUALIZAR2
} //fin del switch
?>