Registros de Usuarios en Php y Mysql Con Validación de Campos y Activación Por Mail 1

download Registros de Usuarios en Php y Mysql Con Validación de Campos y Activación Por Mail 1

of 50

description

Hacer un Login para acceder a una pagina con registro de usuarios.

Transcript of Registros de Usuarios en Php y Mysql Con Validación de Campos y Activación Por Mail 1

Registros de usuarios en Php y Mysql con validacin de campos y activacin por mail 1/6

Elregistro de usuarioses algo que todo desarrollador debera conocer al dedillo, es una tarea muy comn dentro de laconstruccin de una pgina weby con este tutorial quiero que aprendis todos los pasos desde el inicio hasta la activacin del usuario en nuestra base de datos.

Este diagrama que os presento tenis que tenerlo muy en cuenta durante todo el tutorial, ya que es en lo que nos vamos a basar bsicamente.Antes de nada, vamos a hacer un planing de lo que vamos a aprender durante los distintos das que ir ampliando el tutorial, hasta llegar a tener unsistema de registro de usuarios completo, para as no perdernos en el camino.El tutorial lo publicar en das salteados, as que estar atentos.

Registros de usuarios en Php y Mysql con validacin de campos y activacin por mail 2/6

Instalar Appserv o WampHoy seguimos con el tutorial Registros de usuario en PHP y Mysql con validacin de campos y activacin por mailexplicando los pasos para tener en nuestro ordenador un sistema (Servidor Web, Mysql, PHP) con el cual podremos probar nuestras aplicaciones con pginas dinmicas y accesos a bases de datos Mysql.

Lo primero que tenemos que tener es un entorno de desarrollo en nuestro PC con Servidor Web en forma local que incluya: Servidor Web: Apache Gestor de Base de datos: Mysql Php Editor de Texto o Web(AconsejoUltraEditoNotePad ++)Como todo esto resulta un poco engorroso instalarlo si no tienes experiencia, existen aplicaciones que te facilitan mucho la tarea instalndoteApache, MySQL y Phpcon un proceso muy intuitivo (el tpico siguiente, siguiente).Entre las aplicaciones que tenemos disponibles para instalar el pack de Apache, MySql y Php recomiendo una de estas dos: WampServer Appserv 2.5.10Para este tutorial vamos a utilizarAppserv 2.5.10, asque lo primero que haremos ser descargarla desde su pgina oficial.Una vez tenemos descargada la aplicacin la instalamos para tener finalmente en nuestro ordenador lo que necesitamos para empezar manos a la obra.Instalar estos paquetes (utilizar solo uno) es bien sencillo aunque aqu tenis 2 tutoriales bien explicados para seguirlos paso a paso: Cmo instalar Appserv en nuestro ordenaror? Cmo instalar Wamp en nuestro ordenaror?Ya tenemos instalado Appserv en nuestro ordenador!!. Vamos a hacer una prueba sencilla para saber si est todo correcto:1. Probar Mysql: Para probar si tenemos instalado Mysql en nuestro ordenador, basta con abrir el navegador y escribir la siguiente direccin > http://localhost. Si nos muestra una pgina con enlaces para acceder aphpMyAdmin Database Manager Version 2.10.3 y aPHP Information Version 5.2.6 ,entre otros,podemos estar contentos de tener nuestro ordenador preparado. Ahora slo tenemos que entrar en phpMyAdmin Database Manager y poner las credenciales que configuramos en la instalacin. (si no has cambiado nada, normalmente es usuario: root y password: a espacios).2. Probar PHP: Podemos hacerlo de 2 maneras, la ms rpida y fcil es hacer clic en el enlace que nos sale en el punto anterior (PHP Information Version 5.2.6), si nos muestra informacin de PHP, lo tenemos correctamente instalado. La otra manera sera crearnos un archivo .php cuyo contenido sea por ejemplo:[php][/php]Que hemos aprendido en este captulo?Si todo ha ido bien y no tenis dudas (lo que las tengis dejarme un comentario), ahora mismo hemos aprendido a poner nuestro ordenador a punto para empezar a crear nuestra pequea aplicacin en PHP y Mysql.Por tanto, en nuestro ordenador tendremos instalado Php, Mysql y Apache.En el prximo capitulocrearemos la base de datos con las tablas USUARIOS y USERS_TEMPpara dar de alta a los usuarios en nuestra aplicacin.

