Ver Mensaje Individual
  #8 (permalink)  
Antiguo 28/02/2017, 09:21
Avatar de Alexis88
Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Actualizar BD con Ajax

Por lo último que dices, la actualización en la base de datos solo debe realizarse en un registro (el de la fila afectada en el formulario), por lo que la labor será más sencilla.

Para hacer las cosas más sencillas, te sugiero tener agrupado a cada bloque de elementos de entrada (los que estén relacionados a un mismo registro en la base de datos). Por ejemplo:
Código PHP:
Ver original
  1. <form id="ejemplo">
  2. <?php
  3.     while ($row = mysqli_fetch_assoc($result)){
  4. ?>
  5.     <section>
  6.         <input type="hidden" name="id[]" value="<?php echo $row['id'] ?>" />
  7.  
  8.         <label>Dato 1:</label>
  9.         <input type="number" name="dato1[]" value="<?php echo $row['dato1'] ?>" />
  10.  
  11.         <label>Dato 2:</label>
  12.         <input type="text" name="dato2[]" value="<?php echo $row['dato2'] ?>" />
  13.     </section>
  14. <?php
  15.     }
  16. ?>
  17. </form>
El resultado de lo anterior será un conjunto de secciones en donde habrá dos elementos de entrada cada uno con un valor cargado desde la base de datos, además de un elemento oculto con el id de dicho registro.

Teniendo esto, hay que ejecutar las peticiones asíncronas (AJAX) cuando ocurra el evento change en el formulario:
Código Javascript:
Ver original
  1. $(document).ready(function(){
  2.     $("#ejemplo").on("change", "input", function(){
  3.         var seccion = $(this).parent(),
  4.             id = seccion.find("[name^=id]").val(),
  5.             dato1 = seccion.find("[name^=dato1]").val(),
  6.             dato2 = seccion.find("[name^=dato2]").val();
  7.  
  8.         $.ajax({
  9.             url: "destino.php",
  10.             type: "POST",
  11.             data: {
  12.                 id: id,
  13.                 dato1: dato1,
  14.                 dato2: dato2,
  15.             }
  16.         }).done(function(response){
  17.             console.log(response);
  18.         }).fail(function(errorMsg){
  19.             console.log(errorMsg);
  20.         });
  21.     });
  22. });

De esta manera, al ocurrir un cambio dentro del formulario (en cualquiera de los elementos que contenga), se delegará el evento al elemento <input> en el cual se haya producido. Enseguida, tomamos al elemento padre del <input> (la sección) y, dentro de este, buscamos a los elementos cuyos nombres empiecen por, en este caso, "dato1" y "dato2" y tomamos sus valores. Finalmente, ejecutamos la petición asíncrona (AJAX), enviando los respectivos valores.

Ahora, en el archivo PHP, solo tienes que recibirlos y colocarlos en la consulta SQL para ejecutarla:
Código PHP:
Ver original
  1. $id = mysqli_real_escape_string($connection, strip_tags(trim($_POST['id'])));
  2. $dato1 = mysqli_real_escape_string($connection, strip_tags(trim($_POST['dato1'])));
  3. $dato2 = mysqli_real_escape_string($connection, strip_tags(trim($_POST['dato2'])));
  4. $consulta = "UPDATE tabla SET dato1 = '$dato1', dato2 = '$dato2' WHERE id = $id";

__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand