Registro de usuarios desde cero.

He conseguido aplicar jquery a la página de logeo por un lado y a la página de registro por otro. Lo genial sería poder aplicarlo a todo con el fin de poder colocarlo en un div en una esquina de la web sin que recargue la página nunca, pero no he aprendido a hacerlo aún.

Si acaso pongo esta versión por ahora y ya vemos cómo consigo lo demás.

chequeo.php

<?php

include_once('configuracion.php');

if ( ($_POST['testigo2']) != "valido")
{
//   header("Refresh: 4; URL=registro.php");
   echo "<br /><p>ERROR.</p>";
   die;
}

// Chequeamos que el usuario existe y que la contraseña es correcta
$nick= $_POST['nick']; // cazamos el valor de nick del formulario
$password = $_POST['password']; // cazamos el valor de la contraseña del formulario
//sacamos los valores  de las variables $password (que está hasheada) y $salteada correspondientes a ese nick
$consulta= mysql_query("SELECT * FROM ".$tabla." WHERE nick='".$nick."' ");
if(mysql_num_rows($consulta) < 1) //si no existe el usuario...
{
//   header("Refresh: 4; URL=login.php");
   echo "<p>ERROR. El nick dado no existe.</p>";
   die;
}
$datosdelusuario= mysql_fetch_array($consulta, MYSQL_ASSOC);
//aplicamos el algoritmo a la contraseña dada por el usuario en el login para poder
//compararla con la que tenemos guardada
$hash = hash('sha256', $datosdelusuario['salteada'] . hash('sha256', $password) );
// coinciden?
if($hash != $datosdelusuario['password']) //si la contraseña es incorrecta...
{
//   header("Refresh: 4; URL=login.php");
   echo "<br /><p>ERROR. La contraseña no es válida.</p>";
   die;
}
$estado=$datosdelusuario["estado"];

switch ( $estado )
  {
     case 'activo':  // Activo, le damos paso al sistema de registro.
         session_register("usuario"); //registramos la variable usuario que contendrá el nick del user
         session_register("idusuario"); //registramos la variable idusuario que contendrá la id del user
         $_SESSION[usuario] = $datosdelusuario["nick"]; //damos el nick a la variable usuario
         $_SESSION[idusuario] = $datosdelusuario["id"]; //damos la id del user a la variable idusuario
         header("Refresh: 4; URL=login.php");
         echo '<br /><p>Logeado compañero'."$_SESSION[usuario]".'.</p>';
     break;
     case 'inactivo':  // Estado inactivo, informar al usuario.
         echo "<p>Su cuenta existe y los datos de acceso son correctos, pero por algún motivo su cuenta está desactivada</p><p>Contacte con el administrador de esta web para arreglar el problema. Gracias.</p>";
     break;
     default: // Registrado y validado, activar la cuenta.
         echo "<p>Su cuenta está pendiente de ser verificada a través del correo que se le ha enviado al correo con el que se registró. Chequee su email para activarla.</p>."      ;
  }

?> 


formulario.php

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=iso-8859-1" />
<title>Ejemplo de formulario sin recarga</title>
<script language="javascript" src="mijquery.js"></script>
<script language="javascript">
$(document).ready(function() {
    $().ajaxStart(function() {
        $('#resultado').hide();
    }).ajaxStop(function() {
        $('#resultado').fadeIn('slow');
    });
    $('#formulario, #nick, #password, #password2, #email, #testigo').submit(function() {
        $.ajax({
            type: 'POST',
            url: $(this).attr('action'),
            data: $(this).serialize(),
            success: function(data) {
                $('#resultado').html(data);
            }
        })
        return false;
    }); 
})  
</script>

