Desarrollo Online de un marcador de records para un juego (III):
En el Servidor: PHP
En las entradas anteriores hablamos de la descripción del proyecto y de como instalar y crear nuestra base de datos (enlace1 y enlace 2). Ahora vamos a desarrollar el código del programa en PHP para manipular los datos que nos lleguen y mostrar los registros.
De los dos programas que comenté que hariamos en php, voy a empezar por explicar el que reinicia el marcador.
- Reiniciar el Marcador:
Este programa solo se usará cuando deseemos que el marcador se reinicie.El código sería el siguiente:
1). Inicio y conexion a la base de datos
Hay que indicar los datos de hosting, nombre de la base de datos y password. El password lo he cambiado a XXXXX, . uds, tendrian que cambiarlo a su hosting y su nombre de la base de datos.
<?php // Conectando, seleccionando la base de datos $link = mysql_connect('mysql.hostinazo.com', 'u431856591_marca', 'XXXXXXXX') or die('No se pudo conectar: ' . mysql_error()); echo 'Connected successfully<br>'; mysql_select_db('u431856591_marca') or die('No se pudo seleccionar la base de datos<br>');
//borro todos los registros que sean menores que minimo $query ="truncate datos"; $result = mysql_query($query) or die('<br>Consulta fallida al borrar datos<br> ' . mysql_error());
3) Insertar los registros vacios de datos:
for ($x=0; $x<=21; $x++) { $query = "INSERT INTO datos (id, jugador, pais, marcador) ". "VALUES (NULL, 'vacio', 'vacio', 0)"; $result = mysql_query($query) or die('Consulta fallida al anadir: <br>' . mysql_error()); }
Inserto 20 registros con los datos de jugador y pais como "vacio", y el marcador a "0"
4) Hago una consulta para mostrar los 20 mejores registros:
// Realizar una consulta MySQL $query = 'SELECT * FROM datos ORDER BY marcador DESC LIMIT 0,20'; $result = mysql_query($query) or die('Consulta fallida al mostrar resultados: ' . mysql_error());
5) Mostrar en la web el resultado obtenido de la consulta:
// Imprimir los resultados en HTML echo "<table>\n"; while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { echo "\t<tr>\n"; foreach ($line as $col_value) { echo "\t\t<td>$col_value</td>\n"; $minimo=$col_value; } echo "\t</tr>\n"; } echo "</table>\n"; echo "Minimo es: ". $minimo; echo "<br>"; // Cerrar la conexión mysql_close($link); ?>
Con este código conseguimos mostrar en la pagina web como quedaría la tabla de datos. Realmente este muestra de datos no la necesitamos, ya que lo que nos interesa solo es el borrado y rellenado de datos que hemos hecho en el paso nº 3.
Este archivo lo nombraremos como "reiniciarmarcador.php".
marcador.php
Ahora vamos a pasar al archivo que se encarga de añadir un nuevo resultado (junto con el nombre del jugador y pais) que es pasado por la url enviamos y nos mostrará una tabla de como queda la tabla de records. Esta tabla de record (que es una página web), la leermos con nuestro programa cliente, y la mostrará al jugador.1) Inicio y Conexión
Aqui nos conectamos a la base de datos, poniendo nuestros datos de alojamiento, nombre de la base de datos y contraseña.
?php // Conectando, seleccionando la base de datos $link = mysql_connect('mysql.hostinazo.com', 'u431856591_marca', 'XXXXXX') or die('No se pudo conectar: ' . mysql_error()); echo 'Connected successfully<br>'; mysql_select_db('u431856591_marca') or die('No se pudo seleccionar la base de datos<br>');
La url que enviamos sigue este patrón:
/*'url: ' http://www.marcadorjsbsan.hostinazo.com/marcador.php?jugador=jsbsan&pais=esp&marcador=200 */
Para tomar los datos de la url:
$jugador=$_GET['jugador']; $pais=$_GET['pais']; $marcador=$_GET['marcador'];
3) Comprobar el mínimo de puntuación que tengo en el marcador y si la puntuación que me pasan en la url es superior, la inserto:
$query = 'SELECT * FROM datos ORDER BY marcador DESC LIMIT 0,20';
$result = mysql_query($query) or die('Consulta fallida al mostrar resultados: ' . mysql_error()); while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { $registros +=1; foreach ($line as $col_value) { $minimo=$col_value; // es el ultimo valor que se va mostrando por fila el que me interesa ya que tiene el valor del marcador } } if ($minimo < $marcador or $registro<20) { if ($marcador>0) { //como el dato que recibo es mayor al minimo lo inserto: //inserto el nuevo registro, el mayor al dato minimo que tengo!!! /* inserto registro */ $query = "INSERT INTO datos (id, jugador, pais, marcador) ". "VALUES (NULL, '$jugador', '$pais', $marcador)"; $result = mysql_query($query) or die('Consulta fallida al anadir: <br>' . mysql_error()); } }Notas:
- Si no se incluye ningun dato en la url, no se inserta ningún dato, al ser marcador=0
-El dato de la puntuación lo tengo en la última columna, con lo cual es fácil y sabiendo cual es el mínimo usando el bucle Foreach que recorre las columnas de cada registro.
4) Muestro los datos en la web:
Para mostrar los datos, creando una tabla en html.
// Realizar una consulta MySQL $query = 'SELECT * FROM datos ORDER BY marcador DESC LIMIT 0,20'; $result = mysql_query($query) or die('Consulta fallida al mostrar resultados: ' . mysql_error()); // Imprimir los resultados en HTML echo "<table>\n"; while ($line = mysql_fetch_array($result, MYSQL_ASSOC)) { echo "\t<tr>\n"; foreach ($line as $col_value) { echo "\t\t<td>$col_value</td>\n"; $minimo=$col_value; } echo "\t</tr>\n"; } echo "</table>\n";
5) Borrado de datos no necesarios y cerrar la conexión.
Si tengo registros cuya puntuación es menos al minimo, los borro, para minimizar el tamaño de la base de datos:
//borro todos los registros que sean menores que minimo $query = "DELETE FROM datos WHERE marcador <$minimo"; $result = mysql_query($query) or die('<br>Consulta fallida al borrar datos sobrantes:<br> ' . mysql_error()); // Cerrar la conexión mysql_close($link); ?>
Pruebas:
Vamos a hacer un ejemplo, escribiendo directamente en el navegador la siguiente linea:
http://www.marcadorjsbsan.hostinazo.com/reiniciarmarcador.php
Obtenemos el reinicio del marcador:
Si escribimos:
http://www.marcadorjsbsan.hostinazo.com/marcador.php?jugador=jsbsan&pais=esp&marcador=200
Obtenemos el ingreso de un nuevo dato (jugador: jsbsan, pais: esp, marcador: 200)
Si escribimos varias direcciones más con distintos valores podeis ver el resultado:
http://www.marcadorjsbsan.hostinazo.com/marcador.php?jugador=juan&pais=mx&marcador=250
http://www.marcadorjsbsan.hostinazo.com/marcador.php?jugador=john&pais=usa&marcador=50
http://www.marcadorjsbsan.hostinazo.com/marcador.php?jugador=mary&pais=gb&marcador=350
En la próxima entrada veremos como hacer que los ordenadores "clientes" (los de los jugadores), cargen estos datos y los muestres a los jugadores.
Os dejo el enlace de descarga de las fuentes completas de los dos archivos .php
Saludos.
Nota:
1) Si habeis usado los enlaces de ejemplo, no olvideis en reiniciar el marcador:
http://www.marcadorjsbsan.hostinazo.com/reiniciarmarcador.php
2) Al estar usando una cuenta gratuita, tengo limitado los kbs de descarga, por lo que puede que el ejemplo no se ejecute.
3) Coloreado de código:
He usado para colorear el código el servicio de la página http://tohtml.com/
Nota: Enlace a indice del "Desarrollo Online": enlace