Registros de usuarios en Php y Mysql con validacin de campos y activacin por mail 3/6Crear la base de datosLa base de datos para el registro de usuarios se puede hacer (entre otras) de dos maneras:1. Una sola tabla llamadaUSUARIOScon campo de activacin2. Dos tablas llamadasUSUARIOSyUSERS_TEMPEn nuestro caso y es el que aconsejo yo, vamos a utilizar la segunda opcin. Elegir una u otra va a gustos, pero lo que si es cierto es que de esta manera evitamos tener en una misma tabla usuarios buenos de usuarios que podrian ser peligrosos o Spam.La explicacin de optar por crear una tabla USERS_TEMP es bien sencilla. Seguro que alguna vez os habis registrado en una web y para verificar que tus datos son correctos (es decir, que no eres un robot de los que se mueven por Internet) se enva un e-mail (el facilitado en el formulario de registro) al usuario con un enlace para activar su cuenta. Bien, pues a nivel de tabla consiste en que cuando el usuario rellena el formulario y lo enva, se da de alta un registro en la tabla USERS_TEMP (temporal) hasta que active su cuenta mediante el link que se le ha enviado por correo, momento en el cual se da de alta en la tabla definitiva USUARIOS.Grficamente el proceso sera de esta manera:

Ya que sabemos el funcionamiento del proceso de registro de usuarios, vamos acrear nuestra base de datos en PhpMyAdmin.Como ya tenemos instalado MySql, tendremos que acceder a PhpMyAdmin donde daremos de alta la base de datos y las tablas, siguiendo los siguientes pasos:Abrimos el navegador y escribimoshttp://localhosty hacemos clicen PhpMyAdmin e introducimos los datos de Usuario y Contrasea (por defecto suele ser usuario root y contrasea a espacios).Crear base de datos PRUEBA1En vuestro caso lo podeis llamar como queris, eso si, el cdigo que voy escribiendo siempre estar enfocado para la base de datos PRUEBA1, tenedlo en cuenta.

Creamos tabla USUARIOSEn esta tabla daremosde alta a los usuarios finales que ya han activado su cuenta a travs del enlace enviado por e-mail.

La tabla USUARIOS se compone de los siguientes campos:id_usuario:Este campo es numrico y se autoincrementarcada vez que se inserte un registro en la tabla. Con esto tendremos un identificador nico en cada Registro. Es un tipo campo que recomiendo utilicis en todas las tablas.usuario: Campo que definimos como nico para que no puedan registrarse usuarios con el mismo nombre.password: En este campo podramos hacer varias cosas como definirlo con una longitud de 32 para as poder guardar en la base de datos la contrasea encriptada con lafuncin MD5lo cual recomiendo, pero esto lo intentaremos tratar mas adelante en prximos tutoriales anexos a este.Mientras tanto puedes echarle un vistazo al siguiente enlace sobreEncriptacin en MySQLo a este otro sobreMD5 en PHPpara que te hagas una idea, aunque cuando llegue el momento lo haremos desde PHP.email: Este campo tambin lo definimos como nico para que un mismo usuario no se registre mas veces con el mismo e-mail.fecAlta: Fecha en la que el usuario se dio de alta.Para hacer ms fcil el trabajo (aunque recomiendo que lo hagis a mano os aseguro que aprendereis mas de vuestros errores), podis escribir estaconsulta SQL que os dar de alta la tabla USUARIOS.PLAIN TEXTMySQL:1. CREATE TABLE`usuarios`(2. `id_usuario`SMALLINT(4)NOT NULLAUTO_INCREMENTCOMMENT'Campo clave de la tabla USUARIOS autoincrementable',3. `usuario`VARCHAR(50)NOT NULLCOMMENT'Usuario nico. No puede haber dos usuarios iguales',4. `password`VARCHAR(50)NOT NULL,5. `email`VARCHAR(100)NOT NULLCOMMENT'E-mail nico. No puede haber dos usuarios con el mimo e-mail',6. `nombre`VARCHAR(150)NOT NULL,7. `fecAlta`DATENOT NULLCOMMENT'Fecha de alta en la tabla',8. PRIMARY KEY(`id_usuario`),9. UNIQUEKEY `usuario`(`usuario`,`email`)10. )ENGINE=INNODBDEFAULTCHARSET=utf8 COMMENT='Tabla de Usuarios finales'AUTO_INCREMENT=4;Creamos la tabla USERS_TEMPEn esta tabla daremos de alta a los usuarios que aun no hayan activado su cuenta, donde permanecern un lmite de tiempo (que definiremos nosotros), en caso de no ser activada en este tiempo (es decir, que no hayan hecho clic en el enlace enviado por correo) sern borrados de la tabla USERS_TEMP con lo que no llegaran a pertenecer a la tabla de usuarios final "USUARIOS".

Para hacer ms fcil el trabajo (aunque recomiendo que lo hagis a mano os aseguro que aprendereis mas de vuestros errores), podis escribir esta consulta SQL que os dar de alta la tabla USERS_TEMPPLAIN TEXTMySQL:1. CREATE TABLE`users_temp`(2. `id_usersTemp`SMALLINT(4)NOT NULLAUTO_INCREMENT,3. `nombre`VARCHAR(40)NOT NULL,4. `usersTemp`VARCHAR(50)NOT NULL,5. `password`VARCHAR(50)NOT NULL,6. `email`VARCHAR(100)NOT NULL,7. `fecAlta`DATENOT NULL,8. `txt_Activ`VARCHAR(50)NOT NULL,9. PRIMARY KEY(`id_usersTemp`),10. UNIQUEKEY `usuario`(`usersTemp`,`email`)11. )ENGINE=INNODBDEFAULTCHARSET=utf8AUTO_INCREMENT=12;En esta ocasin no voy a explicar cada campo puesto que lo nico que cambiar es el nombre (aadiendole un temp al final).Que hemos aprendido en este captulo?Ya tenemos la base de datos lista para poder realizar con xito el proceso deregistro de usuarios en PHP con activacin por mail. En este momento podemos trastear con nuestra nueva base de datos "PRUEBA1".En el prximo capitulo crearemos elformulario de registropara que el usuario pueda darse de alta en nuestras bases de datos.Registros de usuarios en Php y Mysql con validacin de campos y activacin por mail 4/6

Crear formularioMediante un formulario el usuario tendr que rellenar una serie de campos requeridos para poder darlo de alta en una tabla temporal (USER_TEMP) en primera instancia para luego pasar a formar parte de la tabla final (USUARIOS), no sin antesvalidar los datos introducidos en el formulariopara as tener informacin correcta en nuestra base de datos.El formulario contendr los siguientes campos: Nombre(class text) Usuario(class text) contrasea(class password) contrasea2(class password) E-mail(class text) Enviar Formulario(class submit)Una vez el usuario rellene los campos y pulse en el botn "Enviar Formulario", los datos sernvalidados mediante PHP(podis ver otro tipo de validaciones de formulario en esta direccinValidacin de formularios con jQuery)Por lo tanto lo que tenemos que tener claro son los tipos de validaciones que vamos a hacer, que son:1. Nombre: Validamos que tenga como mnimo una longitud de 4 caracteres2. Usuario: Validar los caracteres introducidos en el campo y que el Usuario no exista ya en la base de datos (Recuerda que en la base de datos el campo Usuario lo declaramos nico, por lo tanto no puede haber dos iguales).3. Contraseas: Validar que la contrasea 1 y la contrasea 2 son iguales, adems que tengan un mnimo de 5 caracteres. Por seguridad una vez se envan los datos a validar, si hay algn error no se recuerdan los campos Password, as que el usuario tendr que volver a escribirlo.4. Email: Validar el formato del email y a continuacin validar que el e-mail no existe ya en la base de datos. (Recuerda que en la base de datos el campo email lo declaramos nico).NOTA: Esta forma de validar y sus archivos han sido inspirados en un post creado porWeb.ontuts.com(http://web.ontuts.com/tutoriales/como-validar-un-formulario-con-php-y-javascript-jquery/comment-page-1/#comment-3886)Empecemos por lacreacin del formulario.En la mayora de los casos, los desarrolladores suelen crear formularios con tablas o con labels. Recomiendo utilizarlabels en los formulariosy controlar su aspecto mediante CSS.Vamos a ir aadiendo cdigo segn vamos avanzando, para as entenderlo ms fcil asi que intentar explicar el cdigo paso a paso.A la pgina del formulario le llamaremosformulario.phpPLAIN TEXTHTML:1. 2. 3. Formulario de Registro4. Nombre5. 6. Nombre de usuario7. 8. Contrasea9. 10. Repite Contrasea11. 12. Email13. 14. 15. 16. 17. 18. 19. 20. Hasta ahora lo nico que hemos hecho escrear un formulario simple en HTMLen el que a cadainputle otorgamos el parmetronameque ser el que despus pasaremos por PHP.Sabiendo esto, por ejemplo, para pasar el valor del campo "Nombre de usuario"mediante PHP, utilizaremos la variable $username (que hemos declarado en el prametroname)Como podis apreciar, he incluido el formulario en dos capas llamadas wrapper y section y en cada "input" el valortextpara los campos en los que se incluye texto ysubmitpara el botn. Esto nos sirve para que con ayuda de las hojas de estilo (CSS) podamos darle un mejor aspecto.Para enlazar el archivo "formulario.php"con la hoja de estilo utilizamos el siguiente cdigo:PLAIN TEXTHTML:1. Con esto estamos diciendo que incluya dentro del archivo"formulario.php"la hoja de estilos que se encuentra en la misma carpeta con el nombre"main.css".Nota: No voy a entrar en detalle sopbre las hojas de estilo para centrarnos ms en lo que es la parte HTML y PHP, asi que el cdigo para darle estilo al formulario lo tenis disponible en elsiguiente enlace.Por ahora el formulario quedara de la siguiente manera:

Se ve bonito verdad?. Bueno pues ya lo tenemos creado pero de forma esttica, ahora lo haremos dinmico incluyendo lavalidacin del formulario con PHP.Antes de nada quiero explicar que la validacin la vamos a hacer en el mismo archivo "formulario.php"para que cuando el usuario haga clic en enviar formulario reciba los mensajes de error en la misma pgina sin que los datos viajen entre archivos. Esto se consigue poniendo en el formulario el parmetroactionigual al archivo donde tenemos dicho formulario.Quedara de la siguiente manera:PLAIN TEXTHTML:1. Como veis he incluido el valormethod=post, con esto lo que le estamos diciendo es que las variables pasadas por el formulario se podrn recoger con el mtodo$_POST[variable].NOTA: Si tenis dudas con la forma de pasar las variables os recomiendo este tutorial donde explican ladiferencia entre el mtodo POST y GET en PHP.Ahoraya tenemos preparado el formulario para enviar variablesy poder "trastear" con ellas.Vamos a hacerlo por partes, empezaremos validando el nombre. Os recuerdo de nuevo como vamos a validar el usuario:Validacin del Nombre: Validamos que tenga como mnimo una longitud de 4 caracteres.Validar longitud de un campo y carcteres permitidosLas validaciones las vamos a crear confunciones en PHP. Estas funciones sern declaradas al principio del archivo, antes de definir la etiquetaHTML.Vamos a explicar este la validacin de la longitud de un campo y caracteres permitidos con el campo Nombre, pero nos servir para cualquier otro en el que queramos hacer ese tipo de validacin.Nos vamos al archivoformulario.phpy ponemos este cdigo justo antes de la linea donde apareceDOCTYPE:PLAIN TEXTPHP:1. //variables valores por defecto2. $name="";3. 4. /*Validamos que el nombre no tenga caracteres extraos5. y que su longitud sea mayor que 4*/6. functionvalidateName($name){7. //NO cumple longitud minima8. if(strlen($name)Lo primero que vemos es que se inicializa la variablenamea espacios, as nos aseguramos que no contiene ningun valor extrao (o como se suele decir, basura).La funcinvalidateName, se encarga de recoger el valor de la variablenameque hemos pasado mediante el mtodo POST por el formulario. Si os fijais, donde hacemos la llamada a la funcin, le estamos pasando dicho valor (la variable que esta entre parntesis):PLAIN TEXTPHP:1. if(!validateName($_POST['name']))Con el valor recogido en la funcin, hacemos las comprobaciones necesarias como son la longitud mnima y los caracteres soportados. La funcinValidateNamedevuelve "false" si hay algun error en la validacin y por el contrario "true" si todo es correcto, informando el camponamecon el texto "error" si el retorno de la funcin es "false".A la vuelta de la funcin hacemos la comprobacin de que si la variablenameno es igual a "error", entonces la validacin del formulario ha sido existosa, informando la variablestatuscon el valor 1.Esta variablestatuses la que nos informar de si los campos se han introducido correctamente o no. Por tanto, lo que tenemos que tener claro es que sistatuses igual a 1, enviamos el formulario, de lo contrario, informaremos el error en cuestin.Cmo logramos esto?. Pues es bastante sencillo una vez veamos el cdigo. Lo que haremos es incluir en nuestro formulario una condicin con la variablestatus. Sistatusno es 1, mostramos el formulario con los errores, sistatuses 1 informamos al usuario de que la validacin ha sido correcta.Si lo plasmamos en pseudocdigo para que lo entendis mejor seria as: Si variable status no est vaca Mostramos el formulario con los errores correspondientes en rojo. En caso contrario Mostrar al usuario texto informando que el formulario se ha enviado con xito.Os ha quedado claro?. Creo que es una buena forma de explicarlo para que lo entendis a primera vista. Para ver el cdigo que tendramos hasta el momento, acceder al siguiente enlace:Cdigo Fuente 1Fijaros que en la etiquetalabeldel campo Nombre he puesto otra etiquetaspanen la que informaremos al usuario de cmo tiene que rellenar el campo:PLAIN TEXTHTML:1. Mnimo 4 carcteres (permitidos de la A a la Z)Esto no servir mas tarde para indicarle al usuario los errores que hay en el formulario.Es hora de probarlo en el navegador, rellenamos todos los datos correctamente y vemos como nos escribe por pantalla "Formulario enviado con xito". Ahora probemos a forzar el error, poniendo en el campo Nombre, un nombre con 3 letras solo. Esto nos debera generar un error, es decir, no debera informar por pantalla "Formulario enviado con xito", sino dejarnos en el mismo formulario.

Como os habis dado cuenta, lo hace correctamente, pero falta algo verdad?. Pues s, porque si lo dejamos de esta manera, el usuario no sabe realmente porque no avanza el formulario, ni si quiera sabe si los datos se han enviado, asi que llega la hora de informar los errores.Para solucionar esto, vamos a poner una condicin en PHP en la etiqueta label para que cuando haya habido algn error con el nombre (es decir, la variablenamees igual a "error"), escriba las letras en rojo y cuando todo este correcto las escriba en verde. Asi que hay que modificar el cdigo y ponerlo de la siguiente manera:PLAIN TEXTHTML:1. 4. 5. Nombre Mnimo 4 carcteres (permitidos de la A a la Z)

Como veis en la imagen ya tenemos controlado este campo en cuanto a validacin y en cuanto a informar al usuario.El cdigo hasta ahora quedara as:PLAIN TEXTHTML:1. //variables valores por defecto2. $name = "";3. 4. /*Validamos que el nombre no tenga caracteres extraos5. y que su longitud sea mayor que 4*/6. function validateName($name){7. //NO cumple longitud minima8. if(strlen($name)9. 10. 11. Formulario de Registro12. 13. Nombre Mnimo 4 carcteres (permitidos de la A a la Z)14. 15. Nombre de usuario16. 17. Contrasea18. 19. Repite Contrasea20. 21. Email22. 23. 24. 25. Formulario enviado con xito!26. 29. 30. 31. 32. 33. 34. Una vez sabemos la metodologa que estamos siguiendo para validar los datos, es muy sencillo ir aadiendo campos a las validaciones. Lo nico que tenemos que tener en cuenta es lo siguiente para cada campo:Validar campos igualesPara una mayor seguridad y sobre todo para que el usuario no cometa ningn error informando el password de su cuenta de usuario, una forma muy aconsejable es obligar al visitante (futuro usuario) a repetir la contrasea para no dar pie a equivocacin.Lo primero que tenemos que hacer es inicializar la variable que vayamos a usar para los campos password, al igual que en el campo Nombre, y adems crear la funcin que nos valida:Asi que, nos vamos de nuevo al"formulario.php"y en la parte superior, lo primero que hacemos es inicializar la variablepassword1ypassword2:PLAIN TEXTPHP:1. $password1= ;2. $password2= ;Una vez inicializadas las variables pasamos a crear las funciones que pondremos despues de la funcinvalidateName:PLAIN TEXTPHP:1. functionvalidatePassword1($password1){2. //NO tiene minimo de 5 caracteres o mas de 12 caracteres3. if(strlen($password1)12)4. returnfalse;5. // SI longitud, NO VALIDO numeros y letras6. elseif(!preg_match("/^[0-9a-zA-Z]+$/",$password1))7. returnfalse;8. // SI rellenado, SI email valido9. else10. returntrue;11. }12. 13. functionvalidatePassword2($password1,$password2){14. //NO coinciden15. if($password1!=$password2)16. returnfalse;17. else18. returntrue;19. }Ahora faltara hacer las llamadas a estas funciones (colocamos debajo de la validacin del nombre de la siguiente manera:PLAIN TEXTPHP:1. if(isset($_POST['send'])){2. if(!validateName($_POST['name']))3. $name="error";4. //Aqu incluimos la validacin de los passwords5. if(!validatePassword1($_POST['password1']))6. $password1="error";7. if(!validatePassword2($_POST['password1'],$_POST['password2']))8. $password2="error";9. //Validamos si hay error10. If($name!="error"&&$password1= error &&$password2= error)11. $status=1;12. }Como vis a parte de hacer las llamadas a las nuevas funciones, hemos aadido en la condicin de "validacin si hay error" las variables de las nuevas validaciones sobre los passwords ya questatusslo cambiar a 1 cuando la validacin detodos los campossea correcta:PLAIN TEXTPHP:1. $password1!="error"&&$password1!="error"Ya tenemos la parte PHP, pero claro, como antes pasaba con el nombre, falta informar al usuario sobre la validacin y esto se logra poniendo una condicin en la etiqueta label.Recordad: Texto en Verde si es correcto, Texto en Rojo si no es correcto.En el ejemplo de la imagen que se muestra a continuacin, hemos ingresado la primera contrasea correctamente (caracteres permitidos y longitud igual o mayor que 5) y la segunda contrasea distinta a la primera.

Tenemos que cambiar el cdigo de la siguiente manera:PLAIN TEXTHTML:1. 3. 4. 5. Contrasea Mnimo 5 caracteres, mximo 12 caracteres, Slo letras y nmeros6. 7. 9. 10. 11. Repetir Contrasea Debe ser igual a la anterior12. 13. Validar si existe usuario en nuestra base de datosComo es el caso delnombre de usuario, a parte de validar los caracteres introducidos, tenemos que hacer una consulta a la base de datos para comprobar que no existe, ya que en caso de existir, no se puede dar de alta.Esto se consigue tambin utilizandocdigo PHP para acceder a nuestra base de datos (MySQL)y en concreto a la tablaUSERS_TEMP, que es donde en primera instancia se darn de alta los usuario como ya explicamos en el tema anterior sobre comoCrear la base de datosPara validar si el usuario existe en la tablaUSERS_TEMPde nuestra base de datos tenemos que crear la funcin correspondiente (validateExistUsername):Al igual que hemos hecho con el campo name y los campos password1 y 2, inicializamos la variable existUsername:PLAIN TEXTPHP:1. $existusername="";Una vez inicializada la variable pasamos a crear las funcin que pondremos despus de la funcin validatePassword2:PLAIN TEXTPHP:1. functionvalidateExistUsername($username){2. /*Los datos de estas variables dependen de cmo tengas configurado tu servidor web, en mi caso y en local, lo tengo de la siguiente manera, por favor, modificalo con tus datos*/3. $servidor="localhost";4. $usuario="root";5. $password="";6. $sdb="prueba1";7. 8. $ilink=mysql_connect($servidor,$usuario,$password)ordie(mysql_error());9. //$ilink = mysql_connect("localhost","root","") or die(mysql_error());10. mysql_select_db($sdb,$ilink);11. $consulta="select usersTemp from users_temp where usersTemp = '$username'";12. $resultado=mysql_query($consulta,$ilink)ordie(mysql_error());13. if(mysql_num_rows($resultado)>0)14. returnfalse;15. else16. returntrue;17. }NOTA: Importante acordarse de cambiar los valores de las variablesservidor,usuario,passwordysbda lo que vosotros tengais configurado en vuestro servidor web y de base datos.Ahora faltara hacer las llamadas a esta funcin (colocamos debajo de la validacin del password2 de la siguiente manera:PLAIN TEXTPHP:1. if(isset($_POST['send'])){2. if(!validateName($_POST['name']))3. $name="error";4. if(!validatePassword1($_POST['password1']))5. $password1="error";6. if(!validatePassword2($_POST['password1'],$_POST['password2']))7. $password2="error";8. if(!validateExistUsername($_POST['username']))9. $existusername="error";10. 11. //Validamos si hay error12. if($name!="error"&&$password1!="error"&&$password1!="error"){13. if($existusername=="error"){14. $existeU=1;15. }16. /*si no hay ningn error de validacin17. y adems el usuario no existe en la base de datos18. el formulario es correcto*/19. if(!$existeU&& !$existeE){20. $status=1;21. }22. }23. }Como vis a parte de hacer la llamada a la nueva funcin, hemos aadido en la condicin de "validacin si hay error" la variable de la nueva validacin sobre si existe el usuario en la base de datos (variable existusername distinto de "error"), ya que elstatusslo cambiar a 1 cuando la validacin detodos los campossea correcta.Prubalo a ver que tal funciona:

Te has dado cuenta que falta algo verdad?. Pues tienes razn, ahora falta la parte en la que informamos al usuario en caso de que haya algn error (como puedes ver en la imagen superior). Por tanto nos faltara poner en el cdigo, en concreto en la parte label del campo Username, lo siguiente:PLAIN TEXTHTML:1. 3. 4. Nombre de usuario5. if ($existusername == "error"):6. echo "El usuario " . $usernameValue . " ya existe";7. endif; ?>8. Hasta ahora hemos aprendido lo siguiente:El cdigo finalmente completado (a espera de vuestro trabajo) queda de la siguiente manera:Cdigo Fuente 2Con esto, y modificando el archivo"formulario.php", podemos hacer las siguientes validaciones que aun nos faltara por incluir y que os dejo a vuestra merced para que as podis aprender (que se que a veces somos muy cmodos y acudimos al copia/pega).Con esto tenis trabajo, pero estoy seguro que con vuestra capacidad y este tutorial podris lograrlo. Ahhh y recordad que en los comentarios me podis dejar cualquier duda o sugerencia e intentar resolver en la medida de lo posible.De todas formas, aquellos que estis interesados en tener el archivo"formulario.php"tan slo dejarme un comentario en este mismo post y os lo mandar sin ningn problema.En el siguiente tutorial veremos el temacomo insertar usuarios en MySql desde un formulario PHP.

Registros de usuarios en Php y Mysql con validacin de campos y activacin por mail 5/6

Registrar Usuarios en PHPEn este tema vamos a aprender comoinsertar usuarios en nuestra base de datos desde phpdespus de habervalidado los datosintroducidos por el usuario en el formulario.Lo primero que tenemos que saber escmo se inserta un registro con MySQL?. Esta pregunta la podemos aclarar con el siguiente esquema:PLAIN TEXTMySQL:1. --Caso 12. INSERTINTOnombretabla(campo1, campo2, campo3)3. VALUES(valor1,valor2,valor3);4. --Caso 25. INSERTINTOnombretablaVALUES(valor1,valor2,valor3);Como podis ver, en principio, hay dos maneras de hacerlo, una en la que informamos todos los campos que vamos a insertar (puede que nos lleve a menos confusiones) y otra en la que solo informamos los valores. Nosotros vamos a usar el primer caso.Nombretabla: Pondremos la tabla en la que vayamos a insertar el registro. En el caso de este tutorial, utilizamos la tablausers_temp.Values: Lo que va en el parntesis de los valores oVALUESdepende de los campos que tengamos en nuestra tabla. Si tenemos 3 campos, pondremos 3 valores, si tenemos 5 campos, pondremos 5 valores.En el caso de nuestra tablausers_temp, tenemos los campos (id_usersTemp, nombre, usersTemp, password, email, fecAlta). Por lo tanto todos estos campos los tenemos que tener en cuenta a la hora de dar de alta con la sentenciaINSERT, aunque bien es cierto, que el campoid_usersTempse puede descartar de la sentencia puesto que lo declaramos "Autonumeric", y nos incluir un nmero en el campo que insertemos (suma automticamente 1 al ltimo nmero introducido).Bien, ahora ya sabemos comoinsertar un registro en nuestra base de datos con MySQL, pero le toca el turno aconectar nuestro archivo PHP con la base de datos.Para hacer esta conexin tendremos que abrir de nuevo el archivo"formulario.php"y aadir una funcin que se llamarinsertarReg. Vamos a ver el cdigo y despus lo paso a explicar:PLAIN TEXTPHP:1. //FUNCION PARA INSERTAR EL REGISTRO EN LA TABLA users_temp2. functioninsertarReg($name_,$username_,$password1_,$email_){3. /*Teneis que declarar las variables $servidor, $usuario,$password y4. $sdb (base de datos). En mi caso para Localhost tengo lo siguiente:*/5. $servidor="localhost";6. $usuario="root";7. $password="";8. $sdb="prueba1";9. 10. $ilink3=mysql_connect($servidor,$usuario,$password)ordie(mysql_error());11. mysql_select_db($sdb,$ilink3);12. 13. $inserta="insert into users_temp (nombre,usersTemp,password,email,fecAlta) values ('$name_','$username_','$password1_','$email_',CURDATE())";14. $resultado3=mysql_query($inserta,$ilink3)ordie(mysql_error());15. 16. if(!$resultado3)17. returnfalse;18. else{19. returntrue;20. 21. }22. }Lo que primero podemos ver es que la funcin recoge una serie de parmetros: name_, username_, password1_, email_ . Estos parmetros son exactamente los que se van a introducir en la tablausers_temp.Ya dentro de la funcin vemos como declaramos unas variables, estos son los datos de acceso a nuestra base de datos: servidor, usuario, password y base de datos a la que nos conectamos.PLAIN TEXTPHP:1. $servidor="localhost";2. $usuario="root";3. $password="";4. $sdb="prueba1";En vuestro caso, lo tendris que modificar con los datos de acceso que hayis configurado.Lo siguiente que vemos es la conexin con la base de datos, de la siguiente forma:PLAIN TEXTPHP:1. $ilink3=mysql_connect($servidor,$usuario,$password)ordie(mysql_error());2. mysql_select_db($sdb,$ilink3);Con esta lnea ya hemos hecho laconexin entre PHP y MySql, ahora la funcin se va a encargar de ejecutar una sentencia(INSERT), que en nuestro caso se trata de insertar un registro, tal y como hemos visto al principio del tutorial.Para hacerlo un poco ms estructurado y limpio, guardamos la sentenciaINSERTdentro de una variable.PLAIN TEXTPHP:1. $inserta="insert into users_temp (nombre,usersTemp,password,email,fecAlta) values ('$name_','$username_','$password1_','$email_',CURDATE())";2. $resultado3=mysql_query($inserta,$ilink3)ordie(mysql_error());En estas lenas de cdigo lo nico que tengo que destacar es que en la parteVALUESde la sentencia, hemos puesto los valores que nos pasan en la funcin y que no hace falta poner en dicha sentencia el campoid_usersTempya que como hemos comentado anteriormente, es autonumrico.Para comprobar si se ha dado de alta un nuevo usuario correctamente, lo nico que tendremos que hacer es validar la variableresultado3, como podemos ver en el siguiente cdigo:PLAIN TEXTPHP:1. if(!$resultado3)2. returnfalse;3. else4. returntrue;Ya tenemos la funcin creada, ahora Qu falta?. Pues es sencillo, lo nico que falta es hacer la llamada a esa funcin pasndole los parmetros nombre, usuario, password e email que previamente hemos validado (Ver tutorialRegistro de usuarios en PHP y mySQL con validacin y activacin por mail).Esta llamada a la funcininsertarRegla tendremos que posicionar justo despus de que la validacin de los datos introducidos por el usuario hayan sido satisfactorias.Os voy a mostrar el cdigo resumido para que veais mejor donde habra que colocar la funcin:PLAIN TEXTHTML:1. 2. 3. 4. 5. 9. 10. 14. 15. 16. 17. Recordar que la variablestatuses la que controla si los datos se han validado correctamente, estando vaca en caso de que haya algn error, y siendo valor 1 en caso de que no haya errores..As que donde tendramos que poner la llamada a la funcin est bastante clara como seguramente habis pensado. Por lo tanto el cdigo resumido quedara de la siguiente manera:PLAIN TEXTHTML:1. 2. 3. 4. 5. 9. 10. 14. 15. 16. 17. Llegados a este punto, aqu tenis el cdigo con todo lo que llevamos hasta ahora:Cdigo Fuente 1Si vamos al navegador y ponemos la URL donde se encuentraformulario.php, en mi caso sera, "http://localhost/PRUEBA1/formulario.php" nos aparecer el formulario que rellenaremos con datos vlidos.Una vez todo correcto si le damos a "Enviar Formulario" y hemos puesto todos los datos sin errores de validacin, veris que hay algo que no cuadra y es que aunque los datos se hayan introducido correctamente (lo puedes comprobar en phpMyAdmin accediendo a nuestra tablausers_Tempde la base de datosPRUEBA1) el usuario no tiene ni idea de lo que ha pasado, es decir, tanto si ha ido bien como si ha ido mal, ahora mismo tal y como esta el cdigo no obtiene informacin del estado de su peticin.Asi que vamos a modificar un poco el cdigo para solucionar esto. Lo primero que tenemos que tener claro es que las funciones pueden devolver valores, y como bien hemos codificado ya en ella, hemos puesto 2 returns (true y false).Estos valores que devuelve la funcin nos servirn para verificar si se ha insertado el registro en la base de datos o no. Si estrue, significa que se ha insertado y si esfalseha habido algn problema. As que jugaremos con este valor aadiendo una condicin en la llamada ainsertarReg.El cdigo quedara de la siguiente manera:PLAIN TEXTPHP:1. 3. Registro introducido correctamente en la base de datos4. 5. 6. No se ha podido insertar el registro en nuestra base de datos7. Hemos incluido en unifla funcin parainsertar el Registro en la base de datos. Si la funcin devuelvetrueentrar en elIF, por el contrario si devuelvefalseir por elelse. As que lo que hemos hecho es, si todo ha ido bien, informar al usuario que el registro se ha introducido correctamente y si ha ido mal, informar con color rojo que no se ha podido insertar el registro en la base de datos.

Ahora ya tenemos completo el registro, informando al usuario tanto si se ha realizado correctamente como si no, como podis ver en la imagen arriba.El cdigo completo lo tenis en el siguiente enlace:Cdigo Fuente 2Qu hemos aprendido?En este tutorial, hemos aprendido a realizar altas de usuarios en MySql desde PHP gracias a un formulario.En el siguiente tutorial que publicaremos en breve, veremoscomo mandar un mail desde PHP para activar usuario con el mtodo GET.Registros de usuarios en Php y Mysql con validacin de campos y activacin por mail 6/8

Este es la parte 6 de 8 del tutorial sobre "Registros de usuarios en Php y Mysql con validacin de campos y activacin por mail" y ya nos queda muy poco para acabar. En el anterior tema aprendimos a dar de alta el usuario en la tablausers_temp.En esta parte del tutorial vamos a vercmo activar usuarios en PHP por email, dividindolo en varias partes: Crear un nuevo campo en la tablausers_temp Crear funcin generar_txtAct que genera una clave la cual se insertar en el nuevo campo txt_activ. Incluir campo txt_activ en la funcin insertarReg Enviar e-mail al usuario con el enlace para activar su cuenta.Campo txt_activYa vimos como crear la tablausers_tempdonde se guardaran todos los usuarios registrados medianteformulario.phppero que an no habanactivado su cuenta.Para que entendierais mejor las anteriores partes de estos tutoriales, no os habl del campo que trataremos en este apartado del tutorial.En la tablausers_temppor lo tanto, incluiremos un nuevo campo llamadotxt_activel cual tendr informado un cdigo o clave de 20 posiciones (en principio, ya que despus podremos parametrizarlo en la llamada a la funcin).Para generar este campo en phpmyadmin tenemos que entrar en la estructura de la tablausers_tempy debajo de donde tenemos reflejada dicha estructura (donde se muestran todos los campos), hay un apartado para aadir campos, donde aadiremos el nuestro justo debajo del campofecAlta. Lo veris mejor con la siguiente imagen:

El campotxt_activlo definiremos varchar(20) NOT NULL.

Si lo queris hacer mediante cdigo, incluiramos en la pestaa SQL la siguiente sentencia:PLAIN TEXTMySQL:1. ALTER TABLEusers_temp ADD txt_ActivVARCHAR(20)NOT NULLAFTER fecAlta ;La estructura ahora quedara de la siguiente manera:

Funcin generar_txtActUna vez tenemos creado el campotxt_activvamos a crear la funcin para que nos devuelva un campo de 20 caracteres aleatorios.PLAIN TEXTPHP:1. functiongenerar_txtAct($longitud,$especiales){2. // Array con los valores a escoger3. $semilla=array();4. $semilla[]=array('a','e','i','o','u');5. $semilla[]=array('b','c','d','f','g','h','j','k','l','m','n','p','q','r','s','t','v','w','x','y','z');6. $semilla[]=array('0','1','2','3','4','5','6','7','8','9');7. $semilla[]=array('A','E','I','O','U');8. $semilla[]=array('B','C','D','F','G','H','J','K','L','M','N','P','Q','R','S','T','V','W','X','Y','Z');9. $semilla[]=array('0','1','2','3','4','5','6','7','8','9');10. 11. // si puede contener caracteres especiales, aumentamos el array $semilla12. if($especiales){$semilla[]=array('$','#','%','&','@','-','?','','!','','+','-','*');}13. 14. // creamos la clave con la longitud indicada15. for($bucle=0;$bucle