Marzo 03, 2011, 09:53:43 PM Ultima modificación: Marzo 03, 2011, 10:39:35 PM por netlork
Hola buenas noches!!.

Tengo una room para hacer login contra una base de datos mysql mediante httprequest y un script php.
El objeto que realiza el login hace la llamada en el evento step :

[gml]
   player=get_string("Nombre usuario","")
   while player == "" player=get_string("Nombre usuario","")

   pass=get_string("Contrase?a:","")
   while pass == "" pass=get_string("Contrase?a:","")

   postData = string('nombre='+player+'&contrasena='+pass)
   str=HTTPRequest("server","log.php","POST",0,postData)
  show_message(str)

   if  (str == "")  //Esto no esta funcionando
   {
       show_message("Usuario NO encontrado")
       room_goto(menu)
   
   }
    else
       {
           identificado = 1
           show_message ("Bienvenido "+str))
           room_goto(menu)
           
       }[/gml]

El caso es que el httprequest funciona y devuelve los valores correctos (comprobado), me devuelve el nick del usuario en la variable str.

El caso es que no se como hacer un control de error ante un fallo de login del usuario (es decir si introduce mal el usuario/contrase?a).
En teoria el httprequest devuelve el resultado del script php (el nick en este caso) o "" si da error.
He probado de todo en ese "if (str == "")", compararlo con el valor directo, comprobarlo con la funcion String(), con la funcion real() pero nunca consigo que funcione.

?Alguien que haya usado httprequest con mysql y haya hecho algo parecido?

Gracias y saludos de un nuevo jeje, que llevaba un tiempo visitandoos pero no me registre hasta hace poco, a la vez que pase de GM8lite a Pro.

#1 Marzo 03, 2011, 10:46:38 PM Ultima modificación: Marzo 03, 2011, 10:48:39 PM por klys
 se necesita saber que devuelve la funci?n cuando el usuario no existe (que es lo mismo de cuando el usuario fue mal escrito), probablemente sera 0

prueba compar?ndola con 0

---edit----

tu script no toma en cuenta si la contrase?a fue mal escrita?
Battlefield Galactic (Nombre piloto) Alpha 1.7.5.0
Juego Genero: Multiplayer Online Battle Arena!
Is more than 9000 APM!!

#2 Marzo 03, 2011, 11:17:37 PM Ultima modificación: Marzo 03, 2011, 11:28:10 PM por netlork
Ya lo resolvi (gracias a la ayuda de unos usuarios del foro oficial).

Lo he solucionado a?adiendo antes del if (str == 0)   lo siguiente:

[gml] str_temp=string_length(str);
for (i=0; i<=str_temp; i+=1)  str=string_replace(str,chr(10),"");[/gml]


El problema era que la funcion de httprequest devuelve "" si no hay resultado de la peticion php o falla, pero no se porque me a?adia chr(10) (salto de linea) al final de la variable.

Con ese for lo que hago es quitar todos los caracteres chr(10) que haya y asi ya funciona :)


EDIT: De momento no controlo la contrase?a, eso lo controlo en el script php, si el script php me devuelve el nick del usuario (tras la validacion interna de php) significa que los datos en GM estan bien, por eso necesitaba realizar aki esta comprobacion. Asi me evito enviar cualquier dato "peligroso" desde el propio gmaker.

EDIT2: Mas facil aun, en vez de todo eso que he puesto, queda mejor con:

[gml]    str=string_replace_all(str,chr(10),"");[/gml]

Cita de: netlork en Marzo 03, 2011, 11:17:37 PM
Ya lo resolvi (gracias a la ayuda de unos usuarios del foro oficial).

Lo he solucionado a?adiendo antes del if (str == 0)   lo siguiente:

[gml] str_temp=string_length(str);
for (i=0; i<=str_temp; i+=1)  str=string_replace(str,chr(10),"");[/gml]


El problema era que la funcion de httprequest devuelve "" si no hay resultado de la peticion php o falla, pero no se porque me a?adia chr(10) (salto de linea) al final de la variable.

Con ese for lo que hago es quitar todos los caracteres chr(10) que haya y asi ya funciona :)


EDIT: De momento no controlo la contrase?a, eso lo controlo en el script php, si el script php me devuelve el nick del usuario (tras la validacion interna de php) significa que los datos en GM estan bien, por eso necesitaba realizar aki esta comprobacion. Asi me evito enviar cualquier dato "peligroso" desde el propio gmaker.

EDIT2: Mas facil aun, en vez de todo eso que he puesto, queda mejor con:

[gml]    str=string_replace_all(str,chr(10),"");[/gml]

Eso mismo te iva a decir, que en ves de usar el for podias simplementes remplazar lo que tenga el string xD

Buen trabajo :D!

Estas creando un juego online? Se ve interesante tu proyecto!
Battlefield Galactic (Nombre piloto) Alpha 1.7.5.0
Juego Genero: Multiplayer Online Battle Arena!
Is more than 9000 APM!!

Bueno mi idea a muuuuyyyy laaargooo plazo es crear un juego online, por eso estaba haciendo estas pruebas de dar alta usuarios y login contra una base de datos mysql y php :)

Esto ya lo tengo conseguido en su base (los scripts de php, la base de datos y el GML necesario, todo funcionando). Pero aun queda mucho, tengo que pensar exactamente que quiero en el juego y pensar antes como hacerlo posible XD

La idea es que el jugador tenga recoleccion de recursos, construccion de edificios, crafting, un inventario, posesiones, mundo persistente, etc. Algo asi a un minecraft pero en 2d mezclado con rts (?ambientado en el espacio?) XD
Crear un mini-mmo :P pero vamos, que es algo que va para muy largo, de momento voy haciendo estas cosas mas por curiosidad y para ir encajandolas poco a poco.

Primero tengo que terminar mi juego inicial, el tipico, un juego de coches con IA y opcion de 2 jugadores a pantalla completa. Lo tengo ya casi listo, me faltan los ultimos retoques (contador de vueltas y checkpoints).