<style type="text/css">
<!--
body {
    color: #333333;
    font-family:Arial, Helvetica, sans-serif;
    font-size:12px;
}
form {
    width:680px;
    margin:auto;
}
#resultado {
    width:480px;
    padding:10px;
    border:1px solid #bfcddb;
    margin:auto;
    margin-top:10px;
    text-align:center;
}
-->
</style>
</head>
<body>
<form action="registro.php" method="POST" id="formulario" name="formulario">
   Nick:                 <input type="text"     name="nick"       id="nick"      maxlength="25" size="25" /><br />
   Contraseña:           <input type="password" name="password"   id="password"  maxlength="40" size="40" /><br />
   Repite la contraseña: <input type="password" name="password2"  id="password2" maxlength="40" size="40" /><br />
   E-mail:               <input type="text"     name="email"      id="email"     maxlength="60" size="60" /><br />
                         <input type="hidden"   name="testigo"    id="testigo"   value="valido" />
                         <input type="submit"   name="submit"     id="submit"    value="Registrar" />
</form>
<br /><a href="login.php">Login</a>
<div id="resultado"></div>
</body>
</html>

login.php

<?php
include_once('configuracion.php');
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="application/xhtml+xml; charset=iso-8859-1" />
<title>Fomulario de logeo sin recarga</title>
<script language="javascript" src="mijquery.js"></script>
<script language="javascript">
$(document).ready(function() {
    $().ajaxStart(function() {
        $('#resultado').hide();
    }).ajaxStop(function() {
        $('#resultado').fadeIn('slow');
    });
    $('#formulario, #nick, #password, #testigo2').submit(function() {
        $.ajax({
            type: 'POST',
            url: $(this).attr('action'),
            data: $(this).serialize(),
            success: function(data) {
                $('#resultado').html(data);
            }
        })
        return false;
    }); 
})  
</script>
<?php

if(!isset($_SESSION[usuario]) )  // Esto es, si no está ya logeado
// Si aún no está logeado le mostramos el formulario de login
{
// Formulario para recoger los datos de login y enviarlos a chequeo.php, donde miramos que sean correctos
echo '
<form action="chequeo.php" method="POST" id="formulario" name="formulario">
  Nick:     <input type="text"     name="nick"     id="nick"     maxlength="25" size="25" /><br />
  Password: <input type="password" name="password" id="password" maxlength="40" size="40" /><br />
            <input type="hidden"   name="testigo2" id="testigo2" value="valido" />
            <input type="submit"   name="submit"   id="submit"   value="Login" />
</form>
    ';
// le damos la opcion de registrarse si no lo está
echo '<br /><a href="formulario.php">Registro</a>'; 
}
else   // Esto es, si está ya logeado
{
// Si está logeado indicamos que no es necesario logearse de nuevo. Le mostramos el nick y la opción de deslogearse
echo 'Bienvenido a la web <b>'.$_SESSION[usuario].'</b>'; // Mensaje de bienvenida
echo '<br /><a href=logout.php>Salir</a>'; //link para deslogearse, iría a logout.php
}

?>

<div id="resultado"></div>
</body>
</head>

registro.php

<?php
include_once('configuracion.php');

//Rescate de Variables:
$testigo  = $_POST['testigo']          ;
$nick     = limpia($_POST['nick'])     ;
$email    = $_POST['email']            ;
$password = limpia($_POST['password']) ;
$password2= limpia($_POST['password2']);

if ($testigo != "valido") {$error = true;}

function limpia($cadena)
    {
    return (ereg_replace('[^A-Za-z0-9_-ñÑ]', '', $cadena));
    }

function saltear ()
{
$cadena = md5 (uniqid(rand(), true));
return substr($cadena, 0, 3);
}

// marcamos el error
if ( empty($nick) OR empty($email) OR empty($password) OR empty($password2) ) {$error = true;}
// si eliminando caráteres raros queda algún campo vacio, generamos un error y devolvemos al formulario
if ( !empty($error) )
{
//   header("Refresh: 2; URL=formulario.php");
   echo "<p>ERROR. Los datos introducidos no tienen un formato correcto.</p>";
   die;
}

include_once('verificar_email.php');

if ( verificar_email($email)==false )
{
//   header("Refresh: 5; URL=formulario.php");
   echo "<br /><p>ERROR. El Email $email no parece ser real.</p>";
   die;
}

