Si queremos hacer paginas dinamicas donde los usuarios puedan interactuar con votaciones, comentarios en foro, y subir sus propios contenidos, la mejor manera de hacerlo es utilizando Bases de Datos (BD).
En este tutorial vamos a realizar una coneccion a una BD utilizando el lenguaje PHP, especificamente las funciones mysql_connect() y mysql_select_db().
Para comenzar vamos a crear un archivo db_conect.php en el que vamos a colocar el siguiente codigo de conexion:
Código
/* conexion ****************/ // conectamos al servidor MySQL $link = mysql_connect('localhost', 'miUsuario', 'miClave'); if(!$link) { die("Error al intentar conectar: ".mysql_error()); }
// seleccionamos la base de datos $db_link = mysql_select_db('miBaseDeDatos', $link); if(!$db_link) { die('Error al intentar seleccionar la base de datos'. mysql_error()); } /* fin conexion ************/
La funcion mysql_select_db() se encarga de hacer la conexion del usuario ("miUsuario") con una session de mysql, debemos haber configurado antes este usuario con permisos de lectura o escritura dependiendo de lo que queramos hacer, es decir, si estamos conectandonos a una base de datos para guardar datos debemos tener permisos para insercion en las tablas.
Luego de conectarnos a mysql debemos seleccionar la BD sobre la que queremos operar, en este caso "miBasededatos", para eso utilizamos la funcion mysql_select_db() y le pasamos el nombre de la base de datos y una variable con el valor devuelto por la funcion de conexion mysql_select_db() que utilizamos anteriormente.
Ahora debemos guardar este archivo y incluirlo en cualquier pagina donde queramos realizar transacciones con base de datos, eso lo hacemos añadiendo el siguiente codigo al principio de cada pagina:
<?php
require('db_conect.php');
?>
//de aqui en adelante podemos hacer cualquier transaccion con //la base de datos sin importar la conexion Para descargar el codigo de este ejemplo haz click aqui. Cualquier duda o comentario no duden en escribirlo.
Este pequeño tutorial es para explicar los undamentos de un lenguaje tan practico y facil como PHP, para empezar debemos diferenciar entre dos tipos de lenguajes que se pueden utilizar a la hora de realizar páginas web:
Lenguajes del lado del Cliente: Son lenguajes que corren en la computadora de cada cliente, son muy vulnerables a cualquier ataque informaticos ya que el usuario final posee todo el codigo fuente y puede modificarlo, normalmente se usan para realizar interfaces de usuario, validaciones basicas, etc. Entre ellos encontramos javaScript, HTML, ActionScript, etc.
Lenguajes del lado del Servidor: Son lenguajes que no pueden ser visualizados por el cliente, se ejecutan antes que los lenguajes del lado del cliente, y, de esta forma, pueden generar codigos para que sean interpretados por javascript, html, etc. Son los responsables de las conecciones a bases de datos, WebServices, etc.
Por ejemplo: supongamos la siguiente situacion: Un usuario quiere llenar un formulario para inscribirse en una página (el formulario debe estar hecho en HTML) luego cuando introduce los datos y presiona enviar tiene un error de "email no valido", en ese caso, javascript ha sido el responsable de detectarlo, luego lo corrige y el fomulario es enviado al servidor y guardado en una base de datos, el responsable de hacer este paso es PHP. Luego el usuario es redicerrionado a la pagina de su nueva cuenta y ya esta lista para usar (de vuelta a la pagina html).
Ahora vamos a dejar de hablar y vamos entrar en el ejemplo practico, para imprimir por pantalla en PHP debemos utilizar la funcion echo, esta funcion imprime al navegador un codigo para ser interpretado por el cliente, es decir, si colocamos lo siguiente:
echo "<strong>Hola Mundo </strong> ";
En realizada el navegador imprimiria por pantalla lo siguiente:
Hola Mundo
Ya que interpretaria la etiqueta como codigo HTML para poner en negritas el texto. En el ejemplo actual vamos a imprimir por pantalla las frases "Hola Mundo", "<h1>Hola Mundo </h1>" y "<h2>Hola Mundo </h2>" para mostrar las diferencias y las diferentes interpretaciones por parte del navegador.
El codigo del ejemplo es el siguiente:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<p>Hola mundo en PHP, el codigo en este lenguaje debe incluirse entre las etiquetas <?php ?> y para imprimir por pantalla debe usarse la funcion "echo" seguida de la variable, numero o string que se desea imprimir.</p></td>
PHP es una de las tecnologías mas fáciles de usar a la hora de realizar aplicaciones web, es uno de los lenguajes mas fáciles de aprender y lo recomiendo 100% si queremos empezar en este mundo tan versátil de desarrollo web.
En este caso vamos a realizar un libro de visitas donde los usuarios podrán dejar mensajes en tu página web de manera muy secilla, y los mensajes sera guardados en una Base de Datos MySQL para futuras consultas. Lo primero que debemos hacer es crear una base de datos en nuestro manejador de base de datos, por ejemplo, PHPMyAdmin. Entramos a en manejador y creamos una base de datos llamada "FirmasVisitas", recuerden saber bien el usuario y login que debeun usar para conectarse a la bd, si lo desconocen prueben siempre co el usuario "root" y clave "" (vacia), esos usuarios por defecto normalmente funcionan.
Una vez creada la BD lo que debemos hacer es crear la tabla "firma" en la base de datos, la tabla va a almacenar los mensajes que pongan los usuarios, utilizando el siguinte script en lenguaje SQL:
Código
CREATE TABLE `firmar` ( `firma_ID` int(11) NOT NULL auto_increment, `usuario` varchar(25) collate latin1_general_ci NOT NULL, `firma` text collate latin1_general_ci NOT NULL, PRIMARY KEY (`firma_ID`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=2;
Una vez creada la BD y la tabla que va a almacenar la información procedemos a crear la pagina web que va a permitir al usuario escribir un mensaje apra que sea guardado en la base de datos y luego exibirlo al público, el codigo del archivo es el siguiente:
Debemos conectarnos a la BD al mometo de cargar la página para traer los mensajes ya escritos, Para eso a la base de datos escribimos:
Código
/* conexion ****************/ // conectamos al servidor MySQL $link = mysql_connect('localhost', 'miUsuario', 'miClave'); if(!$link) { die("Error al intentar conectar: ".mysql_error()); }
// seleccionamos la base de datos $db_link = mysql_select_db('miBaseDeDatos', $link); if(!$db_link) { die('Error al intentar seleccionar la base de datos'. mysql_error()); } /* fin conexion ************/
Luego debemos enviar el formulario y procesarlo para guardar los datos en la base de datos, en ese mismo momento consultamos los mensajes de la base de datos (que ya deberían incluir el nuevo mensaje recien colocado) y los mandamos a imprimir por pantalla en la página web:
Código
/* prosesamiento de los datos */ // verificamos si ha sido enviado el formulario if(isset($_POST['enviar']) && $_POST['enviar'] == 'Enviar'){ // verificamos que el formulario // no venga vacio if(!empty($_POST['usuario']) && !empty($_POST['firma'])){ // creamos las variables a usar en la consulta // y le asignamos sus valores $usuario = htmlentities(trim($_POST['usuario'])); $firma = htmlentities(trim($_POST['firma'])); // la consulta INSERT $sqlInsert = mysql_query("INSERT INTO firmar (usuario, firma) VALUES ('$usuario', '$firma')", $link) or die(mysql_error()); }else{ echo "Debe llenar todos los campos"; } } /* fin del proseso de datos */ /* mostrando los registros (firmas) */ $sqlQuery = mysql_query("SELECT * FROM firmar", $link) or die(mysql_error()); $totalFirmas = mysql_num_rows($sqlQuery); // verificamos si hay // alguna firma registrada, // de lo contrario enviamos un mensaje if($totalFirmas == 0){ echo "Nadie se ha animado a firmar este libro :("; } // si hay firmas registradas // las mostramos else{ while($row = mysql_fetch_array($sqlQuery)){ echo "<p><b>$row[usuario]</b> dijo:<br />". nl2br($row['firma']) ."</p><hr />"; } }
Con esto hemos concluido el libro de visitas, que fácil ¿verdad?, bueno todo con PHP es asi, acostumbrense a esta maravilla de lenguaje para hacer paginas web.
Recientemente he tenido la necesidad de hospedar una pagina web muy sencilla, para lo que no valia la pena pagar un servidor web, ya que la pagina era demasiado pequeña y nunca hubiese exprimido todo el potencial del servidor, por mas limitado que fuera.
La pagina que estaba montando, ademas requeria de la utilizacion de PHP y MySQL para la construccion de un pequeño foro donde los usuarios podian dejar sus mensajes y discutir entre ellos asuntos de interes.
Fue cuando encontre este excelente servicio en 000Webhost.com, no solo te permite todo esto, sino que ademas publican los servidores DNS para que puedas utilizar tu propio dominio y te ofrecen la opcion de crear cuentas de email con el dominio, publico las especificaciones tecnicas a continuacion:
» Free Web Hosting
Disk Space
1500 MB
Bandwidth
100,000 MB = 100 GB!
Domains Allowed
Unlimited
Control Panel
cPanel
Ads on your pages?
No Ads or Banners!
Your own ads allowed?
Yes
» Package Details
Website Builder
PHP Scripts Autoinstaller
Unrestricted PHP Support
MySQL Databases
Instant Backups
FTP Support
Web File Manager
99.9% Uptime
Instant Activation
» Supported Features
PHP and MySQL
PHP5
Cron Jobs
Curl
GD
Image Magick
Streaming Video
PHP Pear Modules
» E-mail Features
POP3 Accounts
Web Mail
Auto Responders
Spam Protection
Mail Forwarding
IMAP Support
Modify MX Entry
» Control Panel Features
Latest cPanel
Website Builder
Fantastico Autoinstaller
Getting Started Wizard
Video Tutorials
Multi Language Support
Hotlink Protection
IP Deny Manager
Redirect URL
Password Protected Directories
Web Based File Manager
phpMyAdmin
Ya yo me encuentro utilizandolo y hasta ahora no tengo ninguna queja, me parece tremendo servicio y hasta el dia de hoy, no he conseguido ningun mejor que ese, espero que les sirva de ayuda! Continuar leyendo...
Abro este post porque estoy completamente abierto a cualquier pedido para un tutorial, por cuestiones de tiempo no he podido publicar mas tutoriales, por eso les dejo este post para que me pidan el que ustedes quieran y seguro todos los fines de semana los publicare!!
Recuerden los posibles temas para tutoriales es todo lo relacionado con el mundo de Adobe Flex: Datagrid, Eventos, Componentes Flex, UIComponents, Animaciones, ModuleLoader, LoadBar, DatePicker, etc. etc.
Deja tu comentario aqui pidiendome el tutorial que quieras!! si es que lo se hacer jajaja
Jurungando entre los excelentes componentes que se encuentran en Quietly Scheming encontramos una clase muy interesante, que permite realizar camibios a las propiedades X, Y, Width, Height, Alpha, entre muchas otras, de cualquier objeto Flex cuya clase implemente la interfaz IFlexDisplayObject.
Ustedes se preguntaran, ¿Qué hay de nuevo en esto?, pero la gran utilidad esta en la manera como esta clase raliza los cambios a estas propiedades, y es que, por ejemplo, cuando queremos pasar un objeto de un width determinado a otro, la clase se encarga de realizar efecto muy estilizado y vistoso mientras realiza la transicion entre el width original y el width deseado, y asi realiza con todaslas propiedaes.
El efecto se logra aplicando una funcion exponencial al cambio de la propida, asi q a medida que se acerca mas al valor final deseado, mas lento se realiza el cambio.
Para utilizar la clase debemos definir una funcion "generateLayout" y debemos pasarsela al objeto de tipo LayourAnimato, esta funcion va a realizar los cambios a las respectivas propiedades de nuestro LayoutTarget definido en la función. Un ejemplo de funcion sería:
Una vez construida esta funcion debemos llamar al metodo invalidateLayout(true) del objeto de tipo LayoutAnimator, en ese momento se iniciará el efecto para cambiar los valores del DisplayObject de su valor actual al nuevo valor deseado.
Tambien se puede especificar que velocidad queremos para la animacion con un numero del 0 al 1, siendo 1 el valo maximo de velocidad.
Una vez terminado el efecto, la clase dispara un evento de tipo AnimationEvent.ANIMATION_COMPLETE.
Dado que ActionScript 3.0 es un lenguaje orientado a eventos, me parece importante profundizar un poco mas en ese tema, hasta ahora habíamos trabajado algunos ejemplos con eventos a través de mxml, pero, de esa forma, no se puede tener un verdadero control sobre los mismos, y se desperdician muchas oportunidades y potencialidades que se pueden usar cuando los eventos se trabajan desde el lado de ActionScript 3.0.
En este tutorial vamos a despachar eventos manualmente desde un botón (pueden ser despachados por cualquier objeto cuya clase implemente la interfaz IEventDispatcher) y vamos a controlar el flujo del evento despachado con las propiedades UseCapture, Bubble y los metodos addEventListener(), removeEventListener(), dispatchEvent() y stopImmediatePropagation(). Para empezar, debemos seleccionar el evento que queremos escuchar y disparar, en mi caso voy a crear un evento propio para fines didacticos y que todos aprendamos como hacerlo. Para crear un evento propio debemos crear una clase que extienda de la clase Event, y luego procedemos a crear un identificador único para el evento definiendo dentro de la clase una constante publica y estatica de tipo String con el nombre que le queremos dar al evento (Este nombre debe ser único entre todos los eventos, ya que sera el que utilizaremos cada vez que nos querramos referir al él. En el ejemplo he creado una clase MiEvento que extiende de Event y le he asignado como identificador la constante MI_EVENTO.
Luego debemos crear las funciones Handlers que van a procesar las acciones cuando el evento se dispare, en el ejemplo las funciones p1Handler, p2Handler, p3Handler, despacharEvento y usaCaptureChange().
El handler es la función que se encarga de recibir un evento y realizar cualquier accion que uno desee, el handler puede obtener la informacion contenida en el evento y utilizarla. El handler es llamado automaticamente por el Framework de Flex inmediatamente despues de que el evento que recive, es disparado.
Luego de crear los handlers debemos empezar a escuchar el evento que queremos, para hacer eso llamamos el metodo addEventListener() desde la instancia que deseemos, en el ejemplo he creado 3 Panels, cada uno de ellos escucha el mismo evento de tipo "MiEvento.MI_EVENTO".
<?xml version="1.0" encoding="utf-8"?>
public function p1Handler(e : Event) : void { if(para1.selected) e.stopImmediatePropagation(); p1txt.text = "event";
traceString.text += "p1 lo escuchó\n"; }
public function p2Handler(e : Event) : void { if(para2.selected) e.stopImmediatePropagation(); p2txt.text = "event";
traceString.text += "p2 lo escuchó\n"; }
public function p3Handler(e : Event) : void { if(para3.selected) e.stopImmediatePropagation(); p3txt.text = "event";
traceString.text += "p3 lo escuchó\n"; }
El metodo addEventListener() recibe dos parametros obligatorios y 3 opcionales, los dos primeros deben ser el Identificador del evento a escuchar y la funcion Handler que deseemos, de los otros tres parametros el primero es llamado useCapture y se encarga de decidir en que momento de el ciclo de vida de el evento deseamos escucharlo, si le asignamos verdadero estamos diciendo que queremos capturarlo mientras este bajando, de lo contrario le decimos que queremos capturarlo mientras esta subiendo.
Cuando un evento es despachado por un objeto de tipo DisplayObject, podemos asignarle el parametro bubbles como verdadero, con eso le estariamos diciendo que se propague desde la instancia de lo despachó subiendo hasta su mas lejano antecesor o padre en la jerarquia de instancias y luego que vuelva a bajar hasta el objeto que lo disparó. Si le asigna falso a esta propiedad entonces el evento solo podra ser escuchado por las instancias de el mismo nivel en la jerarquía.
El cuarto parametro indica la prioridad del Handler, si tenemos mas de un handler escuchando ese evento a ese nivel en la jerarquía, podemos decidir cual queremos que se dispare primero asignandole un valor mayor en la prioridad. El último parametro de todos no va a ser estudiado en este ejemplo y tiene que ver con el uso de a memoria y el garbageCollector.
Luego de agregar los listeners necesarios procedemos a despachar el evento, en este ejemplo el evento "evt" es despachado en el momento dehacer clik en botón "button1" conenido dentro del Panel 1.
Para despachar el evento realizamos una instancia llamada "evt" de la clase Evento pasandole en el contructor el identificador MiEvento.MI_EVENTO y si queremos que se propague hacia sus ascendentes con la propuedad Bubbles.
Si queremos interrumpi en cualquier momento el flujo del evento (y anteriormente seleccionamos que queriamos un lujo de tipo "blubbles" haciendo el paremetro bubbles verdadero en el constructor del evento al momento de crearlo) debemos llamar al metodo stopImmediatePropagation() en la funcion handler desde la instancia de tipo Evento que recibimos por parametro.
Es importante dejar de escuchar un evento si sabemos que ya no lo vamos a necesitar, para hacer eso debemos llamar a la funcion removeEventListener() pasandole los tres mismos primeros parametros que le pasamos a la funcion, incluso con los mismos valores, es decir, si hicimos
Bueno para terminar el ejemplo aqui les coloco el codigo fuente descargable de el proyecto el video tutorial, el codigo fuente y un ejemplo demostrarivo en funcionamiento, espero que les sirva de algo y cualquier duda o observación no duden en comentarlo en el artículo que yo las reponderé con mucho gusto:
public function init() : void { p2.addEventListener(MiEvento.MI_EVENTO,p2Handler,usaCapturePicker.selected); p3.addEventListener(MiEvento.MI_EVENTO,p3Handler,usaCapturePicker.selected); p1.addEventListener(MiEvento.MI_EVENTO,p1Handler,usaCapturePicker.selected); }
public function usaCaptureChange() : void { removeListeners();