Cursos Servidores con Centos 6
Sistema Operativo ALDOS
Dezoft

Si algunos de nuestros foros, manuales, ALDOS, paquetería o proyectos te han resultado de ayuda, apreciaremos mucho nos apoyes con un donativo.

 Índice > Todo acerca de Linux > Programación y desarrollo Nuevo tema Publicar Respuesta
 Highscore Online con PHP MySQL pequeña duda
Tema anterior Tema siguiente
   
matusalen
Publicado en 21/09/12 03:58 (Leído 1093 veces)  

Nuevo
Forum User

Inscrito: 21/09/12 Publicaciones: 1
Hola amigos,tengo este pequeño problema,puede que aqui me puedan ayudar.

Hize un juego,como muchos que hay por internet y este tiene un highscore.
En este caso,las puntuaciones de los jugadores se guardan,junto con el nombre.

Todo funciona bien,pero el problema es el siguiente,si un jugador pone su nombre,pongamos Mario y tiene 1280 puntos,si luego el vuelve a jugar y vuelve a poner Mario con 1400 puntos,lo que hace es añadir otra tabla a la base de datos,pero no lo actualiza,lo que consigue con esto es ver,por ejemplo en la lista de puntuaciones de juego,muchos tios que se llaman mario con distintas puntuaciones. Confundido

Lo que me gustaria es que,si el jugador vuelve a poner el nombre Mario,se actualizaria solo la puntuacion de ese Mario sin insertar mas tablas a la base de datos.

Este es el php que uso para obtener las puntuaciones y enviarlas a MySQL:



PHP Formatted Code
<?php

$database = "base_datos"; //The database
$username = "nombre"; //username to connect
$password = "pasworld"; //password to connect
$host = "host_base_de_datos"; //host to connect to

function connect($d,$u,$p,$h) {
        mysql_connect($h,$u,$p);
        mysql_select_db($d);
}

connect($database,$username,$password,$host);

$name = $_GET["name"];
$score = $_GET["score"];
$code = $_GET["code"];
$game = $_GET["game"];

if($code == "key_game") {

        mysql_query("INSERT INTO highscores(ID_GAME,name,score)
        VALUES('"
.mysql_escape_string($game)."','".mysql_escape_string($name)."','".mysql_escape_string($score)."')");

}
else {
echo "Error no funciono!";
}

?>



Como se puede ver inserta los datos de ID_game, name y score a la base de datos.
¿como podria actualizar las puntuaciones si el nombre ya estaba en la base de datos?
saludos espero una respuesta amigos.
 
Perfil
 Citar
Gildus
Publicado en 23/09/12 04:17  

Nuevo
Forum User

Inscrito: 22/07/08 Publicaciones: 8
Holas, Lo que harias es usar l SQL UPDATE y no el INSERT INTO. Algo como:
PHP Formatted Code
UPDATE highscores SET score='".mysql_escape_string($score)."' WHERE name='".mysql_escape_string($game)."'
Ahora si tienes el valor del ID_GAME seria mejor aun, porque asi te aseguras que no sea a otro name duplicado. Por ejemplo:
PHP Formatted Code
UPDATE highscores SET score='".mysql_escape_string($score)."' WHERE name='".mysql_escape_string($game)."'
 AND ID_GAME='$idGame'
El valor de $idGame seria el valor que faltaria. Saludos Gildus
 
Perfil
 Citar
John J. Toro A.
Publicado en 04/10/12 08:49  

Moderador
Forum User

Inscrito: 19/02/07 Publicaciones: 119
País:Medellín - Colombia
Saludos,

Me confunde esta parte:
Quote by: matusalen

...

Lo que me gustaria es que,si el jugador vuelve a poner el nombre Mario,se actualizaria solo la puntuacion de ese Mario sin insertar mas tablas a la base de datos.

...



Supongo que seria "insertar mas registros"...

La idea es buscar el usuario, si existe lo actualiza sino lo adiciona.

Dependiendo la versión de MySQL, se puede emplear la sintaxis:

INSERT ON DUPLICATE KEY UPDATE


claro, con el nombre como clave o bien construir algo como:

SELECT si se obtuvieron resultados UPDATE de lo contrario INSERT


JohnToro
 
Perfil
 Citar
Contenido generado en: 0,39 segundos Nuevo tema Publicar Respuesta
 Todas las horas son UTC. Hora actual 11:09 .
Tema normal Tema normal
Tema persistente Tema persistente
Tema cerrado Tema cerrado
Nueva publicación Nueva publicación
Persistente con nueva publicación Persistente con nueva publicación
Cerrado con nueva publicación Cerrado con nueva publicación
Ver publicaciones anónimas 
Usuarios anónimos pueden publicar 
Se permite HTML Filtrado 
Contenido censurado