Recordad que para pedir soporte alguno, debéis facilitar los datos de soporte oportunos por favor, mirad aquí y leer las Normas generales del foro, esto nos servirá de ayuda para dar el mejor soporte..

Gracias.

La Administración de phpBB España.

Como hacer un sencillo sistema de registro en PHP y MySQL

PHP, HTML, CSS, JS, jQuery, etc.
Avatar de Usuario
Alorse
Ex Staff
Mensajes: 5144
Registrado: 22 Mar 2008, 02:14
Género:
Edad: 36

Como hacer un sencillo sistema de registro en PHP y MySQL

#1

Mensaje por Alorse »

Sencillo/fácil sistema de registro de usuarios en PHP y MySQL con manejo de sesiones

Esta vez quiero mostrarles como hacer para que tu web tenga un sistema de registro para tus usuarios, ya con esto puedes hacer muchas cosas como darles permisos específicos, restringir la entrada de visitantes a algunas partes de tu web, etc..

Cabe aclarar que el script es bastante básico, para quienes empiezan en esto de la programación web.

Requerimientos:
Hosting (servidor local o web)
PHP (ojala 5)
1 base de datos MySQL

Empecemos:
Para el desarrollo de nuestro script necesitaremos la creación de 4 archivos .php:
  • conexion.php
  • registro.php
  • login.php
  • perfil.php