//Comprobamos que la password y password2 son iguales, sino, volvemos a registro.php
if($password != $password2)
    {
//    header("Refresh: 5; URL=formulario.php");
    echo '<br /><p>ERROR. Las contrase&ntilde;as no coinciden</p>';
    die;
    }
else
    {
    //cuantos usuarios hay ya con ese nick?
    $cuantosnicks=mysql_query("SELECT nick FROM ".$tabla." WHERE nick='".$nick."' ");
    //cuantos usuarios hay ya con ese email?
    $cuantosemails=mysql_query("SELECT email FROM ".$tabla." WHERE email='".$email."' ");
    $nickrepetido = mysql_num_rows($cuantosnicks);
    $emailrepetido = mysql_num_rows($cuantosemails);
    if($nickrepetido >= 1)
        {
//        header("Refresh: 5; URL=formulario.php");
        echo '<br /><p>El nick propuesto ya estaba registrado. Escoge otro.</p>';
        die;
        }
    else if($emailrepetido >= 1)
        {
 //       header("Refresh: 5; URL=formulario.php");
        echo '<br /><p>El email propuesto ya estaba registrado. Escoge otro.</p>';
        die;
        }
    else
        {
       //introducimos el nuevo registro en la tabla users, pero inactivo hasta correo de verificación
        $hasheada= hash('sha256', $password) ;
        $salteada = saltear();
        $hasheada = hash('sha256', $salteada . $hasheada);
        $codigodevalidacion = rand(000000000000,999999999999);
        mysql_query("INSERT INTO $tabla (nick,password,salteada,email,estado) values ('$nick','$hasheada','$salteada','$email','$codigodevalidacion') ");
        $mensaje="Hola $nick. Acabas de registrarte en $midominio pero has de activar la cuenta haciendo clic en el siguiente enlace: Enlace de activación: http://$midominio/verificar_cuenta.php?codigo=$codigodevalidacion";
        // Enviando el correo...
        mail($email, "Validación de su nueva cuenta en $midominio", $mensaje, "From: $miemail");
        // Aviso para el usuario.
        echo "<br /><p>Usuario registrado con éxito con Nick=$nick, Contraseña=$password y email=$email</p><p>La cuenta aún no está activa hasta que se verifique mediante el correo que se ha enviado al Email con el que se ha registrado. Revise por tanto su correo por favor.</p>";
        // damos la opcion de logerase, por si ha respondido al correo de verificación y aún tiene esta página abierta.
        echo '<br /><a href="login.php">Quieres logearte?</a>';
        }
    mysql_free_result($cuantosnicks);  //liberamos memoria
    mysql_free_result($cuantosemails); //liberamos memoria
   }
;?>

He de pulirlo aún, colocar estilos decentes y tal. Y claro, explicar lo que he hecho. Pero me voy al campo a comerme una paella y esta tarde me pongo ;=) Feliz Domingo!
En los archivos chequeo.php y registro.php practicamente lo único que he hecho es anular con comentarios las líneas de HEADER, que ya careen de sentido. Cómo mola el jQuery, fijaos que no hay que tocar nada del Html para hacerlo funcionar.
Tengo un problemilla que no se cómo solucionar... Los mensajes que recibo en las páginas de los formularios, indicando si falta algún dato, o si alguno es incorrecto, o si el logeo o registro están ok, me aparecen con un formateo que no deseo. Es decir, si en el propio código escribo "contraseña" me aparece la ñ algo rara. Esto me obliga por narices a escribir "contrase&nacute;a"? O existe alguna forma de definir la codificación de esos textos?

Asias!
JAJAJAJAJA ESTE SURKAISER Y SUS EJEMPLOS!

Jorgens, hay alguna publicidad de verlo online? Sin poner el código? Ando muy vago xd!
Me gusta, pero he notado que en el registro abajo del formulario hay un recuadro que parece de input text pero que no se puede rellenar!

Aparte de eso, como hiciste para lo de la verificación por correo? o.O
Está más atrás, empieza acá la explicación de como añadir la verificación por correo del registro en el sistema de usuarios. Debería señalarlo mejor, je je je

http://www.comocreartuweb.com/consultas/showthread.php/53541-Regist…

