Foros del Web » Programando para Internet » PHP »

mysql increment indeseado

Estas en el tema de mysql increment indeseado en el foro de PHP en Foros del Web. Hola otra vez, esta es una de esas preguntas de php - mysql que pienso varias veces antes de lanzarlas al foro (porque puede ser ...
  #1 (permalink)  
Antiguo 11/08/2003, 11:52
 
Fecha de Ingreso: marzo-2003
Mensajes: 120
Antigüedad: 14 años, 8 meses
Puntos: 0
mysql increment indeseado

Hola otra vez,
esta es una de esas preguntas de php - mysql que pienso varias veces antes de lanzarlas al foro (porque puede ser algo obvio! , pero me tiene desesperado

resulta que tengo un sencillo juego en linea, en el el cual el usuario contesta preguntas de opcion multiple cuando da clic en la opcion correcta se redirecciona a una pagina que contiene una animacion y el siguiente script php

lo que hace es buscar un registro de score (puntaje) en la base de datos leer los puntajes, incrementar el numero, y luego re-escribir (update) el registro en la BD - no es mas!,
hasta donde entiendo esto deberia funcionar, pero el extraño fenomeno es que cada vez que lo ejecuto se incrementa DOS (2) VECES de tal manera que en cada clic el usuario se le adjudica el doble del puntaje
y el juego rebasa el tope y se termina antes de tiempo
he re-escrito completamente el codigo tres veces y nada


Código PHP:
<title>acertaste!</title>
<!-- finaliza la animacion  hay un html de refresco automatico 0 segundos -->
<meta http-equiv="Refresh" content="0; url=jugar.html">
<?
include "config.php"// obtengo los datos de conexion MYSQL
$conexion=$sock=mysql_connect(DBHOST,DBUSER,DBPASS);
mysql_select_db(DB);
// la seleccion
$query_select="SELECT no_preguntas,no_puntaje FROM calificaciones WHERE calificaciones.id=1";
$result_select=mysql_query($query_select,$conexion);
$fila_select=mysql_fetch_array($result_select);
$preguntas=$fila_select["no_preguntas"];
$puntaje=$fila_select["no_puntaje"];
// muestra valores actuales
echo "hay".$preguntas."preguntas";
echo 
"hay".$puntaje."puntaje";
// como la respuesta es correcta se incrementa el total de preguntas y el puntaje
$preguntas++;
$puntaje++;
// actualizo datos en la BD
$query_update="UPDATE `calificaciones` SET `no_preguntas` ='$preguntas',";
$query_update.="`no_puntaje` = '$puntaje' WHERE `id` = 1 LIMIT 1 ";
mysql_query($query_update,$conexion);
echo 
$query_select;
echo 
"\n";
echo 
$query_update;
?>
a alguno le ha sucedido?
alguien sabe donde esta el error?
Gracias un mega.
__________________
a christian can be a developer
and a free person
http://dinerodigitalip.blogspot.com/
  #2 (permalink)  
Antiguo 11/08/2003, 12:19
Avatar de nuevo  
Fecha de Ingreso: mayo-2003
Ubicación: Spain
Mensajes: 2.009
Antigüedad: 14 años, 7 meses
Puntos: 2
a ver, pero tu solo necesitas un CAmpo.... osea un ID, 1 por ejemplo.... o necesitas usar mas... y que el los vaya guardando... porque si solo necesitas 1º, no tienes que poner AUTOINCREMENT en el ID de tu base de datos... esa opcion la despinchas...
__________________
3w.valenciadjs.com
3w.laislatv.com
  #3 (permalink)  
Antiguo 13/08/2003, 17:45
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Yo usaria en lugar de:
<meta http-equiv="Refresh" content="0; url=jugar.html">

Código PHP:
<?
header 
("Location: jugar.html");
exit;
?>
Al terminar tu proceso de UPDATES y demas a tu BD .. (osease .. al final de tu código).

Parece que eso es lo que dá problemas ..

(de todas formas .. un "UPDATE" no genera un nuevo "ID" de un campo autoincremental ..)

Otro detalle ..
Código PHP:
$query_update.="`no_puntaje` = '$puntaje' WHERE `id` = 1 LIMIT 1 "
No sé para que usas LIMIT .. suponiendo que ese ID (campo) ha de ser "Único" y "autoincremental" .. osease .. una consulta de ese estilo ha de arrojarte UN sólo registro ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
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 19:11.