IMPORTANTE: Tengan cuidado a la hora de copiar y pegar el contenido de los archivos, recuerden no dejar ningún espacio entre el inicio de linea y la expresión "<?php".
  1. Lo primero es crear una base de datos a la cual vamos a poner nombre "registro".
    En la cual vamos a generar la siguiente consulta SQL:

    Código: Seleccionar todo

    CREATE TABLE usuarios (
    	id		int(5) not null auto_increment,
    	fecha	int(10) not null,
    	nick	varchar(20) not null,
    	pass	varchar(32) not null,
    	mail	varchar(40) not null,
    	ip		varchar(15) not null,
    	primary key (id),
    	key (nick,pass)
    )
    Lo que estamos haciendo es crear una tabla en nuestra base de datos llamada "usuarios", en la cual almacenaremos los datos de nuestros usuarios.
  2. Luego empezaremos con la creación de nuestro primer archivo "conexion.php", el cual se encarga de conectar nuestro sistema con la base de datos que creamos en el punto anterior.
    Este archivo también tendrá algunas funciones php necesarias para el registro y el logueo de los usuarios.

    Código: Seleccionar todo

    <?php
        $nombre_server[1] = 'localhost'; //Servidor al cual nos vamos a conectar.
        $nombre_user[2] = 'root'; //Nombre del usuario de la base de datos.
        $password[3] = ''; //Contraseña de la base de datos
        $nombre_db[4] = 'registro'; //nombre de la base de datos
    
        $conectar = @mysql_connect($nombre_server[1],$nombre_user[2],$password[3]) or exit('Datos de conexion incorrectos.');
        mysql_select_db($nombre_db[4]) or exit('No existe la base de datos.');
        
    /*En este archivo también pondremos unas funciones necesarias para el registro y el login*/    
    session_start();
    
    /*Función que se encarga de eliminar codigo malicioso de las variables.*/
    function limpiar($var)
    {
    
        $var = trim($var);
        $var = htmlspecialchars($var);
        $var = str_replace(chr(160),'',$var);
        return $var;
    }
    
    /*Función que se encarga de validar el email de registro para que sea correcto.*/
    function validar_email($email){
        $mail_correcto = 0; 
        //compruebo unas cosas primeras 
        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 != ".")
                    { 
                       $mail_correcto = 1; 
                    }
                 }
              }
           }
        }
        if ($mail_correcto) 
           return 1;
        else 
           return 0;
    }
    
    /*Funcion que se encarga de validar si el usuario esta registrado en el sistema*/
    function user_login()
    {
        if(!$_SESSION['id'])
        {
            exit ("Solo usuarios registrados, <a href='javascript:history.back(-1)'>Volver</a>");
        }
    }
    ?>
  3. Ya tenemos nuestro archivo de conexión con la base de datos entonces continuamos con el archivo "registro.php" que como su nombre lo indica se encargara de almacenar los usuarios en la base de datos.

    Código: Seleccionar todo

    <?php
    include("conexion.php");
    //Sistema de registro --HiperAcme.net--
    
    if(isset($_POST['registro']))//Vallidamos que el formulario fue enviado
    {    /*Validamos que todos los campos esten llenos correctamente*/
        if(($_POST['nick'] != '') && ($_POST['mail'] != '') && ($_POST['pass'] != '') && ($_POST['conf_pass'] != ''))
        {
            if($_POST['pass'] != $_POST['conf_pass'])
            {
                echo '<br />Las contrase&ntilde;as no coinciden';
            }
            else
            {
                $date= time(); 
                $nick= limpiar($_POST['nick']);
                $mail= limpiar($_POST['mail']);
                $pass= md5(md5(limpiar($_POST['pass'])));
                $ipuser= $_SERVER['REMOTE_ADDR'];            
    
                $b_user= mysql_query("SELECT nick FROM usuarios WHERE nick='$nick'");
                if($user=@mysql_fetch_array($b_user))
                {
                    echo '<br />El nombre de usuario o el email ya esta registrado.';
                    mysql_free_result($b_user); //liberamos la memoria del query a la db
                }
                else
                {
                    if(validar_email($_POST['mail']))
                    {
                        mysql_query("INSERT INTO usuarios (fecha,nick,mail,pass,ip) values ('$date','$nick','$mail','$pass','$ipuser')");
                        echo '<br />Te has registrado Correctamente, ahora podras iniciar sesi&oacute;n como usuario registrado.';
                    }
                    else 
                    {
                        echo '<br />El email no es valido.';
                    }
                }
            }
        }
        else
        {
            echo '<br />Deberas llenar todos los campos.';
        }
    }
    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <title>Registro de Usuarios</title>
    </head>
    <body>
    <h2>Sistema de Registro</h2>
    <div align="center">
        <form name="registrar" action="registro.php" method="post" onsubmit="return validar()" />
            <dt><label>Nick:</label></dt>
            <input type='text' name='nick' /><br /><br />
    
            <dt><label>E-mail:</label></dt>
            <input type='text' name='mail' /><br /><br />
    
            <dt><label>Contraseña:</label></dt>
            <input type="password" name='pass' /><br /><br />
    
            <dt><label>Confirmar Contraseña:</label></dt>
            <input type="password" name='conf_pass' /><br /><br /><br /><br />
            
            <input type="submit" name="registro" style="width:100px;" tabindex="6" value="Registrar" />
            <input type="reset" name="Limpiar" style="width:100px;" tabindex="6" value="Limpiar" />
        </form>
        <a href="login.php">Identificarse</a>
    </div>    
    </body>
    </html>
    Hasta aquí nuestro sistema de registro ya funciona y va perfectamente.
  4. Ahora procedemos a crear el archivo de conexión de los usuarios , el "login.php".
    Este archivos es el encargado de guardar la sesión se los usuarios para que el sistema los reconozca como usuarios registrados y logueados.

    Código: Seleccionar todo

    <?php
    include("conexion.php");
    
    if(isset($_POST['login']))
    {
        $nick= $_POST['nick'];
        $pass= md5(md5($_POST['pass']));
        $b_user=mysql_query("SELECT * FROM usuarios WHERE nick='$nick'");    
        $ses = @mysql_fetch_assoc($b_user) ;
        if(@mysql_num_rows($b_user))
        {
            if($ses['pass'] == $pass)
            {
                $_SESSION['id']=        $ses["id"];
                $_SESSION['fecha']=    $ses["fecha"];
                $_SESSION['nick']=    $ses["nick"];
                $_SESSION['mail']=    $ses["mail"];
                $_SESSION['ip']=        $ses["ip"];
            }
            else
            {
                echo 'Nombre de usuario o Contrase&ntilde;a incorrecta.';
            }
        }
        else
        {
            echo 'Nombre de Usuario o contrase&ntilde;a incorrecta.';
        }
    }
        
    if(isset($_GET['modo']) == 'desconectar')
    {
        session_destroy();
        echo '<meta http-equiv="Refresh" content="2;url=login.php"> ';
        exit ('Te has desconectado del sistema.');
    }
        
    if(isset($_SESSION['id']))
    {
        echo 'Bienvenido <b>' . $_SESSION['nick'] . '</b><br /><br />';
        echo '<b>Fecha registro:</b> ' . date("d-m-Y - H:i", $_SESSION['fecha']) . '<br />';
        echo '<b>Email:</b> ' . $_SESSION['mail'] . '<br />';
        echo '<b>IP:</b> ' . $_SESSION['ip'] . '<br /><br />';
        echo '<a href="login.php?modo=desconectar">Salir</a>';
    }
    else
    {
    ?>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <html>
    <head>
    <meta http-equiv="content-type" content="text/html; charset=utf-8" />
    <title>Login</title>
    </head>
    <body>
    <h2>Conetarse -  Desconectarse</h2>
    <div align="center">
        <form name="login_user" action="login.php" method="post" />
            <dt><label>Nick:</label></dt>
            <input type='text' name='nick' /><br /><br />
            <dt><label>Contraseña:</label></dt>
            <input type="password" name='pass' /><br /><br />
            
            <input type="submit" name="login" style="width:100px;" tabindex="6" value="Entrar" />
            <input type="reset" name="Limpiar" style="width:100px;" tabindex="6" value="Limpiar" />
        </form>
        <a href="registro.php">Registrarse</a>
    </div>
    <?php
    }
    ?>
    </body>
    </html>
    Aquí no solo tenemos el encargado de iniciar la sesión de los usuarios, sino que también se cumplen dos funciones mas:
    • Mostrar algunas opciones del perfil del usuario luego de verificar que esta logueado.
    • Terminar la sesión de usuario [Desconectarse].
    Que podrán verlas funcionando a la hora de implementar el código o en el ejemplo funcional que dejare al final.

    Hasta este momento, ya tienes todo el registro el logueo de usuarios totalmente funcional, así que hasta aquí ya tienes tenemos completo nuestro sistema de información.
  5. El ultimo de nuestros archivos, simplemente es un archivo de ejemplo para mostrar como proteger nuestra paginas de invitados que solo sena accesibles para usuarios registrados, en este caso crearemos el archivo "perfil.php".

    Código: Seleccionar todo

    <?php
    include("conexion.php");
    user_login();
        echo '<h2>Pagina solo para usuarios registrados</h2><br />';
        echo '<b>Nombre de Usuario:</b> ' . $_SESSION['nick'] . '<br />';
        echo '<b>Fecha de registro:</b> ' . date("d-m-Y - H:i", $_SESSION['fecha']) . '<br />';
        echo '<b>Email de registro:</b> ' . $_SESSION['mail'] . '<br />';
        echo '<b>IP:</b> ' . $_SESSION['ip'] . '<br /><br />';
        echo '<a href="login.php?modo=desconectar">Salir</a>';
    ?>
    La función user_login() (que pueden encontrar en el archivo conexion.php) es la encargada de verificar que el usuario este logueado, de lo contrario le mostrara un aviso diciéndole que no lo esta y no le dejara ver el contenido de la pagina que esta visitando.
    Así que las paginas que quieran proteger deberán agregarle la linea:

    Código: Seleccionar todo

    user_login();  
    Al principio luego de incluir el archivo de conexión.