Como ves me falta aplicarle algunos estilos que le den forma, pues están un poco al tun tún. Ese campo es solamente un div en el que aparecen los mensajes de error, etc. No, no se puede escribir sobre ellos.

A ver si le pongo unos estilos decentes para verlo mejor.

Un abrazo!
Por cierto, no me gusta mucho cómo se genera el número aleatorio con la línea:

$codigodevalidacion = rand(000000000000,999999999999);

Además no sale un número de 12 cifras, pensaba que si, pero se ve que si es menor no muestra los ceros de la izquierda. Miraré otro modo, aunque... acepto sugerencias!
El sistema con Jquery esta muy bien la verdad, veamos si podemos terminarlo y lo puedes colocar en el curso de Jquery o en Proyecto Completo, que a mas de uno le iria muy bien.
Jorgens_CCTW escribió:Por cierto, no me gusta mucho cómo se genera el número aleatorio con la línea:

$codigodevalidacion = rand(000000000000,999999999999);

Además no sale un número de 12 cifras, pensaba que si, pero se ve que si es menor no muestra los ceros de la izquierda. Miraré otro modo, aunque... acepto sugerencias!

No recuerdo bien pero intenta asi :

$codigodevalidacion = rand() * 999999999
: Yo creo que en voy a tener que adaptar el diseño de mi página :'(, a uno con un libro de agradecimientos y mencionarlos a todos ustedes chicos JAJA!


Che, para que sirve esto?

$hash = hash('sha256', $datosdelusuario['salteada'] . hash('sha256', $password) );
Es un metodo de encriptacion utilizando el hash + salt reforzando la seguridad en este caso usa sha256
Bueno bueno. Ahora que tenemos todos esos archivos y que vemos que funciona, la idea es conseguir colocar todo ese sistema de registro de usuarios en una esquina de cualquier página web. Y claro, evitar la recarga de la página cada vez que se cambia de acción, es decir, que no recargue al logearse, deslogearse, registrarse y todo lo que termine en arse. ;=) Ahora mismo no se cómo hacerlo, pero si me pongo a pensar seguramente lo consiga. Como veis, antes he usado jquery y ajax para conseguir que no se recargue la página cuando envio los datos desde el formulario de registro al registro en sí, ni cuando se envian datos del formulario de logeo a la comrpobación del login, pero luego, de un paso a otro no he conseguido evitar la recarga, aún.

Tampoco se ahora mismo qué ocurrirá cuando pegue todo eso en tooodas las páginas de una web. Ya veremos.

Teneis idea? Habia pensado en un solo archivo, que fuera llamando con ajax a algunos includes (de registro, de login, etc). y una vez lo tenga listo, llamar a ese archivo con un include desde cada una de las páginas de la web. Es así?

Bueno, voy a pensarlo. Pero si tenéis alguna idea y me ayudais, más rapido vamos! je je je.

Un abrazo!
Tiene como 1 o 2 semanas que cree un sistema de registro en ajax para cooperar taambien ultimamente no he podido entrar ni continuar pero por lo menos el registro ya esta faltaria el login que pienso seguirlo trabajando,aun lo pienso mejorar mas en todo sentido pero por ahora quedo asi :

http://www.comocreartuweb.com/consultas/showthread.php/53668-TUTORI…

Me falto colgar la imagen base del captcha y algunas otras, en cuantopueda las subo

Saludos!
Genial, lo pongo como adherido para no perderlo de vista. Seguro que saco algo de provecho de él para el que ando elaborando.

Muchas gracias compi!
Bueno pues yo estoy haciendo mi sistema de login y he hecho un sistema de baneos temporales, donde puedes banear a un usuario y que no pueda acceder a su cuenta hasta que termine el baneo que especifiques, y quería aportarlo a la comunidad.

Primero de todo, debemos crear una tabla llamada baneos con tres columnas:
usuario -> tipo: varchar -> maxlength: 25
razon -> tipo: varchar -> maxlength: 255
termina -> tipo: datetime

Ok,quedaría algo así:


