Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Cuelgue de pagina al realizar Update

Estas en el tema de Cuelgue de pagina al realizar Update en el foro de PHP en Foros del Web. Buenas, tengo un problemilla que no logro resolver y ojala alguien me pueda dar una pista de donde estoy cometiendo un error. El tratamiento lo ...
  #1 (permalink)  
Antiguo 10/01/2018, 22:51
 
Fecha de Ingreso: junio-2011
Ubicación: Lima Peru
Mensajes: 13
Antigüedad: 13 años, 6 meses
Puntos: 0
Cuelgue de pagina al realizar Update

Buenas, tengo un problemilla que no logro resolver y ojala alguien me pueda dar una pista de donde estoy cometiendo un error. El tratamiento lo hago desde PHP .

Esto es:

Situación
Una tabla mysql que tiene registros fijos y desde web se realizará siempre Updates con este php:
Código PHP:
Ver original
  1. <?php
  2. include("../comun/conexion.php");
  3.  
  4. $MPR_ID = $_POST['MPR_ID'];
  5. $CANT = $_POST['CANT'];
  6. $INVENT = $_POST['INVENT'];
  7.  
  8. $modificar = $conn->prepare("UPDATE INV_CLIENTE SET CANT=? WHERE MPR_ID=? AND INVENT=?");
  9. $modificar->bind_param("sss", $CANT, $MPR_ID, $INVENT);
  10. $modificar->execute();
  11.  
  12. $conn->close();
  13. ?>
La cadena de conexión es esta:
Código PHP:
Ver original
  1. <?php
  2. $conn = mysqli_connect("aqui la ruta a la BD", "usuario", "password", "invent");
  3.  
  4. if ($conn->connect_error){
  5. die('Error de Conexión: ' . $conn->connect_error);
  6. }
  7. ?>
Se conecta y la pagina muestra los registros correctamente.

Uso
El usuario carga la web previamente identificado en INVENT y modifica un solo registro en un solo campo con el query $modificar de arriba. Todo bien todo lindo.

Caso
Si dos usuarios entran a la misma web desde (digamos) dos tablets ninguno de ellos tocará el mismo registro porque no usaran el mismo usuario. Entonces los dos alteran la misma tabla pero diferentes registros SIEMPRE.

Problema.
Que a veces una o varias webs (o sea tablets) se cuelgan. Ejemplo.
Carlos abre la web (tablet 1)
Mario abre la web (tablet 2)

Carlos edita el registro 20 y graba OK
Mario edita el registro 80 y graba OK
Carlos edita el registro 12 y graba y se cuelga (ojo: no lo hace necesariamente "al mismo tiempo que Mario")... por unos 30 segundos, luego se "descuelga" y graba el registro modificado.

----------------
Dato adicional

Curiosamente este cuelgue no sucede NUNCA si abro las webs en una PC en diferentes browser o en el mismo browser con diferentes tabs. Esto solo sucede si abro la web en tablet o celular ya sea por wifi o con plan de datos. Agradecería me pudieran dar una luz de como corregir el tema. Por cierto la Bd es innodb.


Última edición por gnzsoloyo; 11/01/2018 a las 05:11 Razón: Codigo sin etiquetar
  #2 (permalink)  
Antiguo 11/01/2018, 05:21
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Cuelgue de pagina al realizar Update

Tu problema evidentemente no es de BBDD, si asi fuese se presentaría en TODOS los casos, y no sólo en un escenario.
El problema es entonces a nivel de red, sea por Wifi, tablet o smartphone. Eso no tiene NADA que ver con la base de datos, que sólo interviene a partir de la llegada de las peticiones en el server...

Por otro lado, me parece que o tienes un error de conceptos, o no nos estás describiendo bien el sistema, porque esto no es correcto:
Cita:
Caso
Si dos usuarios entran a la misma web desde (digamos) dos tablets ninguno de ellos tocará el mismo registro porque no usaran el mismo usuario. Entonces los dos alteran la misma tabla pero diferentes registros SIEMPRE.
El hecho de usar diferentes usuarios no tiene NADA que ver con la imposibilidad de que dos diferentes usuarios accedan al mismo registro, A MENOS que hayas realizado un bloqueo a nivel registro. Esa es la forma correcta de que funcione la restricción.
DE hecho, para simplifcar sistemas, es habitual en las empresas grandes que haya un único usuario de BBDD para una aplicación, por cuestiones de seguridad, mientras que diversos usuarios están habilitados para usar la aplicación en función de sus roles y permisos.
Ese tipo de diseño sólo es aplicable si se usan transacciones y se controla la concurrencia.
¿Se entiende?

MySQL está diseñado, como todos los DBMS, para funcionar de modo concurrente, tal que a menos que hayas hecho el bloqueo que te digo, u otro hecho programáticamente, es perfectamente posible Y ES CORRECTO que el mismo usuario pueda acceder desde diferentes PC al mismo registro.

