Recuperar contraseña

Tengo una página en la cual se registran los usuarios, pero si olvidan su contraseña deben recuperarla, esto de modo que se le envíe a su correo su contraseña, al principio yo recuperaba la contraseña, pero ahora ya me lo pidiaron diferente, en lugar de comparar los correos, tiene que compara el usuario, si el usuario es correcto tiene que mandar la contraseña a su correo que tiene el usuario, pero hay otra cosa, en la página en donde dice que se le mando su contraseña tené que aparecer las primeras tres caracteres que tiene su correo, yo se que es innecesario esto, pero así me lo pidieron la verdad no se como hacerle, aquí les dejo mi código anterior:
Código conexión
<body>
<?PHP
$conexion = mysql_pconnect("localhost", "root", "root");
mysql_select_db("usuarios") or die ("No se puede conectar con el servidor");
?>
</body>
codigo funcion
<body>
<?php
function valid_email($str)
{
return ( ! Preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix", $str)) ? FALSE : TRUE;
} ?>
</body>
</html>
codigo recuperar_contraseña
<body>
<?php
//Conexion con la base de datos y el archivo que contiene la funcion email
require_once('../RECUPERA/db.php');
include('../RECUPERA/funcion.php');
//Recordar contrasena por emaill por Ronruby
    //Si presionan el boton Enviar, ejecutamos el Script
    if(isset($_POST['Enviar']))
        {
            //Validacion por parte del servidor
            if($_POST['mail']!='' && valid_email($_POST['mail'])==TRUE)
                {
                    //Hacemos la consulta en la base de datos
                    $query = "SELECT * FROM password INNER JOIN perfil_prueba ON password.ID=perfil_prueba.ID INNER JOIN escolaridad_prueba ON password.ID=escolaridad_prueba.ID INNER JOIN laboral_prueba ON password.ID=laboral_prueba.ID WHERE E_MAIL = '".($_POST['mail'])."'";
                    $getEmail = mysql_query($query) or die(mysql_error());
                    $row = mysql_fetch_assoc($getEmail);
                    //Componemos el mensaje
                    $headers = "From: [email protected] \r\n";
                    $headers .= "Reply-To: [email protected] \r\n";
                    $headers .= "X-Mailer: PHP/" . Phpversion();
                    $subject = "Peticion de Contraseña desde [email protected]";
                    $message .= "La contraseñ de tu cuenta es: \r\n";
                    $message .= $row['PASS'];
                    if(mail($row['E_MAIL'], $subject, $message, $headers))
                        {
                        //Solo establecemos esta variable si el envio fue exitoso
                            $exito = 'La contraseña fue enviada a su direccion de correo electronico';
                        }
                    else
                        {
                            $error = 'El envio ha fallado, porfavor contacte al administrador sobre este problema';
                        }
                }
            else
                {
                    $error = 'Asegurese de que no ha dejado el campo vacio y que la direccion de correo electronica es una direccion de correo valida';
                }
        }
if(isset($exito))
    {
        echo $exito;
    }
if(isset($error))
    {
        echo $error;
    }
else
//Solo mostramos el formulario si tenemos un mensaje de error
    { ?>
    <form id="form1" name="form1" method="post" action="<?=$_SERVER['../RECUPERA_CONTRASEÑA/PHP_SELF']?>">
<table width="246" border="7" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="36">Email:</td>
<td width="192"><input name="mail" type="text" id="mail" value="<?php if(isset($_POST['mail'])) { echo $_POST['mail']; } ?>" size="32" /></td>
</tr>
<tr>
<td> </td>
<td><input name="Enviar" type="submit" id="Enviar" value="Enviar"...

2 Respuestas

Respuesta
1
Para mostrar las 3 primeras letras del email, puedes utilizar:
echo substr($_POST['mail'], 0, 20);
Para el cambio de comparar correos o usuario, no conozco tus bases de datos, pero simplemente cambia el Query donde comparas el email y cambialo por el campo del usuario.
Espero haberte ayudado.
http://www.ayzweb.com
Presupuesto Web Gratuito
Gracias por tu respuesta, al código anterior solo cambie los valores, pero el problema es que antes en le textbox ponía un correo para que lo compara y ya buscaba la contraseña y la mandaba, ahora el usuario es un numero ejemplo 04180329, pero la poner este numero me maraca uno de los mensajes que pongo en mi código:
$error = 'Asegurese de que no ha dejado el campo vacio y que la direccion de correo electronica es una direccion de correo valida';
No me detecta el numero para verificar si ya esta bien o no, la verdad no se que sea, o porque no me quiere detectar el numero espero me puedas ayudar, te dejo el código nuevamentente pero ya modificado:
Código conexión
<body>
<?PHP
$conexion = mysql_pconnect("localhost", "root", "root");
mysql_select_db("usuarios") or die ("No se puede conectar con el servidor");
?>
</body>
codigo funcion
<body>
<?php
function valid_user($str)
{
return ( ! preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix", $str)) ? FALSE : TRUE;
} ?>
</body>
</html>
codigo recuperar_contraseña
<body>
<?php
//Conexion con la base de datos y el archivo que contiene la funcion email
require_once('../RECUPERA/db.php');
include('../RECUPERA/funcion1.php');
//Recordar contrasena por emaill por Ronruby
//Si presionan el boton Enviar, ejecutamos el Script
if(isset($_POST['Enviar']))
{
//Validacion por parte del servidor
if($_POST['USER']!='' && valid_user($_POST['USER'])==TRUE)
{
//Hacemos la consulta en la base de datos
$query = "SELECT * FROM password INNER JOIN perfil_prueba ON password.ID=perfil_prueba.ID INNER JOIN escolaridad_prueba ON password.ID=escolaridad_prueba.ID INNER JOIN laboral_prueba ON password.ID=laboral_prueba.ID WHERE USER = '".($_POST['user'])."'";
$getEmail = mysql_query($query) or die(mysql_error());
$row = mysql_fetch_assoc($getEmail);
//Componemos el mensaje
$headers = "From: $mail \r\n";
$headers .= "Reply-To: $mail \r\n";
$headers .= "X-Mailer: PHP/" . phpversion();
$subject = "Peticion de Contraseña desde $mail";
$message .= "La contraseña de tu cuenta es: \r\n";
$message .= $row['PASS'];
if(mail($row['E_MAIL'], $subject, $message, $headers))
{
//Solo establecemos esta variable si el envio fue exitoso
$exito = 'La contraseña fue enviada a su direccion de correo electronico';
}
else
{
$error = 'El envio ha fallado, porfavor contacte al administrador sobre este problema';
}
}
else
{
$error = 'Asegurese de que no ha dejado el campo vacio y que la direccion de correo electronica es una direccion de correo valida';
}
}
if(isset($exito))
{
echo $exito;
}
if(isset($error))
{
echo $error;
}
else
//Solo mostramos el formulario si tenemos un mensaje de error
{ ?>
<form id="form1" name="form1" method="post" action="<?=$_SERVER['../RECUPERA_CONTRASEÑA1/PHP_SELF']?>">
<table width="246" border="7" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="36">Usuario:</td>
<td width="192"><input name="mail" type="text" id="USER" value="<?php if(isset($_POST['USER'])) { echo $_POST['USER']; } ?>" size="32" /></td>
</td>
</tr>
<tr>
<td> </td>
<td><input name="Enviar" type="submit" id="Enviar" value="Enviar" /></td>
</tr>
</table>
</form>
<p>
<?php } ?>
</p>
<p><a href="../index.php"><strong>Salir </strong></a></p>
</body>
</html>
La verdad es que no entiendo muy bien lo que me dices, a ver si te puedes explicar un poco mejor poniéndome solo el código afectado, no toda la página, porque no me aclaro!.
Lo que te dice es que no le llega ningún valor, o no es un email, pero estás metiendo un numero en ese campo ¿?... ¿Me puedes mostrar la página para que pueda ayudarte?
Respuesta
1
bueno te tengo una duda.. ¿la comparación entre correo por usuario asumo no te debió crear problema cierto? Por que eso es solo un cambio de parámetro en el query.. ¿entonces qué es lo que te falla?
Utilizando ese código que te pongo no me genera ningún erro, funciona muy bien y si me manda la contraseña, pero no se como acomodar para que en lugar de poner el correo y se compare con el de la bd, pues poner el usuario y se compare con el de la bd y si corresponde el usuario que mande la contraseña al correo del usuario, y ya después lo de que ponga los primeros 3 caracteres del correo al que se mando, espero explicarme
Saludos
A ver por lo que veo esto no lo hiciste tu..
1.$query = "SELECT * FROM password INNER JOIN perfil_prueba ON password.ID=perfil_prueba.ID INNER JOIN escolaridad_prueba ON password.ID=escolaridad_prueba.ID INNER JOIN laboral_prueba ON password.ID=laboral_prueba.ID WHERE CAMPO_USUARIO = '".($_POST['USUARIO'])."'";
2.$getEmail = mysql_query($query) or die(mysql_error());
                    $row = mysql_fetch_assoc($getEmail);
                    //Componemos el mensaje
                    $headers = "From: [email protected] \r\n";
                    $headers .= "Reply-To: [email protected] \r\n";
                    $headers .= "X-Mailer: PHP/" . phpversion();
                    $subject = "Peticion de Contraseña desde [email protected]";
                    $message .= "La contraseñ de tu cuenta es: \r\n";
                    $message .= $row['PASS'] . substr($email, 0, 3);
3. para sacar los tres primeros del email.. substr($email, 0, 3);
Gracias por tu respuesta, esto fue lo que hice solo cambie los valores, pero el problema es que antes en le textbox ponía un correo para que lo compara y ya buscaba la contraseña y la mandaba, ahora el usuario es un numero ejemplo 04180329, pero la poner este numero me maraca uno de los mensajes que pongo en mi código:
$error = 'Asegurese de que no ha dejado el campo vacio y que la direccion de correo electronica es una direccion de correo valida';
No me detecta el numero para verificar si ya esta bien o no, la verdad no se que sea, o porque no me quiere detectar el numero espero me puedas ayudar, te dejo el código nuevamentente pero ya modificado:
Código conexión
<body>
<?PHP
$conexion = mysql_pconnect("localhost", "root", "root");
mysql_select_db("usuarios") or die ("No se puede conectar con el servidor");
?>
</body>
codigo funcion
<body>
<?php
function valid_email($str)
{
return ( ! preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix", $str)) ? FALSE : TRUE;
} ?>
</body>
</html>
codigo recuperar_contraseña
<body>
<?php
//Conexion con la base de datos y el archivo que contiene la funcion email
require_once('../RECUPERA/db.php');
include('../RECUPERA/funcion1.php');
//Recordar contrasena por emaill por Ronruby
//Si presionan el boton Enviar, ejecutamos el Script
if(isset($_POST['Enviar']))
{
//Validacion por parte del servidor
if($_POST['USER']!='' && valid_user($_POST['USER'])==TRUE)
{
//Hacemos la consulta en la base de datos
$query = "SELECT * FROM password INNER JOIN perfil_prueba ON password.ID=perfil_prueba.ID INNER JOIN escolaridad_prueba ON password.ID=escolaridad_prueba.ID INNER JOIN laboral_prueba ON password.ID=laboral_prueba.ID WHERE USER = '".($_POST['user'])."'";
$getEmail = mysql_query($query) or die(mysql_error());
$row = mysql_fetch_assoc($getEmail);
//Componemos el mensaje
$headers = "From: $mail \r\n";
$headers .= "Reply-To: $mail \r\n";
$headers .= "X-Mailer: PHP/" . phpversion();
$subject = "Peticion de Contraseña desde $mail";
$message .= "La contraseña de tu cuenta es: \r\n";
$message .= $row['PASS'];
if(mail($row['E_MAIL'], $subject, $message, $headers))
{
//Solo establecemos esta variable si el envio fue exitoso
$exito = 'La contraseña fue enviada a su direccion de correo electronico';
}
else
{
$error = 'El envio ha fallado, porfavor contacte al administrador sobre este problema';
}
}
else
{
$error = 'Asegurese de que no ha dejado el campo vacio y que la direccion de correo electronica es una direccion de correo valida';
}
}
if(isset($exito))
{
echo $exito;
}
if(isset($error))
{
echo $error;
}
else
//Solo mostramos el formulario si tenemos un mensaje de error
{ ?>
<form id="form1" name="form1" method="post" action="<?=$_SERVER['../RECUPERA_CONTRASEÑA1/PHP_SELF']?>">
<table width="246" border="7" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="36">Usuario:</td>
<td width="192"><input name="mail" type="text" id="USER" value="<?php if(isset($_POST['USER'])) { echo $_POST['USER']; } ?>" size="32" /></td>
</td>
</tr>
<tr>
<td> </td>
<td><input name="Enviar" type="submit" id="Enviar" value="Enviar" /></td>
</tr>
</table>
</form>
<p>
<?php } ?>
</p>
<p><a href="../index.php"><strong>Salir </strong></a></p>
</body>
</html>
No deberás tener problem si es un numero... con ese ejemplo que pones el campo asumo debe ser un varchar luego revisa como estas enviando esa variable. ¿Lo otro en el query el campo user a que tabal del join corresponde?
Corresponde a la tabla password, si es varchar user, pero al correr mi programa si pongo el numero 04180329 me manda el mensaje como si no lo identificara, el mensaje que tengo en mi código:
Asegúrese de que no ha dejado el campo vacío y que la dirección de correo electrónica es una dirección de correo valida'
Se supone que ya lo cambiepara que me tome el user y no el mail, pero sigue el campo sin identificarlo, lo que eh inviestigado es que en la función lo que es:
function valid_user($str)  //""en mi codigo viene como valid_email, pero ya lo cambien por eso ke tengo""//
{
return ( ! preg_match("/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/ix", $str)) ? FALSE : TRUE;
} ?>
Es para validar un correo, ¿pero cómo seria para validar un numero? No se si aquí sea el problema, porque aquí es donde mando la función que se compara:
/Validación por parte del servidor
if($_POST['USER']!='' && valid_user($_POST['USER'])==TRUE)
¿Sera eso lo que tengo mal?
Saludos y gracias por tus respuestas
Nonono a ver... lo que estas usando se llama expresones regulares.. y le estas aplicando a la variable de usuario una validacon de email... entonces busca cual es la expresión regular para números. Que al salir de aquí..
if($_POST['USER']!='' && valid_user($_POST['USER'])==TRUE) siempre sera false.. cambia la expresion regular

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas