Foros del Web » Programando para Internet » PHP »

TOP players de una DB MSSQL en base a otra DB MySQL

Estas en el tema de TOP players de una DB MSSQL en base a otra DB MySQL en el foro de PHP en Foros del Web. Hola amig@s, Desde hace unas semanas empecé un proyecto para una web de un juego online. La cuestion es que vine haciendo toda la web ...
  #1 (permalink)  
Antiguo 16/02/2006, 17:45
Avatar de -=ArgoN=-  
Fecha de Ingreso: octubre-2005
Ubicación: Barcelona, España
Mensajes: 843
Antigüedad: 18 años, 6 meses
Puntos: 1
TOP players de una DB MSSQL en base a otra DB MySQL

Hola amig@s,
Desde hace unas semanas empecé un proyecto para una web de un juego online. La cuestion es que vine haciendo toda la web en Flash ya que se me da bastante bien.
El tema es que ya lo tengo todo bastante preparado para hacer un ránking de los jugadores pero lo que me falta es el archivo.php clave para relacionar 2 bases de datos y el mismo flash.

Les explico como va el tema:

1) Tengo una DB MySQL con unos usuarios registrados. Les pongo la estructura de la tabla MySQL:

// id // acc// nick // pass // email // nombre // ciudad // edaddia // edadmes // edadano // votos // NIVbool // EKSbool // REPbool // VOTbool // MAILbool // NIVrang // BIMG_x // BIMG_y // INSL //

Esta tabla viene a ser el sitio donde se guardan los registros de la web.

2) Tengo otra tabla MSSQL, esta si ya es la del juego en si. De esta tabla solo me interesan 4 de las columnas:

cCharName // sLevel // iEK // iPopular

3) Aqui viene lo dificil (para mi). Lo que quiero conseguir es, en base a los datos del registro, devuelva al flash unos datos u otros.
Vamos por partes. Primero de todo lo que tiene que hacer el php es:
  • Cuando el flash ejecute el php, este tiene que, para cada usuario registrado, recorrer toda la tabla con el id y devolver al flash cada uno de los datos (los marcados en verde) de la tabla junto con la id detras (no?) para que no se mezclen los datos y quede ordenado. Algo asi: &acc=&over_1& (en flash se usan &)
  • Cuando el php recorra la tabla, habra ciertos valores (los marcados en rojo) que son booleanos, es decir, indican si hay que consultar o no a la DB del juego.
    Si NIVbool o EKSbool o REPbool son iguales a false, entonces tiene que devolver un 0. Si son true, lo que hay que hacer es conectar con la DB MSSQL y devolver: sLevel, iEK y iPopular de cada cCharName, que se corresponde a nick de la DB MySQL...
  • Una vez se han consultado estos 3 valores de la tabla MSSQL hay que colocarles el _id detras y mandarlos hacia la pagina flash.

Siempre habra que mandar los valores con _ + el id detras. De esta forma, cuando tenga los datos en el flash podre ordenarlos de la forma que quiera ya que datos con un mismo _id detras se corresponderan a una misma persona...

Eso es todo. Os lo he explicado asi con palabras porque mis conocimientos de php y sql son escasos (aunque aprendo muy rapido )

Os hago un resumen de lo que significa todo esto: un usuario se registra, pone sus datos, email, ciudad, edad, y hay unos check box que indican si esa persona quiere que se muestre el nivel de su personaje en el juego asi como dos otras caracteristicas...
Luego, en el codigo actionscript lo que hare es operar esos datos conforme a una formula y luego ordenarlos de mayor a menor y colocarlos en un menu desplazable.

Bueno, creo que todo esto se resume en unas cuantas linias de codigo que nadie vera... pero que se le va a hacer...

Gracias por su ayuda,

ArgoN
  #2 (permalink)  
Antiguo 17/02/2006, 07:07
Avatar de -=ArgoN=-  
Fecha de Ingreso: octubre-2005
Ubicación: Barcelona, España
Mensajes: 843
Antigüedad: 18 años, 6 meses
Puntos: 1
Alguien tiene alguna idea de como hacerlo? aunque sea solo un esquema De ahi ya me buscaria la vida, pero necesito una ayudita por favor...

gracias..

ArgoN
  #3 (permalink)  
Antiguo 17/02/2006, 08:02
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
El "esquema" sería que primeo veas si desde PHP te puedes conectar a tu BBDD MS SQL Server.

No todo servicio de hosting con PHP por ejemplo dispone de las extensioens (mssql u ODBC) para usar MS SQL Server. Esto debes confirmarlo antes de nada.

Luego tendras que aprender a conectarte a MS SQL Server y hacer la consulta SQL que necesites para extraer tus datos. Lo mismo con las funciones de Mysql respectivas.

Todo el manejo que hablas de flash .. id's y demás no entendí nada. Hablas de "flags" y recorrer tablas .. pero no se trata de "recorrer tablas" sino de hacer consultas SQL que van a entregarte los datos que coincidan con tus condiciones (valga la rebundancia) .. es decir .. tu haces consultas SQL tipo "dato los datos que el campo tal sea igual a tal valor" .. Como dices trabajar con dos BBDD diferentes .. con ese juego de datos ya obtenido serán los que hagas otro tipo de consultas SQL sobre la otra ("recorriendo" o con SQL más directo todo en una a la vez).

Explica si ya sabes usar MS SQL Server desde PHP .. si puedes usarlo en tus servidores .. si sabes usar Mysql ya o no .. que tanto conoces el SQL particular de MS SQL Server y de Mysql. Eso es lo primero que debes hacer. Cuando eso lo tengas claro podrás ver o darle mejor otro enfoque a la solución de tu problema.

También será necesario que sepas como interactuar de forma generar con PHP y tu Action Script de Flash para tener la "base".

Un saludo,
  #4 (permalink)  
Antiguo 17/02/2006, 08:43
Avatar de -=ArgoN=-  
Fecha de Ingreso: octubre-2005
Ubicación: Barcelona, España
Mensajes: 843
Antigüedad: 18 años, 6 meses
Puntos: 1
Gracias Cluster por responder, ya creia que nadie me responderia...
Veras la cuestion es que tengo que trabajar con varias cosas a la vez.
A ver si me se explicar mejor:
Lo que yo tengo es un formulario en mi flash para registrar una serie de datos introducidos en campos de texto.
Aqui esta el php que uso para enviar estas variables a una DB MySQL (del mismo dominio que la web):

registrar.php
Código PHP:
<?php 

include('conexion.php');
$link Conectarse();

function 
quitar($mensaje)

$mensaje str_replace("<","&lt;",$mensaje); 
$mensaje str_replace(">","&gt;",$mensaje); 
$mensaje str_replace("\'","'",$mensaje); 
$mensaje str_replace('\"',"&quot;",$mensaje); 
$mensaje str_replace("\\\\","\",$mensaje); 
return $mensaje; 


function comprobar_email($email){ 
    $mail_correcto = 0; 
    if ((strlen($email) >= 6) && (substr_count($email,"
@") == 1) && (substr($email,0,1) != "@") && (substr($email,strlen($email)-1,1) != "@")){ 
       if ((!strstr($email,"'")) && (!strstr($email,"\"")) && (!strstr($email,"\\")) && (!strstr($email,"\$")) && (!strstr($email," "))) { 
          if (substr_count($email,".")>= 1){ 
             $term_dom = substr(strrchr ($email, '
.'),1); 
             if (strlen($term_dom)>1 && strlen($term_dom)<5 && (!strstr($term_dom,"@")) ){ 
                $antes_dom = substr($email,0,strlen($email) - strlen($term_dom) - 1); 
                $caracter_ult = substr($antes_dom,strlen($antes_dom)-1,1); 
                if ($caracter_ult != "@" && $caracter_ult != "."){ 
                   $mail_correcto = 1; 
                } 
             } 
          } 
       } 
    } 
    if ($mail_correcto) 
       return 1;
    else 
       return 0;


$comp_email = quitar($HTTP_POST_VARS["mailL"]);
$i = comprobar_email($comp_email);
if ($i != 0)
{
$sql = "SELECT id FROM usuarios WHERE nick='".quitar($HTTP_POST_VARS["
usuL"])."'"; 
$result = mysql_query($sql); 
if($row = mysql_fetch_array($result)) 

echo "&estatus=ocupado&";

else
{
$sql = "INSERT INTO usuarios (acc, nick, pass, email, nombre, ciudad, edaddia, edadmes, edadano, votos, NIVbool, EKSbool, REPbool, VOTbool, MAILbool, NIVrang, BIMG_x, BIMG_y,  INSL ) VALUES ("; 
        $sql .= "'".quitar($HTTP_POST_VARS["
accL"])."'";
        /* aqui van todos los otros [...]*/
        $sql .= ",'".quitar($HTTP_POST_VARS["
INSL"])."";
        $sql .= "
)";
mysql_query($sql); 
echo "
&estatus=ok&";
}
mysql_free_result($result); 
mysql_close(); 
}
else
{
echo "
&estatus=nomail&";
}
?>
La gran mayoria del script lo hize cogiendo cosas de aqui y de alla, o sea que no estoy muy familiarizado con el php aun =(

Una vez se han registrado en la BD mi php para poder logear hace lo siguiente:

login.php
Código PHP:
<?php
include('conexion.php');
$link Conectarse();
if(isset(
$_POST["acc"]) && isset($_POST["pass"]) && isset($_POST["char"])) {
    
$accN $_POST["acc"];
    
$passN $_POST["pass"];
    
$nickN $_POST["char"];
    echo 
"&estatus=$passN&";
    
$result_pass mysql_query("SELECT pass FROM usuarios WHERE acc='$accN'");
    
    if(
$row_pass mysql_fetch_array($result_pass)) {
        if(
$row_pass["pass"] == $passN) {
            
//las contraseñas coinciden...
            
$result_char mysql_query("SELECT nick FROM usuarios WHERE acc='$accN'");

            if(
$row_char mysql_fetch_array($result_char)) {
                if(
$row_char["nick"] == $nickN) {
                    echo 
"&estatus=ok&"//el personaje esta registrado y la contraseña es correcta
                    /* aqui estoy intentando crear variables de sesion para que el usuario no tenga que loguearse cada vez que entre... */
                    
$_SESSION['cuenta']=$accN;
                    
$_SESSION['password']=$passN;
                    
$_SESSION['personaje']=$nickN;
                } else {
                    echo 
"&estatus=pj_mal&"//nombre del personaje registrado incorrecto
                
}
            } else {
                echo 
"&estatus=nopj&"//el personaje ingresado no existe en esta cuenta
            
}
            
mysql_free_result($result_char);
        } else {
            echo 
"&estatus=pass_mal&"//contraseña incorrecta
        
}
    } else {
        echo 
"&estatus=noacc&"//La cuenta ingresada no esta registrada
    
}
    
mysql_free_result($result_pass);
}
mysql_close();
?>
En otro tema de este mismo foro ya pregunte porque solo me considera el primer personaje que encuentra ya que si se da el caso que para una misma cuenta hay mas de un personaje, solo reconoce el de id mas baja. Creo que no estoy haciendo las cosas como deberia... necesito saber mas "comandos" para sql ya que con lo poco que se intento "ir tirando".

Luego lo que yo queria conseguir es un php (top.php) que mande todas las variables de la BD MySQL al flash de manera ordenada. Lo de que hay que conectar a otra DB MSSQL tiene su historia porque esta BD esta en un host dedicado (accedo a el mediante: http://hd-t2472cn.privatedns.com) al juego este... asi que lo que hago es colocar el php en ese host y luego accedo a el directamente (ya que con un php colocado en el host de la web y que acceda a la BD MS SQL de este server privado creo que no es posible...

Por poner un ejemplo, ya tengo hecho un php que lo que hace es devolver el nivel del personaje que se consulta. Lo hice para hacer un login de la pagina flash que pide un nivel minimo para entrar...

check.php (alojado en el servidor dedicado)
Código PHP:
<?
error_reporting 
(0);
$dbhost "la_ip_del_server";
$dbuser "el_user";
$dbpasswd "******";

$msconnect=mssql_connect($dbhost,$dbuser,$dbpasswd);
$selected=mssql_select_db('ws1'$msconnect);
$charname $_POST["char"]; /*esta variable viene directa del flash, pero podria venir del php que quiero armar para hacer el top players... */

$consulta sprintf("SELECT * FROM CHARACTER_T WHERE cCharName LIKE '%s%%'"$charname);

$result=mssql_query($consulta);
while(
$row=mssql_fetch_array($result))
           echo 
"&estatus=$row[sLevel]&"/*esto va para el flash, pero tendria que volver a top.php para manejar los datos. */
?>
Todo esto para mi, sin haber hecho nunca nada de php ni sql me parece un poco complicado pero se que con esfuerzo todo se aprende igual que aprendi ActionScript. La manera de interactuar entre php y flash la tengo bastante clara. Siempre uso:

Código:
check_lv = new LoadVars();
checked_lv = new LoadVars();
check_lv.char = character;
check_lv.sendAndLoad("http://hd-t2472cn.privatedns.com/verificar/check.php", checked_lv, "POST");
[...]
Y los resultados que obtengo son de la clase: &estatus=ok&, &estatus=pass_mal& y cosas asi...

Espero que me sepan ayudar ya que los que venimos de flash y AS no sabemos muchas veces como preguntar las cosas aqui...

Mil gracias amigos

ArgoN

Última edición por -=ArgoN=-; 17/02/2006 a las 08:50
  #5 (permalink)  
Antiguo 17/02/2006, 09:02
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 22 años, 3 meses
Puntos: 129
En otro tema de este mismo foro ya pregunte porque solo me considera el primer nick que encuentra y es que creo que no estoy haciendo las cosas como deberia... necesito saber mas "comandos" para sql ya que con lo poco que se intento "ir tirando".

bueno .. es que se supone que tus "nick" así como los consultas deberían ser "unicos". Es decir . .en tu registro debes validar que el nick que escoja tu usuario no exista ya en tu BBDD. .. Por lo demás no sé por qué no validas al usuario con su usuario/contraseña en una sóla consulta SQL y lo desglosas en dos consultas SQL .. Para validar al usuario lo que importa es que el par: usuario/contraseña coincidan (a no ser que quieras personalizar el mensaje de error en el "login" y decir "tu contraseña no es correcta" o no existe tal usuario con tal nick).

De todas formas .. consulta SQL a realizar tiene que obtener el password del usuario bajo el nick que dimos y ahí si quieres comparar por separado "usuario y password":

SELECT nick,password FROM usuarios WHERE nick='$nick'

Y luego .. ya teniendo su "password" de ese NICK en concreto (o cual es el dato que usan para el login? . nick? o que otro campo? acc? ...) los comparas con PHP como haces .. Pero mejor es:

SELECT nick,password FROM usuarios WHERE nick='$nick' and password='$password'

Y el password ya no es necesario que lo andes propagando en una variable de sesión .. ($_SESSION['password']=$passN;) para que lo usas? ..

Eso serían algunos comentarios sobre el código que expusistes .. pero hablas de "MS SQL server" y de un montón de cosas más. No has aclarado si tu ya sabes usar MS SQL Server (al igual más o menos que PHP) o incluso que tu servidor que corre PHP soporte MS SQL Server (por qué no todos lo hacen y menos "por defecto" .. lo normal es que se tenga que habilitar/instalar la extensión mssql para PHP). Comenta si usas un servicio de hosting o tu "PC" como servidor y que Sistema Operativo, esto es crucial para ver si podras seguir o no con lo que pretendes.

Un saludo,

PD: La gente no te respondía por qué no veía lo que ya has hecho . .para otra vez ya sabes que debes adjuntar toda la información que dispongas para que la gente se anime a intentar ver que te pueda suceder.
  #6 (permalink)  
Antiguo 17/02/2006, 15:18
Avatar de -=ArgoN=-  
Fecha de Ingreso: octubre-2005
Ubicación: Barcelona, España
Mensajes: 843
Antigüedad: 18 años, 6 meses
Puntos: 1
Cita:
Iniciado por Cluster
Pero mejor es:

SELECT nick,password FROM usuarios WHERE nick='$nick' and password='$password'

Y el password ya no es necesario que lo andes propagando en una variable de sesión .. ($_SESSION['password']=$passN;) para que lo usas? ..
De acuerdo, tienes razon, ni se para que queria usar el password en una variable de sesion.
A lo que me referia yo es que tengo 3 campos a validar entonces no se como emparejarlo... Esta el nombre de cuenta (acc), la contraseña (pass) y el nombre del personaje (char). Para un mismo nombre de cuenta (acc) la contraseña (pass) esla misma pero pueden haber 2 nombres de personajes (char) distintos. Es decir, puede haber por ejemplo:

acc=over
pass=esteroide
char=ManolitoX

y tambien:

acc=over
pass=esteroide
char=-TheOwner-

Cita:
Iniciado por Cluster
pero hablas de "MS SQL server" y de un montón de cosas más. No has aclarado si tu ya sabes usar MS SQL Server (al igual más o menos que PHP) o incluso que tu servidor que corre PHP soporte MS SQL Server (por qué no todos lo hacen y menos "por defecto" .. lo normal es que se tenga que habilitar/instalar la extensión mssql para PHP). Comenta si usas un servicio de hosting o tu "PC" como servidor y que Sistema Operativo, esto es crucial para ver si podras seguir o no con lo que pretendes.
Uf, veo que en PHP cuesta mas hacerse entender que en AS, por eso te decia que muchas veces los "flasheros" no sabemos como dirigirnos a este foro. Pero eso va bien saberlo

Vamos a ver. A ver si consigo dar en la clave del asunto. Se trata de un juego online que consume algunos recursos y necesita estar 24/7 todos los dias del año encendido asi que no estabamos dispuestos a dejar nuestros PC's encedidos para eso. Lo que hicimos es contratar un servidor dedicado de pago, ubicado en Canadá para que nos hiciera de host. Las caracteristicas del host son:
  • SO: Microsoft Windows Server 2003
  • Microsoft SQL Server 2000
  • PHP operativo
Y mis conocimientos en php y sql son bastante parecidos, empeze hace unas semanas ya que hasta ahora no habia necesitado manejar BD. (Muchas cosas del php mas o menos se para que sirven pq ya estoy bastante familiarizado con el ActionScript) aunqe la mayoria de funciones aun no las domino.

Bueno, despues de estas declaraciones a ver si me puedo explicar con lo del top players... Empiezo por el final:
Lo que tendria que llegar al flash son paquetes de informacion (cada paquete seria un jugador), y cada paquete contendria informacion de la BD MySQL (del registro de usuarios de la web) y, dependiendo de si NIVbool, EKSbool, REPbool son true, habria que consultar a la BD MS SQL del host dedicado.
Este ultimo punto se tendria que hacer con un archivo PHP alojado en el host dedicado que enviara la informacion al archivo PHP alojado a la web no? Es que no lo se... por eso pregunto..

Bueno voy a arreglar lo del login.php y a empezar a formar el top.php, a ver si almenos se construir la estructura principal...

Gracias de nuevo

Saludos

Última edición por -=ArgoN=-; 17/02/2006 a las 15:46
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 14:27.