martes, 8 de septiembre de 2009

Login con Flash + PHP + MySql

Por necesidades de programación de un curso OnLine me ví en el problema de autentificar usuarios desde un flash, con Dreamweaver está tirado, pero con flash.... Buscando en google me encuentro con un login en esta página:


que explica muy detalladamente los que hay que hacer. Sigo todos los pasos y ¡oh sorpresa! no hay conexión. Repaso, vuelvo a mirar, pruebo... nada.

El siguiente paso es buscar en los foros si a alguien le pasa lo mismo y efectivamente, muchos usuarios tienen el mismo problema, pero no hay soluciones válidas, varios hilos sobre el tema pero no va.

Desesperado trato de hacer apaños hasta que combiando varias soluciones ¡FUNCIONA!. Voy a ir explicando los pasos a seguir

Primero crear la base de datos con Mysql con los típicos campos, tal y como se explica en el link que puse más arriba.

Ahora creamos el flash con dos campos de introducción de texto, y los llamamos

username_txt y password_txt (recordad la ventaja de terminar los nombres de instancias con el tipo que es para que después salga el menú de código, osea, aquí como es un texto finaliza con "_txt" si fuera un botón "_btn" un movie clip "_mc") , un botón para la comprobación, otro para continuar si todo es correcto "seguir_btn"(oculto) y un texto dinámico "mensaje_txt" para comunicar al usuario si es correcto, si el usuario no existe, si el pass es incorrecto...

En el primer fotograma de nuestra pelicula ponemos este código:
-----------------------------------------------------------------------------------------------
var envio:LoadVars = new LoadVars(); //aquí almacenamos los datos a enviar
var recibir:LoadVars = new LoadVars();//aquí los datos que nos devuelve el php
var valores:Array = new Array();//aquí almacenaremos los datos que nos devuelva en recibir //para tratarlos despues
function login() {//funcion de envio de datos que se ejecutará al pulsar el botón
envio.username = username_txt.text;//guardamos la variable del primer cuadro de texto
envio.password = password_txt.text;//guardamos la variable del segundo cuadro de texto
envio.action = "login";//variable para que el php ejecute la orden
envio.sendAndLoad("login.php", recibir, "POST");//enviamos los datos al archivo php que //crearemos después
}
recibir.onLoad = function(exito) {//si recibimos datos
if (exito) {
switch (this.opcion) {//Ponemos el texto del cuadro de mensaje dependiendo de la //respuesta del php
case "0" :
mensaje_txt.text = "No existe el usuario";
break;
case "1" :
mensaje_txt.text = "Nombre de usuario o pass mal ingresado";
break;
case "2" :
mensaje_txt.text = "Datos correctos, pulsa Continuar";
seguir_btn._visible=true;//si todo bien, ponemos visible el botón de continuar o lo //que queramos que ocurra si es correcto.
break;
default :
mensaje_txt.text = "No hay conexión";
break;
}
} else {
mensaje_txt.text = "Error en el Script";
}
};
-------------------------------------------------------------------------------------------
El código del botón de comprobación es:

on (release){
login();//ejecuta la función de arriba
mensaje_txt.text="Conectando..."; //o algo así
}

Lo siguiente es crear el php para comunicarnos con nuestra base de datos.

Como se ve en el flash es login.php

------------------------------------------------------------------------------------------------
//aquí va el código de apertura php < ?php (sin el espacio)
$action = $_POST['action']; //recibe la variable action que le enviamos
$username = $_POST['username']; //recibe la variable username que le enviamos
$password = $_POST['password']; //recibe la variable username que le enviamos

require_once('Connections/conn.php'); //llamada a la conexion (facil de crear con Dreamweaver //la explico después)

mysql_select_db($database_conn, $conn); //selecciona la db
if ($action == 'login'){ //como la orden que llega es login ejecuta la acción
$sql = mysql_query("SELECT password FROM usuarios WHERE username = '$username'"); //sentencia mysql
if (!$sql) {
die('Could not query:' . mysql_error());
}
$sql2 = mysql_fetch_row($sql);
if (!$sql2){ //aquí comprueba si todo es correcto, sino existe usuario, si password mal...
//no existe usuario
echo 'opcion=0'; //los echo envían a flash el resultado en la variable "opción"
} else{
if ($password !== $sql2[0]){ //aquí es donde comprueba password enviado respecto //recuperado con la sentencia mysql
//no coincide pass
echo "opcion=1"; //los echo envían a flash el resultado en la variable "opción"
}
else{
//usuario y pass correctos
echo "opcion=2"; //los echo envían a flash el resultado en la variable "opción"
}
}
mysql_close($conn); //cierra la conexión con la base de datos
}else{
echo "No params";
}
?>
----------------------------------------------------------------------------------------------

Finalmente el archivo conn.php para establecer la conexión:

-----------------------------------------------------------------------------------------------
//aquí va el código de apertura php < ?php (sin el espacio)
# FileName="Connection_php_mysql.htm"
# Type="MYSQL"
# HTTP="true"
$hostname_conn = "localhost";//esto seule ser lo normal, tanto en servidores locales como no
$database_conn = "mi_db";//nombre de la base de datos el que pusimos al crearla
$username_conn = "root";//usuario, en este caso es para un servidor local
$password_conn = "";//no hay al ser local, tanto user como password la tenemos al crear el //usuario de la base de datos (en mi caso en plesk)
$conn = mysql_pconnect($hostname_conn, $username_conn, $password_conn) or trigger_error(mysql_error(),E_USER_ERROR);
?>

------------------------------------------------------------------------------------------------
Este último archivo está en la ruta realtiva "Connections/conn.php"


Y listo.

En el proximo post explico como con el mismo código recuperar el resto de posible datos de nuestra base de datos y cómo guardar datos desde flash.

Espero que os sea útil.

2 comentarios: