ACTUALIZAR O CARGAR REGISTROS DESDE ARCHIVO .CSV
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 usamostabla.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
?>

						
					
© IQSystems 2023