En estos días estoy más en esto del PHP, pero sinceramente no sé casi nada de PHP. Así que me gustaría me ayudaran con este problema:
Tengo un juego, y en este quiero crear un sistema de Log-in que me sincronize las cuentas que se crean con un script PHP, y que desde otros scripts PHP pueda leer esas cuentas con $_SESSION (creo que era así..xD)
no entiendo muy bien tu pregunta, para comenzar la variable $_SESSION es una superglobal array que guarda informacion que puede ser usada, por ejemplo, para almacenar una variable de sesion, ojo esto no significa que sea un loging, esta variable guarda datos en una misma pestaña o explorador en una sola computador, por decirlo asi, en esta variable puedes guardar por ejemplo un nombre, entonces mientras la persona tenga abierta esa pagina y recargue la pagina o navege atravez de ella ese nombre siempre estara guardado, sin embargo en el momento de cerrar el explorador esa variable se pierde, esta variable junto con cookies pueden usarse para por ejemplo, guardar el login de alguien por un periodo de 10 minutos, una hora o dias incluso si se cerro el explorador.
ahora bien ya explicado eso si lo que tratas de decir es un sistema "multiplayer" en base a php y nada mas, no, no se puede, el php es un codigo que es procesado por el servidor y luego te envia el resultado en forma de html, el php no puede de ninguna manera sin otra cosa,digase sql, conectarte a ti a otras personas.
Bueno, creo que fue mi culpa, me falto explicarme...xD
No intento crear un sistema multiplayer, no es mi intención ni lo será, lo que realmente intento detrás de todo esto es crear una manera de ejecutar un script PHP desde GMS (ya lo hice), pero que se ejecute sólo si el usuario tiene sesión iniciada, esto para evitar intrusiones de agentes externos (juankers XD)
Cita de: NiuWeb en Noviembre 20, 2015, 10:19:00 PM
Bueno, creo que fue mi culpa, me falto explicarme...xD
No intento crear un sistema multiplayer, no es mi intención ni lo será, lo que realmente intento detrás de todo esto es crear una manera de ejecutar un script PHP desde GMS (ya lo hice), pero que se ejecute sólo si el usuario tiene sesión iniciada, esto para evitar intrusiones de agentes externos (juankers XD)
si el caso es que tu quieres que se ejecute un script en php solo si el usuario esta logeado(a juro tienes que usar sql(soy venezolano y la expresion "a juro"significa si o si)) pues puedes usar algo asi:
<?php
$usuario =$_GET['usuario']
$mysql_server = "url donde esta alojado el servidor sql";
$mysql_username = "tu usuario";
$mysql_password = "tu clave";
$mysql_database = "el nombre de la base de datos";
$mysql_table = "la tabla en la que esten los datos";
//conectar a base de datos
$con = mysql_connect($mysql_server,$mysql_username,$mysql_password) or die('Can not connect to server');//nos conectamos al servidor donde se aloja el sql
mysql_select_db($mysql_database) or die('Can not connect to database');//seleccionamos la base de datos en la que trabajaremos
$result = mysql_query("select `nombre`from $mysql_table where `nombre`= $usuario")
$numero_resultados=mysql_num_rows($result);
if ($numero_resultados==1)
{
//tu script
}
else
echo"usuario inexistente";
mysql_close($con);
?>
sin embargo esta no es la unica forma de hacerlo, tambien se puede usar la variable session y que guarde que el usuario se le concedio acceso, pero no se como trabaja esa superglobal con el gamemaker y ademas es menos seguro que hacer una consulta cada vez que se vaya a realizar una accion.
Más o menos entiendo eso :-[
Pero quisiera saber como puedo, por ejemplo:
cree un sistema de cuentas en GMS, que almacena la cuenta con usuario y contraseña, y necesito que, al usar el script PHP, éste detecte que 1)- El script se esté ejecutando desde el juego, y 2)- Que esté registrado y loggeado correctamente
ok, vamos a considerar que ya tienes lista la base de datos y que te programa esta listo
seria algo como esto, en el programa colocas
[gml]
//en el create o donde vayas a ejecutar el login
usuario = get_string("usuario","")
pass = get_string("pass","")
http_get(url+"?usuario="+string(usuario)+"&pass="+string(pass))
//en el evento asyncrono
estatus = ds_map_find_value(async_event,"status")
if estatus ==0
{
resultado = ds_map_find_value(async_event,"result")//donde resultado es la respuesta del servidor que por ejemplo sea 1 si todo ocurrio perfectamente y 0 si no
if resultado == 1
{
//lo que sea que quiera que aga el juego cuando se logee correctamente
}
}
[/gml]
en el php seria lo que ya te puse
<?php
$usuario =$_GET['usuario']
$pass =$_GET['pass']
$mysql_server = "url donde esta alojado el servidor sql";
$mysql_username = "tu usuario";
$mysql_password = "tu clave";
$mysql_database = "el nombre de la base de datos";
$mysql_table = "la tabla en la que esten los datos";
//conectar a base de datos
$con = mysql_connect($mysql_server,$mysql_username,$mysql_password) or die('Can not connect to server');//nos conectamos al servidor donde se aloja el sql
mysql_select_db($mysql_database) or die('Can not connect to database');//seleccionamos la base de datos en la que trabajaremos
$result = mysql_query("select `nombre` from $mysql_table where `nombre`= $usuario and `pass`= $pass ")
$numero_resultados=mysql_num_rows($result);
if ($numero_resultados==1)
{
//tu script
echo "1";//como respuesta de que todo fue bien
}
else
echo"0";//si todo fue mal
mysql_close($con);
?>
como recomendacion te diria que entres en el manual de php para que trates de aprender esto, en internet hay muchos codigos que puedes usar como ejemplos, el que te puse arriba en realidad es uno muy simple, no tiene ni encriptacion, ni limpieza de caracteres especiales ni se a escapado las sentencias sql, es mas, si no se escapan las variable que introducira el sql te pueden destruir la base de datos, pero no te preocupes eso se hace con mysql_real_escape_string
Bueno, pues en parte me ayuda, pero necesito realmente sincronizar mis cuentas del juego con una base de datos para poder ejecutar ese script.
Siendo que en el juego creas tu cuenta y esta se crea en la base de datos
Cita de: NiuWeb en Noviembre 21, 2015, 12:09:44 AM
Bueno, pues en parte me ayuda, pero necesito realmente sincronizar mis cuentas del juego con una base de datos para poder ejecutar ese script.
Siendo que en el juego creas tu cuenta y esta se crea en la base de datos
no entiendo si preguntas o afirmas cuando dices
Citarpero necesito realmente sincronizar mis cuentas del juego con una base de datos para poder ejecutar ese script.
si preguntas que si necesitas una base de datos si, si la necesitas, no conosco ninguna manera de almacenar una cuenta con password en un servidor sin usar una base de datos, quisas se podria usar lo que hablabamos en la pregunta de subir archivos a un hosting, pero no se muy bien si seria la mejor manera.
y con respecto a lo de sincronizar la cuenta creada desde el juego seria algo asi
[gml]
//en el create o donde vayas a ejecutar el login
usuario = get_string("usuario","")
pass = get_string("pass","")
http_get(url+"?usuario="+string(usuario)+"&pass="+string(pass))
//en el evento asyncrono
estatus = ds_map_find_value(async_event,"status")
if estatus ==0
{
resultado = ds_map_find_value(async_event,"result")//donde resultado es la respuesta del servidor que por ejemplo sea 1 si todo ocurrio perfectamente y 0 si no
if resultado == 1
{
//lo que sea que quiera que aga el juego cuando se logee correctamente
}
}
[/gml]
que realmente es el mismo que esta en el ejemplo anterior, ya quedaria de tu parte el ponerle que meta el pass dos veces, y que si no son inguales lo vuelva a pedir y cosas asi.
lo que realmente cambiaria es el php
dentro del php, por ejemplo, registro.php
<?php
$usuario =$_GET['usuario']
$pass =$_GET['pass']
$mysql_server = "url donde esta alojado el servidor sql";
$mysql_username = "tu usuario";
$mysql_password = "tu clave";
$mysql_database = "el nombre de la base de datos";
$mysql_table = "la tabla en la que esten los datos";
//conectar a base de datos
$con = mysql_connect($mysql_server,$mysql_username,$mysql_password) or die('Can not connect to server');//nos conectamos al servidor donde se aloja el sql
mysql_select_db($mysql_database) or die('Can not connect to database');//seleccionamos la base de datos en la que trabajaremos
$result = mysql_query("INSERT INTO $mysql_table(`nombre`, `pass`) VALUES ($usuario,$pass)")//insertamos el usuario en la base de datos
$numero_resultados=mysql_num_rows($result);
if ($numero_resultados==1)
{
//tu script
echo "1";//como respuesta de que todo fue bien
}
else
echo"0";//si todo fue mal
mysql_close($con);
?>
Lo intentaré, pero tengo otro problema. Cómo puedo saber cuál es la dirección URL de mi base de datos SQL, la he creado con 000webhost haciendo click en:
(http://gyazo.com/af832694315448fe0b76dd26646401fb.png)
y después de crear esa base de datos, la abrí haciendo click en:
(https://i.gyazo.com/56a8b905977a9661b0f4cfd2bc27f886.png)
¿Sabes cómo encuentro la URL de mi base de datos?
dale click al primer boton, el que solo dice mysql hay abajo deberia de salirte el nombre de tu base de datos con los datos de usuario, servidor y nombre de base de dato, el pass deberias de saberlo tu
y la URL sería algo como www.mipagina.algo/servidor/usuario_base_de_datos/ ? o cómo la puedo obtener?
bueno la cuestion es de que url hablas, si hablas de la url de la base de datos que va dentro del php, no, esa url te la da tu hoster en donde te dije, ahora bien, si hablas de la que va dentro del codigo gml tampoco seria esa, la url dentro del gml seria www.tupagina.com/tuphp.php y si usaras la variable GET dentro del php seria www.tupagina.com/tuphp.php?usuario=cualquiercosa&pass=cualquiercosa, si fuera con la variable POST pones nada mas www.tupagina.com/tuphp.php y en la parte de post colocas "usuario=cualquiercosa&pass=cualquiercosa"
con URL me refiero al que va en la variable $mysql_server del código PHP...
Cita de: NiuWeb en Noviembre 21, 2015, 02:29:59 AM
con URL me refiero al que va en la variable $mysql_server del código PHP...
en esa variable va la url que encuentras donde te dije, cuando le das a mysql te sale una tabla con 3 campos, que son el nombre de la base de datos, el usuario y el hoster o servidor de la base de datos, el hoster o servidor es la url que pondras en esa variable
async_event? Qué es esta variable...?
Creo que tienes una gran confusión, las bases de datos no tienen una URL asociada, simplemente tienen un nombre, un user y un password. Cuando abres una cuenta en un server, puedes crear en ella una base de datos, a la cual tienes que dar nombre. En el menú Database crea una base de datos, asígnale un user y un password. Una vez hecho eso, entra a phpMyAdmin y crea una tabla en esa base de datos. Luego de eso estás en condiciones de agregar datos a esa tabla de la base de datos. Te recomiendo que antes de intentar usar las funciones http de GMS estudies el lenguaje php ya que no es buena idea tratar de copiar y pegar código sin tener la menor idea de lo que estás haciendo.
Un evento asíncrono es un evento que se dispara cuando GMS recibe información externa y el programador no sabe cuándo ocurrirá. La variable async_load guarda el resultado de un evento asíncrono.
Cita de: Guacusio en Noviembre 21, 2015, 09:08:28 AM
Te recomiendo que antes de intentar usar las funciones http de GMS estudies el lenguaje php ya que no es buena idea tratar de copiar y pegar código sin tener la menor idea de lo que estás haciendo.
Eso, Guacusio. El consejo más sabio que he leído en meses. No hechar en saco roto, compañeros, por favor.
guacusio la fucion mysql_connect del php requiere como minimo para funcionar el lugar donde esta almacenada la base de datos(una url que te la da tu hosting, no es la misma que la de tu pagina), tu usuario, y tu password.
luego se usa mysql_select_db para seleccionar tu base de datos, es decir, el nombre de tu base de datos.
http://php.net/manual/es/function.mysql-connect.php
http://php.net/manual/es/function.mysql-select-db.php
ps:niuweb yo me equivoque, no es async_event es async_load, en los codigos que te pase cambia async_event por async_load.
Cita de: jmbs19 en Noviembre 21, 2015, 01:31:06 PM
guacusio la fucion mysql_connect del php requiere como minimo para funcionar el lugar donde esta almacenada la base de datos(una url que te la da tu hosting, no es la misma que la de tu pagina), tu usuario, y tu password.
luego se usa mysql_select_db para seleccionar tu base de datos, es decir, el nombre de tu base de datos.
http://php.net/manual/es/function.mysql-connect.php
http://php.net/manual/es/function.mysql-select-db.php
ps:niuweb yo me equivoque, no es async_event es async_load, en los codigos que te pase cambia async_event por async_load.
Tienes toda la razón, me equivoqué y pido disculpas. Efectivamente, hay un servidor de mysql que tiene una URL y dentro de él se selecciona una BD con el nombre, user y password.
no es async_event, es async_load