Como sea, el tema que stás preguntando está fuera del alcance de este subforo. Lo muevo al de PHP para que te orienten, pero es posible que tenga mas que ver con WebServers o telecomunicaciones.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 11/01/2018, 06:00
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 9 años, 6 meses
Puntos: 263
Respuesta: Cuelgue de pagina al realizar Update

epa recuerda el WHERE de tu update o vas a acabar actualizando TODOS los registros de tu tabla
__________________
[email protected]
HITCEL
  #4 (permalink)  
Antiguo 11/01/2018, 08:03
 
Fecha de Ingreso: junio-2011
Ubicación: Lima Peru
Mensajes: 13
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Cuelgue de pagina al realizar Update

Cita:
Iniciado por gnzsoloyo Ver Mensaje
...

El hecho de usar diferentes usuarios no tiene NADA que ver con la imposibilidad de que dos diferentes usuarios accedan al mismo registro, A MENOS que hayas realizado un bloqueo a nivel registro. ....
Gracias por responder. Lo que pasa es que se cargan diferentes registros dependiendo del usuario que accede, por eso indicaba que un usuario no tocará los registros de otro usuario, las listas se preparan desde otro ambiente y el usuario levanta su lista de registros preasignado y siempre serán registros diferentes al de otro usuario, eso si, ambas listas están en la misma tabla. Pero bueno si es un problema del php como indicas te agradecería mucho si pudieras mover el hilo a donde corresponde. Mil Gracias por tu tiempo.
  #5 (permalink)  
Antiguo 11/01/2018, 08:05
 
Fecha de Ingreso: junio-2011
Ubicación: Lima Peru
Mensajes: 13
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Cuelgue de pagina al realizar Update

Cita:
Iniciado por xfxstudios Ver Mensaje
epa recuerda el WHERE de tu update o vas a acabar actualizando TODOS los registros de tu tabla
Estimado gracias por responder, pero el WHERE si esta en el UPDATE, siempre lo estuvo, te lo copio de nuevo aquí:


$modificar = $conn->prepare("UPDATE INV_CLIENTE SET CANT=? WHERE MPR_ID=? AND INVENT=?");

Alli esta el Where y con ese Where tengo la seguridad absoluta que siempre tocara un solo registro pues en ningún caso se cumple que existan dos MPR_ID e INVENT iguales.

Muchas gracias.
  #6 (permalink)  
Antiguo 11/01/2018, 10:37
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 9 años, 6 meses
Puntos: 263
Respuesta: Cuelgue de pagina al realizar Update

ops no lo vi, bueno otra cosa lo que esta llegando todo es de tipo string? o estan mandando numeros enteros por ejemplo numero de id o algún serial de tipo entero sin texto ni simbolos?

lo pregunto por esto:
Código PHP:
Ver original
  1. $modificar->bind_param("sss", $CANT, $MPR_ID, $INVENT);

ya que indicas que todos son string, por otro lado, validaste que los valores esten llegando correctamente?
__________________
[email protected]
HITCEL
  #7 (permalink)  
Antiguo 11/01/2018, 10:53
 
Fecha de Ingreso: junio-2011
Ubicación: Lima Peru
Mensajes: 13
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Cuelgue de pagina al realizar Update

Si estimado está validado, y no, no todos son string, si lo dije me corrijo, esta así:

CANT asi no ponga nada el usuario va a enviar un cero y es INT, o si pone texto va a enviar igual un 0.
MPR_ID si o si va a enviar porque para hacerlo va a tener que seleccionar y es Char(5).
INVENT ya esta cargado desde que abre la web y es VarChar(20).

La web es super sencilla, el usuario solo debe hacer un click en un registro y cambiar el valor de CANT no puede hacer mas porque esa sola columna es editable.

Esto carga:


Aqui edita, por ejemplo cambia 10 por 100 y graba:


Esto obtiene al grabar
  #8 (permalink)  
Antiguo 11/01/2018, 11:01
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 9 años, 6 meses
Puntos: 263
Respuesta: Cuelgue de pagina al realizar Update

el asunto es si todos los campos de tu base de datos son varchar, char, text, porque si alguno es int, debes modificar esa linea en consecuencia a la entrada de tu tabla,
ç
por ejemplo me dices que cant es INT entonces la linea deberia de quedar asi:

Código PHP:
Ver original
  1. $modificar->bind_param("iss", $CANT, $MPR_ID, $INVENT);
porque es un entero el que va a esperar y es un campo entero el de la base.
__________________
[email protected]
HITCEL
  #9 (permalink)  
Antiguo 11/01/2018, 11:27
 
Fecha de Ingreso: junio-2011
Ubicación: Lima Peru
Mensajes: 13
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Cuelgue de pagina al realizar Update

A caray estimado QUE BUEN DATO, ahorita mismo corrijo y pruebo y te comento.

MIL GRACIAS!!!
  #10 (permalink)  