Y luego de estos sencillos pasos tenemos nuestro sistema de registro de usuarios funcionando. :party:

Cualquier duda me la pueden preguntar y estaré dispuesto a ayudarles, el archivo con todo el script lo pueden descargar desde aquí: Descarga Script Completo

Y lo pueden ver funcionando en http://www.hiperacme.net/foro/dev/registro/

memoadian
Elite
Mensajes: 1572
Registrado: 27 Jun 2009, 13:07
Edad: 36

Re: Como hacer un sencillo sistema de registro en PHP y MySQ

#2

Mensaje por memoadian »

Es algo excelente, para quien empieza se de una idea, aunque yo usaria

Código: Seleccionar todo

$_SESSION[];
Gracias Alorse :bravo:
Datos de soporte
URL: http://manganimemas.com/foro
Versión phpBB: phpBB3 (3.0.9)
MODs Instalados:
Advertisement management, Jquery quick edit,
Block foro externo, Reimg image resizer,
PhpbbSEO, Multi race ranks,
Auto backup, Multiple ranks,
phpbb-seo dynamic meta tags, breizh ajax checks,
barra de mitch, Imágen campos personalizados,
centrar avatar, full quick reply editor,
ign style colored names, perfil a la izquierda,
nv newspage, phpbb security, prime links,
smilie creator, user ranks progresion bar,
buttons menu, prime notify,

Plantilla(s) usada(s): prosilver
Servidor: Pago
Actualización desde otra versión: si
Conversión desde otro sistema de foros: no
__________________________________________________________________________________________________
Instalo mods
Administrador de manganimemas.
__________________________________________________________________________________________________

Avatar de Usuario
Alorse
Ex Staff
Mensajes: 5144
Registrado: 22 Mar 2008, 02:14
Género:
Edad: 36

Re: Como hacer un sencillo sistema de registro en PHP y MySQ

#3

Mensaje por Alorse »

memoadian escribió:Es algo excelente, para quien empieza se de una idea, aunque yo usaria

Código: Seleccionar todo

$_SESSION[];
Gracias Alorse :bravo:
Use manejo de sesiones :P fíjate en el login.php :jaja:

memoadian
Elite
Mensajes: 1572
Registrado: 27 Jun 2009, 13:07
Edad: 36

Re: Como hacer un sencillo sistema de registro en PHP y MySQ

#4

Mensaje por memoadian »

Es cierto, pero me refiero al contenido restringido,
nunca habia visto usar un

Código: Seleccionar todo

    user_login();  
generalmente todos los scripts que veo vienen así

Código: Seleccionar todo

<?php
session_start();
?>
en fin, de todos modos yo solo soy un aprendiz, y tu el master.
Datos de soporte
URL: http://manganimemas.com/foro
Versión phpBB: phpBB3 (3.0.9)
MODs Instalados:
Advertisement management, Jquery quick edit,
Block foro externo, Reimg image resizer,
PhpbbSEO, Multi race ranks,
Auto backup, Multiple ranks,
phpbb-seo dynamic meta tags, breizh ajax checks,
barra de mitch, Imágen campos personalizados,
centrar avatar, full quick reply editor,
ign style colored names, perfil a la izquierda,
nv newspage, phpbb security, prime links,
smilie creator, user ranks progresion bar,
buttons menu, prime notify,

Plantilla(s) usada(s): prosilver
Servidor: Pago
Actualización desde otra versión: si
Conversión desde otro sistema de foros: no
__________________________________________________________________________________________________
Instalo mods
Administrador de manganimemas.
__________________________________________________________________________________________________

victor quimis
Invitado

Re: Como hacer un sencillo sistema de registro en PHP y MySQ

#5

Mensaje por victor quimis »

hola solo tengo en mihosting una base de datos y la tengo usada crees que podria usar de otro hosting que tengo o debe ser del mismo donde tengo alojada mi web

Avatar de Usuario
Alorse
Ex Staff
Mensajes: 5144
Registrado: 22 Mar 2008, 02:14
Género:
Edad: 36

Re: Como hacer un sencillo sistema de registro en PHP y MySQ

#6

Mensaje por Alorse »

victor quimis escribió:hola solo tengo en mihosting una base de datos y la tengo usada crees que podria usar de otro hosting que tengo o debe ser del mismo donde tengo alojada mi web
No es necesario otro hosting, si ya estas usando la base de datos puedes poner crear la tabla en esa misma base de datos, y si ya tienes creada una tabla "usuarios", solo es que le pongas otro nombre y también se lo cambies en los archivos.

victor quimis
Invitado

Re: Como hacer un sencillo sistema de registro en PHP y MySQ

#7

Mensaje por victor quimis »

