Foros del Web » Programando para Internet » PHP »

Actualizar BD con Ajax

Estas en el tema de Actualizar BD con Ajax en el foro de PHP en Foros del Web. Hola, buenas noches, el asunto es el siguiente, tengo q actualizar un registro de una base de datos y lo quiero hacer sin recargar la ...
  #1 (permalink)  
Antiguo 25/02/2017, 21:05
 
Fecha de Ingreso: marzo-2004
Mensajes: 199
Antigüedad: 20 años, 1 mes
Puntos: 1
Actualizar BD con Ajax

Hola, buenas noches, el asunto es el siguiente, tengo q actualizar un registro de una base de datos y lo quiero hacer sin recargar la pagina y pues logre hacerlo
tengo lo siguiente:

una tabla asi.
idr | cantidad
1 | 8
2 | 10
3 | 5

y tengo un archivo php con lo siguiente

<input type="number" min="0" id="cantidad" name="cantidad" onChange="v_cantidad()" class="form" value="<?php echo $aqCNT['cantidad']?>">
<input type="text" id="idr" value="<?php echo $aqCNT['idr']?>">

la idea es q es un campo tipo numero, y cuando yo vario la cantidad el llama una funcion que se llama v_cantidad y es la siguiente


<script>
function v_cantidad()
{
var canta=$("#cantidad").val();
var idra=$("#idr").val();

$.ajax({
url:'ajax_p.php',
data:{
tipocantidad:canta,
tipoidr:idra
},

type: 'post',
success: function(data)
{
$("#select_user").html(data);
}
})
}
</script>

la funcion debe recibir el valor de #cantidad y #idr, y enviar la informacion a un archivo ajax_p.php que actualizar la informacion dependiendo del idr q se envie

$cnta = $_POST['tipocantidad'];
$idr = $_POST['tipoidr'];


$sql_query = "update pedidosb set cantidad='".$cnta."' where idr='".$idr."'";

hasta ahi, es perfecto pero para el primer registro, si yo quiero q me muestre todos los registros de la tabla lo hago a traves de un do while

asi

do{
<input type="number" min="0" id="cantidad" name="cantidad" onChange="v_cantidad()" class="form" value="<?php echo $cnt['cantidad']?>">
<input type="text" id="idr" value="<?php echo $cnt['idr']?>">
}while($cnt = mysqli_fetch_assoc($cnta))

por q la idea es q el me actualice dependiendo del idr q envie, pero, esta idea no me funcionó, pues solo me actualiza el primer registro,

que puedo hacer para poder modificar los otros registros?



Gracias por la Colaboracion prestada
  #2 (permalink)  
Antiguo 26/02/2017, 00:11
 
Fecha de Ingreso: septiembre-2015
Mensajes: 142
Antigüedad: 8 años, 7 meses
Puntos: 13
Respuesta: Actualizar BD con Ajax

lo que pasa o debe pasar , es que si quieres modificar mas de un registro ( cuando cargas los demas )

Cita:
hasta ahi, es perfecto pero para el primer registro, si yo quiero q me muestre todos los registros de la tabla lo hago a traves de un do while


vas a tener que manejar a estos 2 input como arrays

Código HTML:
Ver original
  1. <input type="number" min="0" id="cantidad" name="cantidad[]" onChange="v_cantidad()" class="form" value="<?php echo $cnt['cantidad']?>">
  2. <input type="text" name="whatu[]" id="idr" value="<?php echo $cnt['idr']?>

para así luego enviar . recorrerlos y editar.
  #3 (permalink)  
Antiguo 26/02/2017, 08:59
 
Fecha de Ingreso: marzo-2004
Mensajes: 199
Antigüedad: 20 años, 1 mes
Puntos: 1
Respuesta: Actualizar BD con Ajax

mm..pero aqui se maneja el array dentro del name del campo, pero el name nunca lo tiene en cuenta para nada, solo el id del campo, y el del campo, no se si pueda variar el nombre por como lo recibe la funcion
  #4 (permalink)  
Antiguo 27/02/2017, 12:51
Avatar de 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

Como te sugieren, debes utilizar arreglos de campos de entrada para que puedas recibirlos como arreglos en el lado del servidor y elaborar la o las consultas SQL respectivas. Ten en cuenta que los id nunca deben repetirse y que, los valores recibidos en el lado del servidor, son accesibles a través de los nombres de los campos de entrada, no de sus 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
  #5 (permalink)  
Antiguo 27/02/2017, 19:27
 
Fecha de Ingreso: marzo-2004
Mensajes: 199
Antigüedad: 20 años, 1 mes
Puntos: 1
Respuesta: Actualizar BD con Ajax

..la verdad...me quedo grande, no se como hacerlo
  #6 (permalink)  
Antiguo 27/02/2017, 22:22
 
Fecha de Ingreso: septiembre-2015
Mensajes: 142
Antigüedad: 8 años, 7 meses
Puntos: 13
Respuesta: Actualizar BD con Ajax

a ver explícate un poco mejor , tu extraes toda la data que tienes.
por ejemplo en tu ejemplo :

una tabla asi.
idr | cantidad
1 | 8
2 | 10
3 | 5

y obtienes algo asi cierto ?



que actualizas tu de esos campo ?
los 2 , o solo uno por conjunto ? es decir solo actualizas cantidad ? o idr ? o los 2.
al cambiarlos quieres hacerlo por onchange , o con un botón de submit ?
  #7 (permalink)  
Antiguo 28/02/2017, 05:25
 
Fecha de Ingreso: marzo-2004
Mensajes: 199
Antigüedad: 20 años, 1 mes
Puntos: 1
Respuesta: Actualizar BD con Ajax

Lo que pretendo hacer es q cuando modifique el valor de la columna 2, se cambie en la base de datos, pero el debe modificarlo teniendo en cuenta el respectivo id q es el de la columna No. 1

lo he probado tambien con un boton "onSubmit" o "on Click" pero el tema siempre es el mismo, me cambia la cantidad del primer registro, es como si no llevara el id para reconocer q registro es el que debe modificar. Solo debe variar el valor de cantidad.
  #8 (permalink)  
Antiguo 28/02/2017, 09:21
Avatar de 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

Etiquetas: ajax, bd, html, mysql, registro, select, sql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:58.