“Cómo conectar Flash con MySQL usando PHP?” Es una pregunta muy recurrente en foros de discusión y comunidades de Flash. La respuesta es bastante sencilla, sin embargo, LA GRAN MAYORÍA de tutoriales en la web, lo EXPLICAN MAL!!
En este tutorial, te enseño como conectar MySQL, con Flash, PHP y XML de la manera correcta.
Sigue leyendo para descargar los archivos del tutorial, y ver la versión de texto del tutorial.
Tutorial
En este tutorial conectaremos una película Flash, con una base de datos MySQL haciendo uso de PHP y XML.
Porque usar XML?
Al utilizar XML como estructura para representar la información, podemos hacernos independientes de PHP. Es decir, podemos generar consultas a la base de datos, a través de cualquier lenguaje de programación (Ruby, Perl, Python, etc..) siempre y cuando generemos un archivo XML y se lo mandemos a Flash a través de POST.
Solamente necesitamos programar dos archivos, en este caso: index.php que es el que se encarga de generar las consultas a las bases de datos y regresar la información a Flash, y el proyecto en Flash, que finalmente es el que se encarga de mostrar la información al usuario.
En este tutorial, doy por asumido que el lector ya tiene montado un servidor web, con un gestor de bases de datos instalado (MySQL), y una tabla creada con información en ella. De lo contrario, hay que cumplir esos requisitos primero antes de proceder con este tutorial.
La base de datos que estoy utilizando, es la base de datos sakila, que se encuentra publicamente disponible y es gratuita para quien guste instalarla en su sistema. La base de datos la pueden obtener siguiendo este link:
http://dev.mysql.com/doc/sakila/en/sakila.html
Una vez instalada la base de datos de prueba “sakila” procederemos a codificar el programa en PHP.
Antes de inciar, quiero remarcar que voy a hacer uso del módulo MySQLi, el cual es mucho mas eficiente y hace uso de las nuevas funciones que MySQL ofrece en PHP.
Para mayor información acerca del modulo MySQLi, refieranse a la página oficial:
http://php.net/manual/en/book.mysqli.php
Ahora si, el contenido del archivo PHP es el siguiente:
En las primeras lineas creamos las variables para establecer la conexión a la base de datos.
[codesyntax lang="php"]
<?php
$dbHost = "localhost";
$dbUser = "root";
$dbPass = "";
$dbName = "sakila";
$dbTable = "customer";
$mysqli = mysqli_connect($dbHost, $dbUser, $dbPass, $dbName);
if ($mysqli->connect_errno)
echo "No se pudo establecer la conexión MySQL: " . $mysqli->connect_errno;
$consulta = "SELECT * from `customer` LIMIT 0,5";
$resultado = $mysqli->query($consulta);
if($resultado)
{
header("Content-Type: text/xml");
echo "<?xml version="1.0" encoding="utf-8"?>n";
echo "<fields>n";
while ($fila = $resultado->fetch_assoc())
{
echo "<field>n";
echo "<customerid>". $fila['customer_id'] . "</customerid>n";
echo "<storeid>" . $fila['store_id'] . "</storeid>n";
echo "<firstname>" . $fila['first_name'] . "</firstname>n";
echo "<lastname>" . $fila['last_name'] . "</lastname>n";
echo "<email>" . $fila['email'] . "</email>n";
echo "</field>n";
}
echo "</fields>";
}
$mysqli->close();
?>
[/codesyntax]
Posteriormente creamos la conexión a la base de datos, y si esta es exitosa; mandamos los headers al cliente para decirle:
“Hey! Soy un archivo XML!! trátame como tal!!”
Creamos las etiquetas XML y las llenamos con la información que extrajimos de la base de datos.
Y cerramos la conexión a la base de datos.
Ahora del lado de Flash
Ahora vamos a codificar Flash, vamos a crear un proyecto como lo explico en este artículo:
Como crear un proyecto en Flash
Una vez creado el archivo tal cual se explica en el articulo anterior, vamos a copiar y pegar el siguiente código en el archivo main.as
[codesyntax lang="actionscript3"]
package
{
import flash.display.MovieClip;
import flash.net.*;
import flash.events.*;
import flash.text.TextField;
public class main extends MovieClip
{
private static const DEFAULT_TEXT:String = "Iniciando Test...";
private static const dx:int = 100;
private static const URL:String = "index.php";
private var _loader:URLLoader;
private var _request:URLRequest;
public var campo:TextField = new TextField();
public function main()
{
campo.width = 600;
campo.height = 400;
campo.x = campo.y = dx;
campo.text = DEFAULT_TEXT;
addChild(campo);
loadData();
}
public function loadData():void
{
output("Cargando Datos...");
_request = new URLRequest(URL);
_request.method = URLRequestMethod.POST;
_loader = new URLLoader();
_loader.addEventListener(Event.COMPLETE,completado);
_loader.load(_request);
}
public function output(s:String):void
{
campo.appendText(s+"n");
}
public function completado(e:Event)
{
output("Datos Cargados!n");
output("Mostrando Infomación:n");
var xml:XML = new XML(e.target.data);
var campos:XMLList = xml..field;
var i:int = campos.length();
while (i--)
{
output(campos[i].firstname+"t"+campos[i].email);
}
}
}
}
[/codesyntax]
La parte importante del código anterior es como estamos leyendo el archivo XML en Flash.
Una vez que Flash reciba del Servidor que el archivo PHP ha terminado de ejecutarse, el Servidor envía de regreso a Flash, el archivo XML.
Dicho contenido lo accesamos a través de e.target.data que contiene el archivo XML. e.target.data lo pasamos como parametro al constructor de la clase XML.
Una vez que pasamos como parametro al constructor de la clase XML, nos disponemos a leer los campos del archivo XML y mostrarlos en pantalla al usuario.
[download#2]
hola tengo ese sitio web i kiciera ke fuera mas rapida la pagina pork es muy lenta me dijeron que se podria pasar a flash para ke fuera mas rapida si puede brindarme ayuda puede conctatarme al sigiente correo el3men2capecoral@gmail.com gracias….
Quien te dijo que la hicieras en flash, sinceramente no supo lo que te dijo.
Flash no es para paginas web y no se recomienda por un numero bastante amplio de razones.
Primero que nada:
1) Tiempos de carga. A pesar de que los sitios flash se puede optimizar para reducir su tamaño. Su tiempo de carga es muchisimo mas elevado que el de un sitio con HTML, CSS y Javascript.
2) SEO (Search Engine Optimization). Para los buscadores, tu sitio flash es una página vacía. Los robots de los buscadores que se encargan de indexar contenidos en los resultados de búsqueda no tienen el plug-in de flash instalado, ni la habilidad de leer o seguir vinculos en tu sitio flash, por lo tanto.. para los buscadores tu sitio y tu informacion es inexistente, por lo que tienden a no indexarte o indexarte mal.
3) Plug-in. Tus visitantes necesitan tener el plug-in de flash instalado para que puedan ver tu sitio. A pesar de que mas de 90% de las computadoras lo tienen. La tendencia de utilizar dispositivos moviles para accesar sitios web es cada vez mayor, y muchos dispositivos moviles no tienen el plug-in de flash instalado.
4) Recursos. Hay muchas computadoras que no tienen los recursos suficientes para reproducir por un tiempo prolongado una animación/sitio flash. Si tus visitantes usan esas computadoras y se les traba mientras accesan tu sitio web. JAMAS volverán.
5) Mantenimiento. Mantener un sitio flash (agregar información, cambiar diseño, arreglar errores, etc…) es muchisimo mas dificil que mantener un sitio en HTML.
Finalmente, la velocidad de carga de tu sitio web se puede deber a muchas razones. Si me pasas la dirección a tu sitio, con gusto le echo un vistazo y te puedo decir cosas que pueden estar repercutiendo en la ejecución de tu sitio web.
Puedes empezar con gzip-compression, que comprime tu sitio web y lo carga mas rapidamente. Analiza tus funciones JavaScript (si tienes) con firebug, y observa si tienes algun error que cause que se ralentize la carga
1) Desde ya hace varios años, flash puede ser reconocido por google.
2) A dia de hoy, flash tiene y puede usarse con muy poquitos recursos. Otra cosa es que se sepa trabajar con flash.
3) El mantenimiento del sitio hecho en flash es tan fácil o tan dificil como pueda serlo una pagina en HTML.
4) La rapidez de carga de la página web hecha en flash depende de la habilidad del diseñador de la página. Hay páginas en flash que son complicadisimas y se cargan en muy poquito tiempo.
5) ¿De verdad crees que una empresa como Adobe puede permitir las dificultades que tu le das a flash? Si lo crees así, es como decir que tú y los que piensan como tú, saben mucho más que un gigante como Adobe. Y eso, no me lo creo ni borracho.
6) Si fuera como tu dices, no habrían creado HTML 5 (que aún está en pañales con respecto a Flash), lo cual viene a reforzar lo que anteriormente te dije.
7) Ni en el mejor de los sueños, HTML puede hacer lo que hacía hace años ActionScript 2.0 (lenguaje de flash) Mucho menos ahora con AS3.0. Ni siquiera HTML5.
y en vez de usar XML porque no usas json o caul es su ventaja
La única razón por la cual no utilizo JSON es porque, hasta donde yo se, ActionScript 3 no tiene una clase nativa. Requiere que escribamos nuestras porpias funciones o bien, importar una librería externa.
Existe una librería llamada as3corelib, la cual brinda soporte para leer objetos JSON, pero quise mantener el tutorial simple, sin la necesidad de instalar librerías externas.
Sin embargo, JSON es mucho mejor alternativa que XML, ya que JSON está diseñado para el intercambio de información.
Mirate mejor el AS 3.0.
Exelente tutorial, en general todo el sitio nunca habia entrado a esta pag. y la vrdd esta super buena!!
Gracias, Saludos.
Muchas gracias!
A veces la descuido un poco, tengo demasiado trabajo : pero trato siempre de poner contenido que se dificulta de encontrar en internet, y el que uno encuentra es para AS2, o de plano esta muy mal hecho, me da gusto que te guste el blog
Pingback: APORTE Tutorial de MySQL y Flash
Saludos Alan.
El archivo php si está bien la conexión a la DB. y el Xml funciona bien.
Pero al correr el archivo flash me tira este eror:
TypeError: Error #1088: El marcado del documento que sigue al elemento raíz debe estar bien formado.
at main/completado()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at flash.net::URLLoader/onComplete()
Le agradecería si me dá la mano .. Gracias.
Alan, ya encontré el error; era el siguiente:
private static const URL:String = “index.php”;
lo cambié por lo siguiente: la URL absoluta:
private static const URL:String = “http://localhost/mi_directorio/index.php”;
y quedó muy bien , sin problemas; se le agradece muchísimo por este código ejemplo tan valioso en AS3 ya que la mayor parte del código que hay en los blogs que he visitado están desactualizados y utilizan AS2. con comandos imcompatibles en AS3..
Alan Gracias de nuevo, le seguiré visitando su maravilloso blog.
Saludos.
Hola, gracias por este grandioso aporte, me ha servido bastante!!
Mi inquietud es como generar el xml con un formato correcto para mostrar los datos en un DataGrid,
agradeceria su pronta respuesta, nesecito ese dato muy urgente!!
Gracias
Hola Sergio que tal?
Lamentablemente nunca he trabajado con DataGrids en Flash, y no conozco una manera sencilla de lograr lo que buscas.
Encontre esto en internet que puede serte de ayuda:
http://stackoverflow.com/questions/6336155/as3-xml-based-dataprovider-for-datagrid-puts-columns-out-of-order
alan chavez sos una bestia
hola alan, tengo conocimientos minimos en flash, mysql y demas pero investigando x internet he juntado algunas cosas: quiero hacer un prog en flash que pueda arrastrar y soltar cosas (ya lo tengo) y que pueda crear esas cosas (ya lo tengo) y que a su vez se abra una ventana de dialogo donde pueda guardar informacion mas especifica de esa cosa, pero lo que necesito que se guarden en una base de datos, pero no es para una web, sino que un programa que use en la pc
El único inconveniente es que flash no provee un mecanismo para conectarse con una base de datos, tienes que hacer uso de lenguajes externas que puedan comunicarse con programas en un servidor/computadora. (PHP, Python, etc..)
Y quizá en lugar de MySQL, podrías utilizar liteSQL que es básicamente lo mismo, pero la intención es que sea portable.
También te recomendaría que utilizaras Flash Builder. El lenguaje de programación es ActionScript 3.0, pero la interfaz es diferente.
Flash es un programa mas orientado hacia el diseño y la animación, y no proporciona suficientes herramientas de programación, por eso Adobe creo otro paquete especifico para la programación (Flash Builder) que te permite hacer aplicaciones de PC (exe en PC, dmg en mac).
Flash tambien te permite lo mismo a través de un proyector, pero no es lo mismo. El proyector simplemente es un “simulador” donde se carga tu película. A través de Flash Builder, puedes hacer programas mas complejos que puedan hacer uso de funciones del sistema.
Podría orientarte mejor si fueras un poco mas específico
Gracias por visitar y comentar!
Waoo esta muy buena la info… ahora mismo pruebo haber que tal me sale
yo necesito trabajar eso precisamente aunque apenas tngo conocimientos minimos de flash respecto alos XML y sobre todo a como conectar Flash con una BD
Gracias!
Me cuentas como te fue o si tuviste problemas con la informacion!
Por cierto, eso de que tiene dificultades por lo del SEO. Te comento que hace ya más de 4 años que adobe ya acordó con google para que flash pudiera ser indexado.
Esteban,
Primero que nada estás confundiendo indexación con posicionamiento. Hasta el sitio mas inaccesible es indexado (la indexación es simplemente el proceso que Google hace para determinar que un sitio existe en la red), sin embargo lo que importa es el posicionamiento entre tu competencia.
SEO no se trata de indexación, se trata de posicionamiento, y aunque técnicamente hablando es mucho mas sencillo explorar un sitio cuyo contenido es solamente texto, contra un sitio que esta completamente en flash.
Se que hay demasiada literatura sobre SEO y flash, pero en mi punto de vista flash no es la mejor opción para desarrollar un sitio web. Prueba de esto es que recientemente Adobe decidió dejar de dar soporte a dispositivos moviles para Flash. Youtube ha empezado poco a poco a dejar de utilizar flash en sus reproductores de video, se orilla hacia HTML5. Zynga ha empezado a migrar el código de sus juegos mas famosos a HTML5 y javascript.
Todo depende del objetivo de tu sitio, un desarollador de sitios web mediocre tirandole a malo se casa con una tecnología y se rehusa a aprender cosas nuevas, tienes que analizar las estadísticas de tu sitio y correr reportes de segmentación en tu audiencia y ponderar si realmente vale la pena utilizar Flash en tu sitio web.
Por ejemplo: si tu sitio es un e-commerce donde el 80% de tus visitantes utiliza un dispositivo movil para visitarte, sería una idea muy estúpida implementar Flash en ese sitio, asi puedes traerme los argumentos que quieras, el mercado al final es el que determina que producto se queda, y que producto se va.
Con respecto al mantenimiento de un sitio en Flash. Flash originalmente fue concebido para ser utilizado por una persona al mismo tiempo, no para ser utilizado por un equipo de personas. Cuando surge la necesidad de equipos trabajando sobre el mismo proyecto se empezaron a crear add-ons a Flash original, hasta que decidieron realizar un producto basado en AS3 exclusivamente para desarrolladores sin embargo si tienes experiencia utilizando Flex te darás cuenta que es mas orientado a realizar aplicaciones de escritorio basadas en AIR, que para páginas web. Asi que si, el mantenimiento de una página en Flash es mucho mas dificil que el mantenimiento de una pagina HTML, de las cual es mucho mas sencillo utilizar control de versiones (git, svn), utilizar plantillas y optimización. Cosa diferente es que no sepas darle mantenimiento a una pagina web en html y otras tecnologías.
Cabe resaltar que yo lo estoy viendo del punto de vista profesional, no del punto de vista de desarrollador conformista o mediocre.
Por ejemplo, en páginas HTML puedes tener multiples variaciones de una misma pagina web (ab split test) tecnica que sirve para optimizar las conversiones de tus visitantes, actualmente Flash no ofrece ninguna solución parecida. La puedes desarrollar? Claro! Pero vas a invertir mucho tiempo re inventando el hilo negro, solo para que al final te des cuenta que no valió la pena.
Y no es que yo sepa mas que los desarrolladores de Adobe, pero tampoco soy un total ignorante. Si Adobe creyera que HTML5 no es el futuro para las paginas web, entonces porque creo un programa que permite migrar contenido Flash a HTML5? Entonces porque dejo de dar soporte en dispositivos moviles para el reproductor de Flash? Entonces porque dejo de utilizar contenido Flash en la mayoría de sus páginas?
Muy respetable tu punto de vista, sin embargo creo que desconoces una gran parte de lo que realmente consiste construir una página web, la cual te daría una mayor visión con respecto al desarrollo de páginas web en Flash.
No digo que Flash sea malo, sino que no es la mejor solución para el desarrollo de una página web. Sin embargo, hay muchas otras aplicaciones de Flash en las cuales es mucho muy superior a HTML5 y hay cosas que HTML5 ni siquiera puede hacer.
Finalmente, si yo creyera que Flash es una mala herramienta. Simple y sencillamente no habría creado un blog explorando las virtudes de Flash.
Hola Amigo, esta potente el tutorial, Tengo un proyecto de mi web, y lo estoy haciendo en mi subdominio user.megarockeros.com , El proyecto es que te registras en la web, al registrarte tengo los archivos necesarios que crean una carpeta con tu usuario (Canal) el mio es user.megarockeros.com/administrador asi genera y genera mas carpetas automaticamente. cada uno tiene la opcion de subir musica a su canal y aparece en un reproductor, (MI SISTEMA DE SUBIDA EH NOTADO QUE SOLO FUNCIONA CON GOOGLE CHROME). Ahora quiero llevarlo a un nivel màs, Quiero que al subir una canción el php capture la url del mp3 y la meta dentro de la base de datos del usuario, mi reproductor lee una lista php que escanea automaticamente la carpeta, pero ahora quiero que escanee las url de los mp3 que subio ese usuario y las ponga en la lista, Esto lo hago para añadir un boton en el flash para que puedan descargar las canciones que escuchan y si otro usuario entra al canal de otro usuario, hayga otro boton para copie la url de esa cancion y lo ponga dentro de la suya, asi va importar una cancion dentro de su reproductor, pero solo la url. DESDE DONDE DIGO QUIERO LLEVARLO A OTRO NIVEL NO TENGO MUCHA IDEA DE COMO LOGRARLO ESPERO ME PUEDAS AYUDAR
A ver vamonos por partes:
No se que gestor de base de datos estás utilizando, voy asumir MySQL, ni se que conector utilizas, o si estás utilizando programación procedural o programación orientada a objetos, así que con la cantidad de información que provees nadamas te puedo dar una visión de alto nivel para solucionar tu problema.
1. Para almacenar la ruta a tu archivo en una base de datos.
La etiqueta HTML para subir archivos es la siguiente:
input type="file" name="cancion"Esa etiqueta va a insertar en tu página una caja de texto, y un botón para explorar el sistema de archivos. Cuando se envía el formulario, la manera de accesar a esa información en PHP es a través de la variable global:
$_FILESEsta variable te da acceso a varias propiedades del archivo como:
Nombre: $_FILES['cancion']['name']Tipo: $_FILES['cancion']['type']Tamaño: $_FILES['cancion']['size']Ruta temporal: $_FILES['cancion']['tmp_name']La ruta temporal, es la ruta en donde se escribe el archivo en tu servidor, y es tu trabajo el copiarlo a una carpeta en tu directorio de preferencia (Que tengo permisos de escritura, o 755)
supongamos que tus archivos los quieres guardar en el directorio: canciones/usuarios/
Entonces puedes escribir lo siguiente:
$copiar_a_ruta = "canciones/usuarios/";
$ruta_completa = $copiar_a_ruta.$FILES['cancion']['name'];
copy($_FILES['cancion']['tmp_name'], $ruta_completa);
Como podrás darte cuenta la variable: $ruta_completa contiene toda la ruta completa al archivo, esa es la variable que tienes que almacenar en la base de datos, y en tu base de datos, dependiendo del diseño que tengas, puedes almacenar el ID del usuario, junto con la canción que subió, y un identificador único para la canción.
Despues creas otra tabla donde almacenas los playlist de los usuarios, asi si otro usuario quiere importar una canción de uno de sus amigos, es tan sencillo como copiar el identificador único de la canción que quiere, a su lista de reproducción.
Suerte con tu proyecto!
Hola amigo te deje un comentario que estaba ahi, estuve esperando respuesta y hoy entre haber y no esta el comentario
Es que los comentarios tienen que ser aprobados, por eso no aparecía.
amigo crees que pueda coenctar una aplicacion en ActionScript2 a una BD ?
mi problema esque tengo un juego que genera puntos y necesito que esos puntos se guarden a una BD pues :/ y no e logrado encontrar la manera de hacerlo, cuando vi tu tutorial pense que lo podria hacer, pero al ver que el juego lo tenia en AS2 y quise mudarlo a AS3 me marco errores y no corre, y no pude conectarme de la forma en que tu lo haces por el echo de que no me deja hacer acciones que con AS3 si :/
Hola!
Si se puede conectar AS2 a una base de datos. Sin embargo ya han pasado muchos años desde que toqué el AS2, entonces no sabría decirte exactamente cual es la mejor manera de hacerlo.
Portar AS2 a AS3 no es tan sencillo como parece. Especialmente si haces uso extensivo de programación en los fotogramas, ya que programaticamente hablando, los fotogramas en AS2 y los fotogramas en AS3 funcionan diferente.