malas noticias mi hosting no me permite crear mas tablas ya que es gratuito... :(
estoy intentando y no puedo ya que ya tengo usada con las tablas del foro...

Avatar de Usuario
Alorse
Ex Staff
Mensajes: 5144
Registrado: 22 Mar 2008, 02:14
Género:
Edad: 36

Re: Como hacer un sencillo sistema de registro en PHP y MySQ

#8

Mensaje por Alorse »

De seguro no te deja crear mas bases de datos, pero mas tablas creo que si, solo que entres al phpmyadmin del hosting y ejecutes lo que hay al principio del tutorial, ademas si no puedes crear mas tablas significa que tampoco podrás instalar algunos MODs o hacer muchos cambios al foro, en ese caso te recomendamos cambiar de hosting.

victor quimis
Invitado

Re: Como hacer un sencillo sistema de registro en PHP y MySQ

#9

Mensaje por victor quimis »

ahh ya gracias ya se como crear una tabla estba un poco desorientado voy a crear a ver que pasa otra pregunta conexion.php lo creo con el bloc de notas o algun programa en especial yo uso el htmlkit...
Ahh y mi base de datos se llama 300502_doctorpc tabla usuarios
hasta ahi voy bien si o no...

victor quimis
Invitado

Re: Como hacer un sencillo sistema de registro en PHP y MySQ

#10

Mensaje por victor quimis »

primary key (id), ok ya está
key (nick,pass) no hay llave solo primaria
que hago
please.....

Avatar de Usuario
Alorse
Ex Staff
Mensajes: 5144
Registrado: 22 Mar 2008, 02:14
Género:
Edad: 36

Re: Como hacer un sencillo sistema de registro en PHP y MySQ

#11

Mensaje por Alorse »

Esa linea no es necesaria, así que podrías omitirla, de igual manera no veo porque te da problemas, el script funciona común y corriente con ella o sin ella, pero si la quitas también debes quitar la ultima coma ( , ) de la linea anterior.

victor quimis
Invitado

Re: Como hacer un sencillo sistema de registro en PHP y MySQ

#12

Mensaje por victor quimis »

hola como hago para iniciar sesion tengo que copiar el codigo index en el mio?

Avatar de Usuario
Alorse
Ex Staff
Mensajes: 5144
Registrado: 22 Mar 2008, 02:14
Género:
Edad: 36

Re: Como hacer un sencillo sistema de registro en PHP y MySQ

#13

Mensaje por Alorse »

victor quimis escribió:hola como hago para iniciar sesion tengo que copiar el codigo index en el mio?
:nolose: no entendí lo que quisiste decir, ahí se encuentra el archivo "login.php" que es el encargado de iniciar la sesión, debes ser mas explicito cuando respondas y preguntes.

victor quimis
Invitado

Re: Como hacer un sencillo sistema de registro en PHP y MySQ

#14

Mensaje por victor quimis »

Perdón...
Esta es mi web http://doctorpc.atwebpages.com/
ahora necesito poner identificarse o registrarse cierto. ahora mi pregunta es las líneas que están en el index que dejastes debo acomodarlas en mi web o que hago para que aparezca el inicio de sesión. o sea que la gente se identifique.
gracias...

Avatar de Usuario
Alorse
Ex Staff
Mensajes: 5144
Registrado: 22 Mar 2008, 02:14
Género:
Edad: 36

Re: Como hacer un sencillo sistema de registro en PHP y MySQ

#15

Mensaje por Alorse »

En todas tus paginas (archivos .php) donde quieras que el usuario este identificado debes agregar los siguiente al inicio del archivo despues de <?php (aunque veo que tus paginas son .HTML, tendras que pasarlas a PHP):

Código: Seleccionar todo

include("conexion.php"); 
Luego en el menu principal, donde tienes:
INICIO REDES PROGRAMAS ANTIVIRUS REPARACIONES EMSAMBLAJE VIDEOS FORO
Puedes agregar 2 nuevos links:
REGISTRARSE IDENTIFICARSE

Y esos links deben ir a las paginas correspondientes que hiciste con el tutorial.

Responder

Volver a “🆘 Recursos Webmaster”