Resultados 1 al 5 de 5

php problema contador mysql

  1. #1 php problema contador mysql 
    Iniciado
    Fecha de ingreso
    Apr 2009
    Mensajes
    29
    Descargas
    0
    Uploads
    0
    Hola tengo un contador que cada vez que hago click en un boton html me lleva a una pagina php y me modifica un campo en una tabla de la base de datos. El problema es que a veces en lugar de sumar 1, me suma dos. Sabeis que puede ser?

    $conexion = mysql_connect("localhost", "usuario", "contraseña");
    mysql_select_db("basedatos", $conexion);

    $query = "SELECT num FROM visitas WHERE idvisita = 1";
    $resultado = mysql_query($query, $conexion);
    $fila = mysql_fetch_array($resultado);
    $numero = $fila['num'];
    $suma = '1';
    $calculo = $numero + $suma;

    $query = "UPDATE visitas SET num = $calculo WHERE idvisita= 1";
    $resultado = mysql_query($query, $conexion);


    he probado clearstat(), mysql_free_result(), mysql_close()

    si hago click en el boton y espero unos segundos hasta el proximo click, funciona bien.
    Citar  
     

  2. #2  
    Moderador HH
    Fecha de ingreso
    Dec 2001
    Ubicación
    Galiza
    Mensajes
    3.129
    Descargas
    0
    Uploads
    0
    Prueba a añadir al final (o al principio):

    $calculo = 0;
    mysql_close();
    Las ideas son como las pulgas, saltan de unos a otros pero no pican a todos... (George Bernard Shaw)
    Citar  
     

  3. #3  
    Iniciado
    Fecha de ingreso
    Apr 2009
    Mensajes
    29
    Descargas
    0
    Uploads
    0
    ya lo probe y tampoco funciono. el tema es que antes del update habia otro insert a otra tabla que tenia un campo del mismo nombre que tambien sumaba 1, y daba la impresion de que no liberaba la memoria y volvia a sumar otro 1 . He quitado el insert como solucion hasta que encuentre que es lo que pasa. muchas gracias.
    Citar  
     

  4. #4  
    Moderador Global Avatar de hystd
    Fecha de ingreso
    Jul 2005
    Ubicación
    1, 11, 21, 1211...
    Mensajes
    1.596
    Descargas
    58
    Uploads
    0
    ¿Cuantos segundos tienes que esperar para que puedas garantizar en cierta medida que no se cuenta dos (o más) veces?

    Si automatizases el proceso, por ejemplo con con herramientas del tipo Selenium IDE, BadBoy, etc... reduciendo al orden de milisegundos la ejecución (pulsación del botón), ¿También inserta el valor de 2? Haz la prueba...

    Tal vez sea un problema de concurrencia. Si es así, en PHP puedes establecer una bandera global, guardada por ejemplo como un elemento en el array $_SESSION, de forma que mientras esa bandera esté activa, no se realice ninguna operación. Cuando la operación en curso finalice, desactivas la bandera, de forma que cualquier otra petición a esa página ya pueda hacerse efectiva:

    Código:
    <?php
    session start();
    
    if ($_SESSION["bandera]"==1){
    	
    }else{
    	$_SESSION["bandera"]=1;
    	
    	$conexion = mysql_connect("localhost", "usuario", "contraseña");
    	mysql_select_db("basedatos", $conexion);
    	
    	$query = "SELECT num FROM visitas WHERE idvisita = 1";
    	$resultado = mysql_query($query, $conexion);
    	$fila = mysql_fetch_array($resultado);
    	$numero = $fila['num'];
    	$suma = '1';
    	$calculo = $numero + $suma;
    
    	$query = "UPDATE visitas SET num = $calculo WHERE idvisita= 1";
    	$resultado = mysql_query($query, $conexion);
    
    	$_SESSION["bandera"]==0;
    }
    ?>
    Otra opción, es que puedes aprovechar y bloquear la tabla en la que haces el UPDATE, de forma que cualquier otra consulta UPDATE sobre esa tabla no se efectuará hasta terminar la transacción actual. Esto lo puedes hacer con la consulta de MySQL:

    Código:
     LOCK TABLE visitas WRITE; 
    
    -- para bloqueo en un acceso de escritura (UPDATE, INSERT o DELETE)
    
    LOCK TABLE visitas READ;
    
    -- para bloqueo en un acceso a lectura de esa tabla (SELECT).
    
    -- y para desbloquear dicho bloqueo:
    
    UNLOCK TABLE visitas;
    Un saludo.
    El optimista tiene ideas, el pesimista... excusas

    Citar  
     

  5. #5  
    Iniciado
    Fecha de ingreso
    Apr 2009
    Mensajes
    29
    Descargas
    0
    Uploads
    0
    Hola muchas gracias por darme mas ideas. Voy a mirar lo de variable de session y tambien lo de bloquear tablas. Lo de automatizar el proceso puede ser buena idea tambien. Es algo que de momento lo he dejado apartado pero antes o despues puede que lo quiera arreglar. Gracias otra vez!
    Citar  
     

Temas similares

  1. [Ayuda] Problema Mysql JAVA
    Por Sedruol en el foro BASES DE DATOS
    Respuestas: 3
    Último mensaje: 07-03-2012, 01:15
  2. Contador de minutos y mensajes
    Por santia22 en el foro TELEFONIA
    Respuestas: 0
    Último mensaje: 12-06-2011, 02:25
  3. Problema con Mysql en Windows 7
    Por luis9rs en el foro WINDOWS
    Respuestas: 5
    Último mensaje: 30-12-2009, 10:14
  4. Contador
    Por kamome en el foro INGENIERIA INVERSA
    Respuestas: 3
    Último mensaje: 16-08-2006, 16:42
  5. Contador en VB
    Por Omicron en el foro PROGRAMACION DESKTOP
    Respuestas: 8
    Último mensaje: 06-01-2003, 06:21

Marcadores

Marcadores