UTILIZANDO FLASH, PHP, MySQL
CREADO POR: JOSÉ ALEXIS TRUJILLO . caracas-venezuela
Hola a todos, he decidido crear este pequeño tutorial para todas aquellas personas que les gustaria crear registro de usuarios con validación u activacion via e-mail, utilizando actionscript, flash, php, MySQL, para ellos aquí va el tutorial.
1.-PRIMERO
Crearemos nuestra base de datos yo para este caso la llamare “users”, (sin las comillas).
Aquí el script de la base de datos:
Código :
CREATE TABLE `users` ( `ID` int(11) NOT NULL auto_increment, `Username` varchar(255) NOT NULL, `Password` varchar(255) NOT NULL, `Temp_pass` varchar(55) default NULL, `Temp_pass_active` tinyint(1) NOT NULL default '0', `Email` varchar(255) NOT NULL, `Active` int(11) NOT NULL default '0', `Level_access` int(11) NOT NULL default '2', `Random_key` varchar(32) default NULL, PRIMARY KEY (`ID`), UNIQUE KEY `Username` (`Username`), UNIQUE KEY `Email` (`Email`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=26 ;
2.-SEGUNDO
Despues de habre creado nuestra tabla crearemos 5 archivos php los cuales llamaremos de la siguiente manera:
Código :
Register.php <? $username =$_POST['username']; $password =$_POST['password']; $password_confirmed =$_POST['password_confirmed']; $email = $_POST['email']; $action = $_POST['register']; require_once('db.php'); include('functions.php'); function quitar($mensaje) //elimina símbolos indeseados { $mensaje = str_replace("<","<",$mensaje); $mensaje = str_replace(">",">",$mensaje); $mensaje = str_replace("\'","'",$mensaje); $mensaje = str_replace('\"',""",$mensaje); $mensaje = str_replace("\\\\","\",$mensaje); return $mensaje; } //comprobamos con esta función que la dirección de email escrita es correcta function comprobar_email($email){ $email_correcto = 0; //Hacemos una primera comprobación if ((strlen($email) >= 6) && (substr_count($email,"@") == 1) && (substr($email,0,1) != "@") && (substr($email,strlen($email)-1,1) != "@")){ if ((!strstr($email,"'")) && (!strstr($email,"\"")) && (!strstr($email,"\\")) && (!strstr($email,"\$")) && (!strstr($email," "))) { //miro si tiene caracter . if (substr_count($email,".")>= 1){ //obtengo la terminacion del dominio $term_dom = substr(strrchr ($email, '.'),1); //compruebo que la terminación del dominio sea correcta if (strlen($term_dom)>1 && strlen($term_dom)<5 && (!strstr($term_dom,"@")) ){ //compruebo que lo de antes del dominio sea correcto $antes_dom = substr($email,0,strlen($email) - strlen($term_dom) - 1); $caracter_ult = substr($antes_dom,strlen($antes_dom)-1,1); if ($caracter_ult != "@" && $caracter_ult != "."){ $email_correcto = 1; }}}}} if ($email_correcto) return 1; //mail correcto else return 0; //mail incorrecto } $comp_email = quitar($_POST["email"]); $i = comprobar_email($comp_email); //llamamos a la función if ($i != 0) //si la dirección de email es correcta... { $sql = "SELECT id FROM usuarios WHERE nick='".quitar($_POST["username"])."'"; $result = mysql_query($sql); if($row = mysql_fetch_array($result)) { echo "&estatus=ocupado&"; //nick ocupado } { if($_POST['username']!='' && $_POST['password']!='' && $_POST['password']==$_POST['password_confirmed'] && $_POST['email']!='' && valid_email($_POST['email'])==TRUE && checkUnique('Username', $_POST['username'])==TRUE && checkUnique('Email', $_POST['email'])==TRUE) $query = mysql_query("INSERT INTO users (`Username` , `Password`, `Email`, `Random_key`) VALUES ('".mysql_real_escape_string($_POST['username'])."', '".mysql_real_escape_string(md5($_POST['password']))."', '".mysql_real_escape_string($_POST['email'])."', '".random_string('alnum', 32)."')") or die(mysql_error()); $getUser = mysql_query("SELECT ID, Username, Email, Random_key FROM users WHERE Username = '".mysql_real_escape_string($_POST['username'])."'") or die(mysql_error()); if(mysql_num_rows($getUser)==1) { $row = mysql_fetch_assoc($getUser); $headers = 'From: [email protected]' . "\r\n" . 'Reply-To: [email protected]' . "\r\n" . 'X-Mailer: PHP/' . phpversion(); $subject = "Activation de registro de usuarios www.josealexis.com"; $message = "hola ".$row['Username'].", éste es su eslabón de activación para unir nuestro website. Para por favor confirmar su número de miembros haga clic en lo siguiente eslabón : http://www.josealexis.tk/confirm.php?ID=".$row['ID']."&key=".$row['Random_key']. " gracias por registrarse"; if(mail($row['Email'], $subject, $message, $headers)) {//we show the good guy only in one case and the bad one for the rest. $msg = 'Registro creado. Por favor haga click en el enlace que le hemos enviado a su dirrecion de correo electronico para activar su cuenta.'; echo "&estatus=ok&"; //registro exitoso } else { $error = 'La cuenta esta creada pero falta que usted active la misma en en link que le hemos enviado a su direccion de e-mail'; } } else { $error = 'se ha terminado su tiempo de velides para activar su cuenta. Por favor registrese nuevamente .'; } } } echo ("&error=".$error); echo ("&msg=" . $msg); ?> <?=$_SERVER['PHP_SELF']?> Confirm.php <?php require_once('db.php'); include('functions.php'); if($_GET['ID']!='' && numeric($_GET['ID'])==TRUE && strlen($_GET['key'])==32 && alpha_numeric($_GET['key'])==TRUE) { $query = mysql_query("SELECT ID, Random_key, Active FROM users WHERE ID = '".mysql_real_escape_string($_GET['ID'])."'"); if(mysql_num_rows($query)==1) { $row = mysql_fetch_assoc($query); if($row['Active']==1) { echo "&error=".$error = 'This member is already active !'; } elseif($row['Random_key']!=$_GET['key']) { echo "&error=".$error = 'The confirmation key that was generated for this member does not match with the one entered !'; } else { $update = mysql_query("UPDATE users SET Active=1 WHERE ID='".mysql_real_escape_string($row['ID'])."'") or die(mysql_error()); $msg = 'Congratulations ! You just confirmed your membership !'; } } else { echo "&error=".$error = 'User not found !'; } } else { $error = 'Invalid data provided !'; } if(isset($error)) { echo "&error=".$error; } else { echo "&msg=".$msg; } ?> confirm_password.php <?php require_once('db.php'); include('functions.php'); $query = mysql_query("SELECT * FROM users WHERE ID = '".mysql_real_escape_string($_GET['ID'])."'"); if(mysql_num_rows($query)==1) { $row = mysql_fetch_assoc($query); if($row['Temp_pass']==$_GET['new'] && $row['Temp_pass_active']==1) { $update = mysql_query("UPDATE users SET Pass = '".md5(mysql_real_escape_string($_GET['new']))."', Temp_pass_active=0 WHERE ID = '".mysql_real_escape_string($_GET['ID'])."'"); $msg = 'Your new password has been confirmed. You may login using it.'; } else { $error = 'The new password is already confirmed or is incorrect'; } } else { $error = 'You are trying to confirm a new password for an unexisting member'; } if(isset($error)) { echo $error; } else { echo $msg; } ?> Db.php <?php $hostname = "localhost"; $database = "users"; $username = "tu_user"; $password = "tu_pass"; $login = mysql_connect($hostname, $username, $password) or trigger_error(mysql_error(),E_USER_ERROR); mysql_select_db($database); ?> Functions.php <?php function checkLogin($levels) { if(!$_SESSION['logged_in']) { $access = FALSE; } else { $kt = split(' ', $levels); $query = mysql_query('SELECT Level_access FROM users WHERE ID = "'.mysql_real_escape_string($_SESSION['user_id']).'"'); $row = mysql_fetch_assoc($query); $access = FALSE; while(list($key,$val)=each($kt)) { if($val==$row['Level_access']) {//if the user level matches one of the allowed levels $access = TRUE; } } } if($access==FALSE) { header("Location: login.php"); } else { //do nothing: continue } } function valid_email($str) { return ( ! preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix", $str)) ? FALSE : TRUE; } function checkUnique($field, $compared) { $query = mysql_query("SELECT `".mysql_real_escape_string($field)."` FROM `users` WHERE `".mysql_real_escape_string($field)."` = '".mysql_real_escape_string($compared)."'"); if(mysql_num_rows($query)==0) { return TRUE; } else { return FALSE; } } function numeric($str) { return ( ! ereg("^[0-9\.]+$", $str)) ? FALSE : TRUE; } function alpha_numeric($str) { return ( ! preg_match("/^([-a-z0-9])+$/i", $str)) ? FALSE : TRUE; } function random_string($type = 'alnum', $len = 8) { switch($type) { case 'alnum' : case 'numeric' : case 'nozero' : switch ($type) { case 'alnum' : $pool = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'; break; case 'numeric' : $pool = '0123456789'; break; case 'nozero' : $pool = '123456789'; break; } $str = ''; for ($i=0; $i < $len; $i++) { $str .= substr($pool, mt_rand(0, strlen($pool) -1), 1); } return $str; break; case 'unique' : return md5(uniqid(mt_rand())); break; } } ?>
Ok hasta aquí terminamos con los .php, ahora vamos por el .fla
1._ crearemos un nuevo documento de flash as2.0
1) Abre tu macromedia flash y crea un nuevo archivo llamado index.fla. Créate un fondo q te guste (Ten
en cuenta que vamos a tener 5 campos, así que dibújate 5 rectángulos). A esta primera capa la llamaremos
mismamente "fondo".
2) Crear una nueva capa llamada "campos" e insertar encima de los rectángulos que creamos, 5 campos
de texto de tipo "Input text" y ponerles los siguientes nombres de instancia. username (para el nombre de
usuario). password (para la contraseña). password_confirmed (para repetir la contraseña) email (para la direc. de e-mail).
copiar2( para el captcha).
Create otro campo de tipo dinamic_text y colocale como nombre de instancia “copiar” sin las comillas.
Todos estos campos estarán definidos como tipo de texto "single line" (línea única) salvo el campo
pass q se definirá como texto tipo "password" (contraseña). Todas estas opciones las tenéis en
propiedades.
3) A continuación crear una nueva capa llamada "alertas", en ella insertaremos todos los movie clips (si
queréis hacerlo mas sencillo, podéis insertar un simple mensaje y listo, sin mc)
4) Crearos una capa llamada "botón" e insertar en ella un botón con nombre " register" y debajo de este
insertar una caja de texto de tipo dynamic text y llamarla "proces"
Por ultimo el mensaje de registro exitoso lo manejaríamos en el keyframe 35. Poner el mensaje de
error en el keyframe correspondiente y listo.
Bueno decir que este paso os lo podéis saltar, no es imprescindible, lo he creado para dar un efecto mas
chulo. Sirve para que una vez nos hayamos registrado nos salgan los datos con los que nos hemos
registrado. Para los que queráis insertarlo, crearos una capa llamada " exito" , insertamos un
keyframe en el frame 35 y en un hueco reservado insertamos 2 campos de texto de tipo "dynamic text" con
los nombres de instancia: username2, email2,
6) Bueno ya tenemos toda la parte física, ahora vamos a por el código. Nos vamos a la capa llamada
" exito". Pinchar en el primer frame y pegar el código:
Código :
//Creamos la funcion que creara el numero aleatorio del captcha captcha = 6+Math.floor(Math.random()*78.9); captcha = captcha*100.4+1; captcha = Math.floor(captcha); this.copiar.text = captcha++; //creamos la funcion que enviara los datos del formulario a la pagina register.php enviar = function () { if (copiar.text == copiar2.text) { if (username.text.length) { if (password.text.length) { if (password_confirmed.text.length) { if (email.text.length) { form1 = new LoadVars(); form1.username = username.text; form1.password = password.text; form1.password_confirmed = password_confirmed.text; form1.email = email.text; proces.text = "procesando datos"; form1.sendAndLoad("register.php", form1, "POST"); form1.onLoad = function() { if (this.estatus == "ocupado") { proces.text = ""; username.text = ""; gotoAndStop(20); } if (this.estatus == "nomail") { proces.text = ""; email.text = ""; gotoAndStop(25); } if (this.estatus == "ok") { proces.text = "Registrado con exito!"; usernamevar = username.text; passwordvar = password.text; password_confirmedvar = password_confirmed.text; emailvar = email.text; username = ""; password = ""; password_confirmed = ""; email = ""; gotoAndPlay(35); } }; } } else { gotoAndStop(5); } } else { gotoAndStop(10); } } else { gotoAndStop(15); //campo nombre de usuario vacÃo } } else { gotoAndStop(35); } }; register.onRelease = enviar; stop();
Atención! si optáis por poner un mensaje sencillo de usuario registrado con éxito tenéis que sustituir
gotoAndPlay(35); por gotoAndStop(35);
7) Nos creamos a la capa llamada "exito" (Solo para los que han seguido el paso 5) e
insertamos en el frame 35 un keyframe y en actions frame insertamos el siguiente código
this.username2.text = usernamevar;
this.email2.text = emailvar;
this.user.text = usernamevar;
proces.text = "Registrado con exito!";
stop()
Importante: en el index.fla, tendremos que insertar una linea de codigo para
evitar que salga el menu al hacer click derecho, ya que de lo contrario el usuario podría dar a la opción
reproducir y saltarse d esta forma todo el sistema de seguridad. Para evitar esto solo teneis que poner la
siguiente linea de codigo:
Stage.showMenu=false;
Eso es todo cualquier duda me la pueden hacer llegar a la direccion de correo [email protected]
Si te gusto este tutorial valoralos con karma
Atte.jatg “jose Alexis Trujillo gonzalez caracas-venezuela.