Ahora vamos a poner este código en el login en el switch($estado) en el case activo, quedaría así el código:
<?php

include_once('configuracion.php');

if ( ($_POST['testigo2']) != "valido")
{
//   header("Refresh: 4; URL=registro.php");
   echo "<br /><p>ERROR.</p>";
   die;
}

// Chequeamos que el usuario existe y que la contraseña es correcta
$nick= $_POST['nick']; // cazamos el valor de nick del formulario
$password = $_POST['password']; // cazamos el valor de la contraseña del formulario
//sacamos los valores  de las variables $password (que está hasheada) y $salteada correspondientes a ese nick
$consulta= mysql_query("SELECT * FROM ".$tabla." WHERE nick='".$nick."' ");
if(mysql_num_rows($consulta) < 1) //si no existe el usuario...
{
//   header("Refresh: 4; URL=login.php");
   echo "<p>ERROR. El nick dado no existe.</p>";
   die;
}
$datosdelusuario= mysql_fetch_array($consulta, MYSQL_ASSOC);
//aplicamos el algoritmo a la contraseña dada por el usuario en el login para poder
//compararla con la que tenemos guardada
$hash = hash('sha256', $datosdelusuario['salteada'] . hash('sha256', $password) );
// coinciden?
if($hash != $datosdelusuario['password']) //si la contraseña es incorrecta...
{
//   header("Refresh: 4; URL=login.php");
   echo "<br /><p>ERROR. La contraseña no es válida.</p>";
   die;
}
$estado=$datosdelusuario["estado"];

switch ( $estado )
  {
     case 'activo':  // Activo, le damos paso al sistema de registro.

// Miramos si existe algún baneo de ese usuario
$consulta2 = mysql_query("SELECT * FROM baneos WHERE usuario='".$nick."' ");
$qry2 = mysql_fetch_array($consulta2, MYSQL_ASSOC);
// Si hay algún baneo del usuario pasa lo siguiente
if(mysql_num_rows($consulta2) >= 1){
// Convertimos la fecha actual a un número entero para poder compararla posteriormente
$fecha_actual = strtotime(date("Y-m-d H:i:s"));
// Convertimos la fecha del baneo a un número entero para poder compararla con la fecha actual
$termina = str_totime($qry2['termina']);
if($termina > $fecha_actual){
// Si el baneo sigue activo damos un mensaje diciendo cuándo acaba el baneo
echo "Has sido baneado hasta $termina";
die;
} else {
// Si el baneo ya acabó lo borramos de la base de datos
mysql_query("DELETE FROM baneos WHERE usuario='".$nick."'");
}
}
         session_register("usuario"); //registramos la variable usuario que contendrá el nick del user
         session_register("idusuario"); //registramos la variable idusuario que contendrá la id del user
         $_SESSION[usuario] = $datosdelusuario["nick"]; //damos el nick a la variable usuario
         $_SESSION[idusuario] = $datosdelusuario["id"]; //damos la id del user a la variable idusuario
         header("Refresh: 4; URL=login.php");
         echo '<br /><p>Logeado compañero'."$_SESSION[usuario]".'.</p>';
     break;
     case 'inactivo':  // Estado inactivo, informar al usuario.
         echo "<p>Su cuenta existe y los datos de acceso son correctos, pero por algún motivo su cuenta está desactivada</p><p>Contacte con el administrador de esta web para arreglar el problema. Gracias.</p>";
     break;
     default: // Registrado y validado, activar la cuenta.
         echo "<p>Su cuenta está pendiente de ser verificada a través del correo que se le ha enviado al correo con el que se registró. Chequee su email para activarla.</p>."      ;
  }

?>

