Foros del Web » Programando para Internet » PHP »

No de ID y Transacción

Estas en el tema de No de ID y Transacción en el foro de PHP en Foros del Web. Hola amigos, tengo una pequeño problema que quiero tener varias opiniones antes de poder dar una solución adecuada. Escenario: Tengo un sistema de ingreso de ...
  #1 (permalink)  
Antiguo 22/03/2016, 12:49
 
Fecha de Ingreso: diciembre-2010
Ubicación: Asunción
Mensajes: 41
Antigüedad: 13 años, 4 meses
Puntos: 1
No de ID y Transacción

Hola amigos, tengo una pequeño problema que quiero tener varias opiniones antes de poder dar una solución adecuada.

Escenario:
Tengo un sistema de ingreso de datos de operaciones financieras. El sistema trabaja bien, pero encontré un error que no caí en el mismo.
Mi sistema tiene diferentes usuarios; pero al menos al mismo tiempo pueden haber logeados 2 cajeros. El problema está en que cuando se va a empezar la operación de llenar el formulario yo miro el ultimo ID de la tabla donde registro la operación, le sumo uno y tengo ese Número como próximo ID:
- "SELECT MAX(id) AS id FROM ".$tabla;
- $resultado = function + 1;
Pero supongamos que uno de los cajeros empieza una operación y el otro inmediatamente posterior a él también da inicio a otra operación pero el 1ro no ha guardado; los ID ahí van a ser iguales y por ende, la operación que entrará en la tabla será aquella que el cajero de "Guardar" primero. Por ende la segunda será un error y no quedará almacenada.

Yo tengo varias ideas:
1- Idear alguna formula de tener siempre ID diferentes para cada rendición a travez de un engorroso metodo matemático.
2- Usar transaction de mysql, pero eso me puede traer algunas demoras.

Que se le puede ocurrir a Ud para solucionar este problema.
  #2 (permalink)  
Antiguo 22/03/2016, 13:00
 
Fecha de Ingreso: diciembre-2015
Mensajes: 529
Antigüedad: 8 años, 4 meses
Puntos: 39
Respuesta: No de ID y Transacción

Y si ese ID lo generas al momento de que den click el botón "Guardar"?
  #3 (permalink)  
Antiguo 22/03/2016, 13:22
 
Fecha de Ingreso: diciembre-2010
Ubicación: Asunción
Mensajes: 41
Antigüedad: 13 años, 4 meses
Puntos: 1
Respuesta: No de ID y Transacción

Cita:
Iniciado por rodocoyote15 Ver Mensaje
Y si ese ID lo generas al momento de que den click el botón "Guardar"?
No como vez mi paso 1 es buscar el ultimo ID de la tabla y yo creo una variable $lastid que es el resultado de ese select + 1.

Ese ID sería el siguiente a insertarse en la tabla; pero si los dos cajeros acceden a la vez tendrán el mismo ID. Y por ende $lastid sería igual para ambos. Entonces en mi sentencia inserte uso ese ID para generar el ID en la tabla.
  #4 (permalink)  
Antiguo 22/03/2016, 13:27
 
Fecha de Ingreso: diciembre-2015
Mensajes: 529
Antigüedad: 8 años, 4 meses
Puntos: 39
Respuesta: No de ID y Transacción

Cita:
cuando se va a empezar la operación de llenar el formulario
A esto me refiero. Tú generas, o extraes el id cuando van a EMPEZAR.
Yo sugiero que lo hagas cuando den al botón GUARDAR, es decir, cuando la acción va a terminar.

¿Por qué? Porque en ese momento que den click, tiene que ser mucha coincidencia para que le den al botón al mismo tiempo: hora, minuto, segundo, milisegundo.
  #5 (permalink)  
Antiguo 22/03/2016, 14:14
 
Fecha de Ingreso: diciembre-2010
Ubicación: Asunción
Mensajes: 41
Antigüedad: 13 años, 4 meses
Puntos: 1
Respuesta: No de ID y Transacción

Cita:
Iniciado por rodocoyote15 Ver Mensaje
A esto me refiero. Tú generas, o extraes el id cuando van a EMPEZAR.
Yo sugiero que lo hagas cuando den al botón GUARDAR, es decir, cuando la acción va a terminar.

¿Por qué? Porque en ese momento que den click, tiene que ser mucha coincidencia para que le den al botón al mismo tiempo: hora, minuto, segundo, milisegundo.
El tema es que mi lógica del programa hace esto:
1. Se llena el formulario y se de "Rendir"
2. Muestra como quedará la Planilla. con dos opciones "Imprimir" o "Cancelar"
Hasta este punto el sistema es solo como quedará el registro
3- Al dar imprimir entonces procedo a replicar la planilla, guardar el registro e imprimir las mismas en una ventana emergente. Entonces el tema es que no puedo saber que registro será si no controlo el ID previamente y así también mantener el correlativo entre la planilla impresa y el registro de la tabla. Pero por lo visto mi método tiene la falla de no ser una opción multiusuario.

Transaction creo que podría resolver pero me obligaría a cambiar grandes bloques de código.

No obstante tu idea me ha abierto a otra opción. Podría mostrar el código antes pero no hacerlo ese efectivo hasta la hora de guardar. Que en ese sentido tienes razón solo cuando guardo debo almacenar, aunque eso me obligaría a sacar el dato en el momento y aún así puede existir el mismo error que yo tengo, aunque minimizado.
  #6 (permalink)  
Antiguo 22/03/2016, 14:18
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: No de ID y Transacción

Igual podrías crear un registro en la base de datos "vacío" y que indique que está sin completar, una vez termines actualizar el registro, en caso de cancelar sencillamente puedes borrar los registros vacíos.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #7 (permalink)  
Antiguo 22/03/2016, 14:24
 
Fecha de Ingreso: diciembre-2010
Ubicación: Asunción
Mensajes: 41
Antigüedad: 13 años, 4 meses
Puntos: 1
Respuesta: No de ID y Transacción

Cita:
Iniciado por pateketrueke Ver Mensaje
Igual podrías crear un registro en la base de datos "vacío" y que indique que está sin completar, una vez termines actualizar el registro, en caso de cancelar sencillamente puedes borrar los registros vacíos.
Esta idea también pensé. También me obliga a cambiar un bloque importante de código pero es más razonable esta opción.

Investigo esta vía.

Saludos,
David
  #8 (permalink)  
Antiguo 23/03/2016, 12:35
 
Fecha de Ingreso: noviembre-2014
Ubicación: guadalajara
Mensajes: 18
Antigüedad: 9 años, 5 meses
Puntos: 0
Respuesta: No de ID y Transacción

pon id autoincrementable y ya

Etiquetas: formulario, mysql, registro, select, tabla, usuarios
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 17:07.