Antiguo 11/01/2018, 17:01
 
Fecha de Ingreso: junio-2011
Ubicación: Lima Peru
Mensajes: 13
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Cuelgue de pagina al realizar Update

Hola, bueno no tuve suerte, grabe el tema, quiza se pueda encontrar el error viendolo estimado.

https://www.youtube.com/watch?v=yhyqjDayOSw

(no logro generar el enlace)
  #11 (permalink)  
Antiguo 11/01/2018, 18:12
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 9 años, 6 meses
Puntos: 263
Respuesta: Cuelgue de pagina al realizar Update

Recree la prueba con los datos de tu tabla:
En mi caso:
Servidor Mysql version 5.7.14
Apache 2.4.23
PHP 7.0.10

Tabla Inventario:
InnoDB
Cotejamiento utf8_spanish_ci

La conexión:
Código PHP:
Ver original
  1. //Para visualizar cualquier error
  2. ini_set('display_errors', '1');
  3.  
  4. $host = 'localhost';
  5.     $user = 'root';
  6.     $pass = '';
  7.     $base = 'prueba';
  8.    
  9.     $db = new MySQLi($host, $user, $pass, $base);
  10.     if($db->connect_error) {
  11.         die('Error de conexion ('.$db->connect_errno.')'
  12.             .$db->connect_errno);
  13.     };

La consulta:
Código PHP:
Ver original
  1. try{
  2.     $stmt = $db->prepare("UPDATE inventario SET CANT=? WHERE MPR_ID=? AND INVENT=?");
  3.     $stmt->bind_param("iss", $CANT, $MPR_ID, $INVENT);
  4.  
  5.     $MPR_ID = $_POST['MPR_ID'];
  6.     $CANT   = $_POST['CANT'];
  7.     $INVENT = $_POST['INVENT'];
  8.  
  9.     $stmt->execute();
  10.     $db->close();
  11.  
  12.     header('location:formtestdb.php');
  13.  
  14. }catch(Exception $e){
  15.     echo $e->getMessage();
  16. }

Pruebas en las 2 PCs, con la Tablet y con el SmartPhone y todo camino sin problemas.
__________________
[email protected]
HITCEL
  #12 (permalink)  
Antiguo 11/01/2018, 21:32
 
Fecha de Ingreso: junio-2011
Ubicación: Lima Peru
Mensajes: 13
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Cuelgue de pagina al realizar Update

Claro, no dudo amigo que si te funcione en las condiciones que lo probaste, pero si viste el video comprobarás que en mi caso hay un problema cuya solución no consigo, la replica no es exacta estimado.

Por ejemplo, un detalle diferente que veo en tus datos es que usas:
Servidor Mysql version 5.7.14

Y yo uso el 5. ¿Porque?

Por una sencilla razón, esa lista de productos es enviado por mi cliente desde su sistema, su sistema es un aplicativo hecho en VB6 y corre en Windows. Bien, ese aplicativo escribe en la BD hosteada en GooDaddy, para que la aplicación externa pueda escribir en el MySQL es necesario que la versión sea 5.

Cuando en Godaddy creamos una base de datos y se requiere que una aplicación No web escriba en ella es necesario crearla así y con la version 5:



Si se escoge una version superior, ejem 5.5 se inhabilita la opcion



Si ese fuese la explicación a mi problema entonces en buen frances: estoy jodido.

No me quedará de otra que hacer por cada ejercicio la corrida de un script que cree una tabla por cada usuario con su lista de productos.

Si el problema no fuera que la BD sea 5.0, entonces si te aseguro que si te doy los datos de acceso a la web y pruebas como yo probé una de tus tablets se va a colgar... claro que también te podría pasar el código php y demás de la web y quizá allí puedas encontrar el desperfecto, naturalmente serias sabiamente recompensado.
  #13 (permalink)  
Antiguo 11/01/2018, 22:12
Avatar de xfxstudios  
Fecha de Ingreso: junio-2015
Ubicación: Valencia - Venezuela
Mensajes: 2.448
Antigüedad: 9 años, 6 meses
Puntos: 263
Respuesta: Cuelgue de pagina al realizar Update

enviame la info al MP a ver en que te puedo ayudar amigo Ya que el problema no esta en este tema.
__________________
[email protected]
HITCEL
  #14 (permalink)  
Antiguo 12/01/2018, 09:52
 
Fecha de Ingreso: junio-2011
Ubicación: Lima Peru
Mensajes: 13
Antigüedad: 13 años, 6 meses
Puntos: 0
Respuesta: Cuelgue de pagina al realizar Update

Cita:
Iniciado por xfxstudios Ver Mensaje
enviame la info al MP a ver en que te puedo ayudar amigo Ya que el problema no esta en este tema.
Estimado, ya le envie los datos.

Quedo atento.

Etiquetas: campo, cuelgue, mysql, registro, sql, tabla, todo, update
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:30.