Ok, ahora vamos a hacer el sistema de baneos para que podáis banear a un usuario desde un formulario y no tengáis que hacerlo desde el phpmyadmin:
<!Doctype HTML>
<html lang="es">
<head>
<title>Banear a un usuario</title>
</head>
<body>
<?php
if(!$_POST){
} else {

$usuario = $_POST["usuario_ban"];
$razon = $_POST["razon_ban"];
$terminacion = $_POST["terminacion_ban"];

// Vuestro archivo con la conexión a la base de datos
include_once("config.php");

$result = mysql_query("INSERT INTO baneados (`usuario`, `razon`, `termina`) VALUES('$usuario','$razon','$terminacion')");
if($result){
echo "El usuario $usuario fue baneado con éxito.";
} else {
echo "No se ha podido banear al usuario";
}
}
?>
<form method="post" action="">
<label>Nombre del usuario a banear: <input type="text" name="usuario_ban" maxlength="25" /></label><br />
<label>Razón del baneo: <input type="text" name="razon_ban" maxlength="255" /></label><br />
<label>Terminación del baneo (Formato: Año/Mes/Día Hora:Minuto:Segundo): <input type="text" name="terminacion_ban" /></label><br />
<button type="submit">Banear al usuario</button>
</form>
</body>
</html>
Obviamente sólo vosotros deberíais tener acceso a este archivo para evitar que baneen a todo el mundo xD
Muy bien hasta aquí estamos claros, ahora como creo el acceso en mi web para que los usuarios puedan entrar?
me pegue una perdida y no me funciono finalmente
lo que yo deseo es crear el ingreso a tres personas especigficas, para que me intoduscan datos desde donde esten como puedo hacer esto
Hola a todos, he estado intentando hacer el registro aqui propuesto, pero el resultado final es un Fatal error: ... Al parecer segun eh leido. El problema puede ser por session_register () que ya no se utiliza el las nuevas versiones de php.

Alguien me podria explican, en caso de que lo dicho se correcto, como eh de modificar el codigo para actualizarlo.

El codigo propuesto por Jorge es este.

 <?php

include('configuracion.php');

// Chequeamos que el usuario existe y que la contraseña es correcta
$usuarios=mysql_query("SELECT * FROM $tabla WHERE nick='$_POST[nick]' and password='$_POST[password]' ");
if($datosdelusuario = mysql_fetch_array($usuarios)) //si existe comenzamos con la sesion, si no, al index
    {
    session_register("usuario"); //registramos la variable usuario que contendrá el nick del user
    session_register("idusuario"); //registramos la variable idusuario que contendrá la id del user
    $_SESSION[usuario] = $datosdelusuario["nick"]; //damos el nick a la variable usuario
    $_SESSION[idusuario] = $datosdelusuario["id"]; //damos la id del user a la variable idusuario
    Header("Location: login.php"); //volvemos al login
    }
else
    {
    echo 'Nick y/o Password incorrectos';
    echo '<br /><a href="login.php">Logearse</a>';
    }

?> 
Buscando eh encontrado una propuesta de un formulario definido por su autor como muy simple. este codigo no utiliza session_register() es este:

conexion.php
<?php
    $nombre_server[1] = 'xxxxxxxx'; //Servidor al cual nos vamos a conectar.
    $nombre_user[2] = 'xxxxxxx'; //Nombre del usuario de la base de datos.
    $password[3] = 'xxxxxxx'; //Contraseña de la base de datos
    $nombre_db[4] = 'xxxxxxxx'; //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.');
session_start();
?>

Registro.php(modificado)
<?php
include_once("conexion.php");

