Cuasatar y Eits, muchísimas gracias por contestar. Es muy gracioso, seguí buscando opciones para la recuperación de contraseña y precisamente me encontré con el enlace que me has dado Cuasatar, antes de que me lo enviaras
Eso está bien, quiere decir que voy por el buen camino. Eits, ya hice lo que me comentaste en el comentario, pero ahí me quedaba, no sé si sería por el cansancio, pero me atranqué y ya no podía continuar. De todas formas, en principio, seguiré el enlace de cuasatar, que me ha resultado más entendible, aunque me he encontrado con un pequeño problema.
El mensaje se envía bien, con la nueva contraseña. Los caracteres en el asunto, antes de abrir el correo, aparecen correctos pero, una vez abierto, dichos caracteres (por ejemplo la ñ o los acentos) son modificados por estos símbolos: � . He probado diferentes maneras, he usado utf8_decode, pero no consigo que se quiten estos símbolos. Es un pequeño inconveniente, pero me mosquea. ¿Cómo puedo modificarlo para que no aparezca � en el asunto al abrir el email? Gracias.
Código PHP:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<?php
include("conexion.php"); $link = Conectarse (); // incluímos los datos de acceso a la BD
if(isset($_POST['enviar'])) { // comprobamos que se han enviado los datos del formulario
if(empty($_POST['usuario'])) {
echo "No ha ingresado el usuario. <a href='javascript:history.back();'>Reintentar</a>";
}else {
$usuario = mysql_real_escape_string($_POST['usuario']);
$usuario = trim($usuario);
$sql = mysql_query("SELECT usuario, contrasenna, email FROM usuarios WHERE usuario='".$usuario."'");
if(mysql_num_rows($sql)) {
$row = mysql_fetch_assoc($sql);
$num_caracteres = "10"; // asignamos el número de caracteres que va a tener la nueva contraseña
$nueva_clave = substr(md5(rand()),0,$num_caracteres); // generamos una nueva contraseña de forma aleatoria
$usuario = $row['usuario'];
$contrasenna = $nueva_clave; // la nueva contraseña que se enviará por correo al usuario
$usuario_clave2 = md5($contrasenna); // encriptamos la nueva contraseña para guardarla en la BD
$email = $row['email'];
// actualizamos los datos (contraseña) del usuario que solicitó su contraseña
mysql_query("UPDATE usuarios SET contrasenna='".$usuario_clave2."' WHERE usuario='".$usuario."'");
// Enviamos por email la nueva contraseña
$asunto = utf8_decode("Recuperación de contraseña"); // Asunto (se puede cambiar)
$mensaje = "Se ha generado una nueva contraseña para el usuario <strong>".$usuario."</strong>. <br>La nueva contraseña es: <strong>".$contrasenna."</strong>";
$cabeceras = "From: tuweb.com \r\n";
$cabeceras .= "Reply-To: tuweb.com \r\n";
$cabeceras = $cabeceras."Content-Type: text/html; charset=utf-8\r\n";
$enviar_email = mail($email,$asunto,$mensaje,$cabeceras);
if($enviar_email) {
echo "La nueva contraseña ha sido enviada al email asociado al usuario ".$usuario.".";
}else {
echo "No se ha podido enviar el email. <a href='javascript:history.back();'>Reintentar</a>";
}
}else {
echo "El usuario <strong>".$usuario."</strong> no está registrado. <a href='javascript:history.back();'>Reintentar</a>";
}
}
}else {
?>
<form action="<?=$_SERVER['PHP_SELF']?>" method="post">
<label>Usuario:</label><br />
<input type="text" name="usuario" id="usuario" /><br />
<input type="submit" name="enviar" value="Enviar" />
</form>
<?php
}
?>