Dedicado a mis proyectos en Gambas ,un lenguaje de programación parecido al Visual Basic + Java pero ampliamente mejorado y...¡¡para gnu/linux!!.La potencia del gnu/linux sumada a la facilidad del Basic



Consultas, Desarrollo de programas y petición de presupuestos:



Mostrando entradas con la etiqueta mysql. Mostrar todas las entradas
Mostrando entradas con la etiqueta mysql. Mostrar todas las entradas

miércoles, 22 de octubre de 2014

Mi nueva publicación en Lulu.com: Aplicación Cliente-Servidor: Marcador Online


Mi nueva publicación en Lulu.com: Aplicación Cliente-Servidor: Marcador Online

Os dejo aqui mi nueva publicación en lulu.com.: enlace a lulu.com

Es la recopilación en el formato en pdf, del proyecto que estuve desarrollando en este mismo blog de como hacer un marcador online usando php, mysql, python y gambas3.

Espero que os guste.


Saludos

miércoles, 8 de octubre de 2014

Desarrollo Online de un marcador de records para un juego (III): En el Servidor: PHP


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>');

2) Borrado de los todos los datos
//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());

Como veis en vez de usar la orden DELETE de mysql, uso la orden TRUNCATE, que hace lo mismo, pero reinicia el contador de la variable ID, esto lo hago por un mero hecho de como se muestra la tabla en la web, luego ese ID en el programa del cliente no se va a usar.

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());

Aquí lo mas interesante es la sentencia SQL que uso, ya que me muestra un limite de los 20 primeros registros, ordenador de forma descendiente por el marcador, obtendremos asi los regirstros con mayor puntuación primero. Todo esto se guarda en la variable $result

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>');

2) Toma de datos de la url.
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

lunes, 6 de octubre de 2014

Desarrollo Online de un marcador de records para un juego (I)

Marcador de Records


Desarrollo Online de un marcador de records para un juego



1) Descripción del proyecto
Competir entre los jugadores es la forma de dar más interés a una juego. La forma más sencilla de competencia es una tabla de puntuaciones máximas conseguidas por los jugadores, donde se vean reflejados. Ser el primero y/o estar por delante de los otros jugadores es un modo de que los jugadores sigan "enganchados al juego", intentando mejorar su posición en la tabla de records aumentando sus puntuaciones.

¿donde situar esta tabla? Esta tabla debería de estar accesible para el juego desde cualquier lugar.
No nos vale una carpeta compartida, ya que solo lo tendremos accesibles a ordenadores de nuestra intranet o red interna. O sea la podemos subir a un sitio web en internet y tenerla siempre online, para que sea posible leerla y añadirle los resultados que consiga el jugador (el jugador debe de disponer de conexión a internet) las 24 horas del día, los jugadores pueden estar en cualquier parte del mundo.

Tendremos que crear un "sitio" web encargado de servir los datos  y modificar la tabla de  datos (el llamado ordenador servidor).
El programa  "cliente", el que tendrá instalado en su ordenador cada jugador, se encargará de enviar y leer los datos al servidor, mostrándolo en la pantalla del ordenador del cliente.



Esquema de varios clientes conectados a través de internet a un servidor



2) Lenguajes a usar en el servidor
Para guardar los datos usaremos una base de datos, en concreto el motor de bases de datos MySQL.
Algunos sitios web, permiten que se puedan acceder a la base de datos directamente. Normalmente esto no es posible, y/o hay que pagar un suplemento para hacerlo.
Lo más corriente es que para acceder a la base de datos, usemos un lenguaje de programación del lado del servidor. Para el lenguaje del servidor, se podrían usar varios: Python, PHP, Java,  etc.
Normalmente, y es lo más frecuente, los alojamientos web ofrecen servicios para MySQL y soportan el lenguaje PHP.  Por lo cual usaremos PHP, que es  un lenguaje muy utilizado en las páginas web y del  puedes encontrar mucha información en internet (manuales, tutoriales, foros, etc).

3) Buscando alojamiento web.
Existen multitud de empresas que nos ofrecen alojamientos web. Como lo que vamos a hacer  es una prueba, vamos a usar un alojamiento web gratuito que acepte tener bases de datos MySQL y PHP. Si fuera para usarlo en "producción", si deberíamos tener un alojamiento contratado para tener más garantías del funcionamiento del servicio.

He encontrado este alojamiento,  http://www.hostinazo.com , donde se pueden crear cuentas gratuitas, y tiene los servicios que necesitamos (admite el lenguaje PHP y bases de datos MySql),y  es el que voy a usar.

4) Implementación al lado del servidor
4.1) Crear la base de datos en el alojamiento.
Para crear la base de datos en el alojamiento web, vamos a usar la herramienta PHPmyAdmin.
¿que datos vamos a guardar en la base de datos?
Vamos a crear una tabla "datos", con los campos siguientes:

  • id: identificador único y autonumérico  para cada registro
  • jugador: nombre del jugador
  • pais: país de donde es el jugador (lo ponemos sin acento para que no de problemas)
  • marcador: puntuación


Se podían añadir más campos,  por ejemplo el nivel, la fecha , etc., pero nos quedamos con estos campos que son los típicos.

4.2) Crear el programa que nos de información del  marcador de records
Este programa lo crearemos mediante PHP  y se encargará de:
1) Leer las variables que se le pasen en la url, y con estos datos,  añadirlo a la tabla de datos de la base de datos.
2) Borrar registros que no sirvan: Vamos a limitar el número de registros a 20, para que solo guarde los 20 mejores resultados. Conseguimos que así que la base de datos ocupe muy poco en el sitio web. Con lo cual abrimos la posibilidad de crear más tablas de datos para distintos juegos.
3) Salida de datos del marcador: nos muestra los registros de la tabla de la base de datos, en formato html.

5) Implementación al lado del cliente
Para el lado del cliente, podemos usar cualquier lenguaje (gamba3,python, java, C,etc) que sea capaz de leer páginas web o por lo menos que tenga una librería o módulo para tal fin.
Vamos a usar la url de la página web para pasar los datos al servidor, siendo el servidor el encargado de leer e insertar los datos nuevos en la tabla.
Luego, nuestro programa Cliente,  simplemente leyendo la salida que genere el programa cliente, (que será una página web en formato html), obtendrá los datos de la tabla de records, para mostrar en la pantalla del ordenador cliente.


Continuaremos en la siguiente entrada, describiendo la parte del servidor: uso de PhpMySql y PHP

Nota: Enlace a indice del "Desarrollo Online": enlace

Saludos

Jsbsan