function limpiar($cadena)
    {
    return (ereg_replace('[^A-Za-z0-9_-ñÑ]', '', $cadena));
    }

    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ñas no coinciden';
            }
            else
            {
                $date=time();
                $nick=limpiar($_POST['nick']);
                $mail=limpiar($_POST['mail']);
                $pass=md5(md5(limpiar($_POST['pass'])));
                $ipuser= $_SERVER['REMOTE_ADDR'];  
				
	function verificar_email($email) 
   {
   // Verificamos que no hay más de una arroba y que las longitudes son normales
   if (!ereg("^[^@]{1,64}@[^@]{1,255}$", $email)) 
      {
      return false;
      }
   $email_array = explode("@", $email);
   $local_array = explode(".", $email_array[0]);
   for ($i = 0; $i < sizeof($local_array); $i++) 
      {
      if (!ereg("^(([A-Za-z0-9!#$%&'*+/=?^_`{|}~-][A-Za-z0-9!#$%&'*+/=?^_`{|}~\.-]{0,63})|(\"[^(\\|\")]{0,62}\"))$", $local_array[$i])) 
         {
         return false;
         }
      } 
   // se revisa si el dominio es una IP. Si no, debe ser un nombre de dominio válido
   if (!ereg("^\[?[0-9\.]+\]?$", $email_array[1])) 
      { 
      $domain_array = explode(".", $email_array[1]);
      if (sizeof($domain_array) < 2) 
         {
         return false; // No son suficientes partes para ser un dominio
         }
      for ($i = 0; $i < sizeof($domain_array); $i++) 
         {
         if (!ereg("^(([A-Za-z0-9][A-Za-z0-9-]{0,61}[A-Za-z0-9])|([A-Za-z0-9]+))$", $domain_array[$i])) 
            {
            return false;
            }
         }
      }
      return true;
   }         

                $b_user= mysql_query("SELECT nick FROM socios 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(verificar_email($_POST['mail']))
                    {
                        mysql_query("INSERT INTO socios (fecha,nick,mail,pass,ip) values ('$date','$nick','$mail','$pass','$ipuser')");
                        echo '<br />Te has registrado Correctamente, ahora podras iniciar sesión como usuario registrado.';
                    }
                    else
                    {
                        echo '<br />El email no es valido.';
                    }
                }
            }
        }
        else
        {
            echo '<br />Deberas llenar todos los campos.';
        }
    }
?>
  <!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Documento sin título</title>
<link href="../estilo.css" rel="stylesheet" type="text/css">
</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>

login.php
<?php
include_once("conexion.php");

    if(isset($_POST['login']))
    {
        $nick= $_POST['nick'];
        $pass= md5(md5($_POST['pass']));
        $b_user=mysql_query("SELECT * FROM socios 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ña incorrecta.';
            }
        }
        else
        {
            echo 'Nombre de Usuario o contraseñ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>
<html>
<head>
<meta charset="utf-8">
<title>Documento sin título</title>
<link href="../estilo.css" rel="stylesheet" type="text/css">
</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>

Perfil.php

<?php
include_once("conexion.php");
    ?>
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Documento sin título</title>
<link href="../estilo.css" rel="stylesheet" type="text/css">
</head>

<body>
<?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>';
?>
<p>Informacion que solo puede ser vista por los usuarios registrados</p>
</body>
</html>

No obstante al intentar hacerlo, cuando pongo mis datos para registrarme me sale esto:

Fatal error: Call to undefined function limpiar() in /homepages/18/d443085515/htdocs/registro.php on line 16

Pero no entiendo por que me dice eso, si la function limpiar si esta definida no?
si la function limpiar si esta definida no?

No, no está en ninguna parte del código que has mostrado.
Gracias Shaparate. eh definido las funciones (MODIFíCO EL CODIGO DE ARRIBA PARA QUE QUEDE CORRECTO) y ya funciona correctamente tanto el registro, como el logeo. Solo me falta una cosa mas. Eh colocado que al logearte te redirija a perfil.php el cual quiero que sea privado, el problema esta en que puedo acceder a perfil sin logearme,por que el user_login no esta definido y no se como hacerlo, podeis hecharme una mano, el codigo de perfil.php esta arriba tambien.

Eso si, con respecto al codigo anterior, funcionar, funciona, pero yo aun apenas entiendo y lo que hago (como todos) en investicar, copiar, pegar y probar, pero a lo mejor eh pegado mas codigo del necesario, mirarlo por favor. gracias.
El utiliza el array $_SESSION el cual necesita iniciar la sesión para funcionar, o sea, necesitas poner session_start() al comienzo de cada archivo que utilice el array $_SESSION.

Yo hago algo así para que nadie pueda entrar al espacio privado:

<?php
  session_start();

  if( ! isset( $_SESSION['nick'] ) ) :
    header( 'Location: login.php' );
  else :
?>
<html>
  <head>
<!-- Resto del código HTML y PHP -->
<?php
  endif;
?>