Hola a todos.
Gracias por los aportes.
Conseguí hacer el registro. ¿Ahora como haría para que el usuario al hacer login entre en la pagina protegida por el login en cuestión?
Otra cuestión. Cuando cambio
ereg_replace por preg_match sugerido por otro compañero y pongo un email válido, el registro me dice caracteres incorrectos. ¿por que puede ser?
<?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ñ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
}
;?>
Otra cuestión:
En verificar_mail me dice que !ereg está obsoleto. ¿por que lo cambio? <?php
// incluida en registro.php
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;
}
;?>
Gracias por vuestra ayuda.