Foros del Web » Programando para Internet » PHP »

PHP OO Recuperar Password ingresando matrícula en form

Estas en el tema de Recuperar Password ingresando matrícula en form en el foro de PHP en Foros del Web. hola buenas tardes (MX) o buenos días, miren estoy haciendo una bolsa de trabajo y en uno de los form tengo el de recuperar pass, ...
  #1 (permalink)  
Antiguo 18/02/2014, 13:09
Avatar de elesanchezf  
Fecha de Ingreso: septiembre-2011
Ubicación: México
Mensajes: 20
Antigüedad: 12 años, 8 meses
Puntos: 1
Mensaje Recuperar Password ingresando matrícula en form

hola buenas tardes (MX) o buenos días, miren estoy haciendo una bolsa de trabajo y en uno de los form tengo el de recuperar pass, el usuario o alumno debe ingresar su matrícula (campo $mat) y se le envía un email con su nueva pass en md5 claro pero no encuentro mi error, copio el error y el código del form. agradezco la molestia.

el form que captura la matrícula.


este es el error:
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in /home/fldmedum/public_html/bolsadetrabajo/nw/forgotpass.php on line 60

Código HTML:
<form action="forgotpass.php" class="login-form" method="post">
	 <input name="mat" type="text" class="login-input" id="mat" placeholder='Ingresa tu matrícula...'>            
	<input type="submit" class="login-btn" value="Entrar">
 
			</form> 
y este es el código PHP que recibe los datos y busca si existe la matrícula y envía la nueva pass.
Código PHP:
<?php  
// Este fichero recibe y procesa los datos del formulario de recuperacion de contraseña  
// en el que se escriben usuario y email  
 
// recogemos las variables enviadas por el formulario  
$mat=$_POST['mat'];  
//$emailusuario=$_POST['emailusuario'];  
 
// Conectamos a la base de datos  
// Las variables de conexion se suelen poner en un fichero de configuracion que se incluye  
//include "bdconfigmail.php";  
$con mysql_connect($hostname_bolsadetrabajo$username_bolsadetrabajo$password_bolsadetrabajo);  
if(!
$con) { 
        die(
'Failed to connect to server: ' mysql_error()); 
    } 
     
    
//Seleccionamos la BD
    //$db = mysql_select_db($dbname); 
    //if(!$db) { 
       // die("Unable to select database"); 
    //} 
        
mysql_select_db($database_bolsadetrabajo$bolsadetrabajo);
        if(!
$database_bolsadetrabajo)  {
            die(
"No se puede selecionar la BD");
        }

    
// Consultamos si existe $mat 
$res=mysql_query("SELECT COUNT(*) FROM bolsadetrabjobd WHERE mat='$mat' ");  
 
if (
mysql_num_rows($res)==0) {   // aqui me marca el error
// Si no existe, datos incorrectos y fin del proceso y volvemos al formulario de recuperacion  
//header("Location:forgot.php");  
$error "Los datos ingresados son erroneos";
}  
else {  
    
$better_token md5(uniqid(mt_rand(), true));
    
$better_token substr($better_token06);
    
    
$res mysql_query("UPDATE bolsadetrabjobd SET password = '".md5($better_token)."' WHERE mat='$mat' ");
    
// Query que busca el mail
$res1=mysql_query("SELECT * FROM bolsadetrabajobd WHERE mat='$mat'");  
$row=mysql_fetch_assoc($res1);  
$emailbd=$row['email'];


// Email
$cabeceras  'MIME-Version: 1.0' "\r\n";
$cabeceras .= 'Content-type: text/html; charset=iso-8859-1' "\r\n";
$cabeceras .= 'From: X <[email protected]>' "\r\n";

    if(
$res) {
        
mail($emailbd"Recuperacion de Contraseña""Tu contraseña nueva es $better_token"$cabeceras); 
    }
}
?>
    
    </p>  
    <P><?PHP 
            
echo (isset($error)  ? $error '');  
    
?>
    </P>
  #2 (permalink)  
Antiguo 18/02/2014, 13:30
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años
Puntos: 528
Respuesta: Recuperar Password ingresando matrícula en form

Si analizas el error
Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in

te dice que mysql_num_rows espera recibir un recurso y en cambio recibe un valor tipo bool.

Por tanto $res no recibe el resultado de la consulta, por que hay algo mal
$res=mysql_query("SELECT COUNT(*) FROM bolsadetrabjobd WHERE mat='$mat' ");

Puedes ver si hay un mensaje de error con mysql_error() además de imprimir en pantalla y ejecutar la consulta independiente (con phpmyadmin por ejemplo) para ver si es correcta.
  #3 (permalink)  
Antiguo 18/02/2014, 13:42
Avatar de elesanchezf  
Fecha de Ingreso: septiembre-2011
Ubicación: México
Mensajes: 20
Antigüedad: 12 años, 8 meses
Puntos: 1
Mensaje Respuesta: Recuperar Password ingresando matrícula en form

gracias por la pronta respuesta mira le puse que me imprima el error y me manda esto

Table 'fldmedum_bolsadetrabajo.bolsadetrabjobd' doesn't exist
cy si tengo una tabla con ese nombre.

Soy nuevo con PHP le entiendo poco, puse ese codigo asi haber si lo puse bien.


Código PHP:
// Consultamos si existe $mat 
$res=mysql_query("SELECT COUNT(*) FROM bolsadetrabjobd WHERE mat='$mat' ")  
 or die(
mysql_error()); //imprime error
if (mysql_num_rows($res)==0) {  
// Si no existe, datos incorrectos y fin del proceso y volvemos al formulario de recuperacion 
  #4 (permalink)  
Antiguo 18/02/2014, 13:45
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años
Puntos: 528
Respuesta: Recuperar Password ingresando matrícula en form

Table 'fldmedum_bolsadetrabajo.bolsadetrabjobd' doesn't exist

Trata de leer y descifrar los mensajes por ti mismo o tardarás más tiempo...

Como ahí dice, la tabla no existe. En concreto, no existe una tabla llamada bolsadetrabjobd dentro de la base de datos fldmedum_bolsadetrabajo.

Esto desde luego, no lo podemos saber desde acá al no conocer tu base de datos en general.
  #5 (permalink)  
Antiguo 18/02/2014, 13:56
Avatar de elesanchezf  
Fecha de Ingreso: septiembre-2011
Ubicación: México
Mensajes: 20
Antigüedad: 12 años, 8 meses
Puntos: 1
Respuesta: Recuperar Password ingresando matrícula en form

si tengo una tabla con ese nombre, mira acabo de subir de nuevo el archivo pero ahora no me marca nada ni errores nada, y busco en mi email si me envió el pass pero no no hay nada.

la BD se llama fldmedum_bolsadetrabajo
y la tabla en donde tengo todos los datos se llama bolsadetrabajobd
por eso te digo que si tengo una tabla con ese nombre. por que no me manda nada ahora.
tengo el campo mat y el otro campo que es para la contraseña es password.
  #6 (permalink)  
Antiguo 18/02/2014, 14:00
Avatar de elesanchezf  
Fecha de Ingreso: septiembre-2011
Ubicación: México
Mensajes: 20
Antigüedad: 12 años, 8 meses
Puntos: 1
Respuesta: Recuperar Password ingresando matrícula en form

me acabo de dar cuenta que si me cambio el pass en mi BD, lo tengo en md5 y quise entrar o iniciar sesión peor no me deja con el pass que tenia quiere decir que si me cambio el pass pero porque no me llega el mail con el nuevo password?. ayúdenme por favor.
  #7 (permalink)  
Antiguo 18/02/2014, 14:06
Colaborador
 
Fecha de Ingreso: mayo-2008
Ubicación: $MX['VZ']['Xalapa']
Mensajes: 3.005
Antigüedad: 16 años
Puntos: 528
Respuesta: Recuperar Password ingresando matrícula en form

El envío por email depende de muchas cosas, como para hacer un tema aparte.

Que cuando haces mail() el servidor no te dé errores, que tu servidor realmente haga envíos por email, es decir esté bien configurado, que no te lleguen a una carpeta de spam, que el servidor receptor no tenga en lista negra al remitente, etc.

Imprime a pantalla lo que vas a mandar por email para asegurarte de que el contenido es correcto, y por aparte haz pruebas simples de envío de email para asegurarte de que puedes enviar email, o bien usa un servidor de correo externo y phpmailer.
  #8 (permalink)  
Antiguo 18/02/2014, 14:26
Avatar de elesanchezf  
Fecha de Ingreso: septiembre-2011
Ubicación: México
Mensajes: 20
Antigüedad: 12 años, 8 meses
Puntos: 1
Respuesta: Recuperar Password ingresando matrícula en form

si puedo enviar mail porque tengo en otra sección un formulario de contacto, lo que si tengo duda es lo que me dices de que si esta bien la forma del envio por email, estoy revisando mi codigo y cambiando e imprimiendo los errores en pantalla pero no me muestra nada, de hecho me deveria de marcar
Tu contraseña nueva es .................... pero no me dice nada.
  #9 (permalink)  
Antiguo 19/02/2014, 10:18
Avatar de elesanchezf  
Fecha de Ingreso: septiembre-2011
Ubicación: México
Mensajes: 20
Antigüedad: 12 años, 8 meses
Puntos: 1
Mensaje Respuesta: Recuperar Password ingresando matrícula en form

ya hice algunos cambios bruscos y he logrado que me envié el mail con la url para hacer el cambio del pass, se hace el cambio y todo genial pero voy a mi bd y nada todo sigue igual no hay cambio.. este fue el resultado del cambios en el código php.

dos cabezas piensan mejor que 1. por favor ayúdenme.
Código PHP:
<?php
if($_POST['button']){
    if(
$_POST['mail']){
        
        
$mail htmlentities($_POST['mail']);
        
        
$link mysql_connect ($hostname_bolsadetrabajo$username_bolsadetrabajo$password_bolsadetrabajo) or die(mysql_error());
        
mysql_select_db($database_bolsadetrabajo,$link);
        
        
$queEmp "SELECT * FROM bolsadetrabajobd WHERE email='$mail'";
        
$resEmp mysql_query($queEmp$link) or die(mysql_error());
        
$totEmp mysql_num_rows($resEmp);
        if(
$totEmp == 0){
        echo 
"La matr&iacute;cula que has ingresado no existe";
        
        exit();
        }        
        
        
$row mysql_fetch_assoc($resEmp);
        
$hash md5($row['password']);

        
$headers .= "From:Recuperar password <[email protected]>\r\n";  
        
$message "Para recuperar tu contrase&ntilde;a da click en la url de abajo.
        http://www.fldm.edu.mx/bolsadetrabajo/nw/pass.php?id="
.$hash."&mail=".$mail."";
        
//echo ($message);
        
if (mail($mail,"Recuperar password",$message,$headers)){
        
$msg "Se te envio un link a tu mail para cambiar la password";
        }
    }
}
?>
este es el del form. lo cambie a email para ver si funsionaba el codigo

Código HTML:
<form action="forgot.php" class="login-form" method="post" name="recupera">
				
                
                <span class="centr"><img src="css/Logo.png" width="334" height="82" alt="Fldm Logo"></span>
                <br/ >
                <br />
                <em><?=$msg?></em>
              
                <input name="mail" type="text" class="login-input" id="mail" placeholder='Ingresa tu email...'>
               
                
				
				
								
	<input type="submit" class="login-btn" value="Recuperar" name="button" id="button">
                

          

			</form> 
este es del formulario que cambia el pass.
Código PHP:
<?
$id 
htmlentities($_GET['id']);
$mail htmlentities($_GET['mail']);
$pass md5($_POST['pass']);
if(
$_POST['button']){
    if(isset(
$id) && isset($mail)){
        
$link mysql_connect ($hostname_bolsadetrabajo$username_bolsadetrabajo$password_bolsadetrabajo);
        
mysql_select_db($database_bolsadetrabajo,$link);
        
        
$queEmp "SELECT * FROM usuarios WHERE email='$mail'";
        
$resEmp mysql_query($queEmp$link) or die(mysql_error());
        
$totEmp mysql_num_rows($resEmp);
        if(
$totEmp == 0){
        echo 
"El mail ingresado no existe";
        exit();
        }
        
        
$row mysql_fetch_assoc($resEmp);
        
$hash md5(md5($row['mat']).md5($row['password']));
        
        if(
$hash == $id){
        
$sql "UPDATE usuarios SET password='".$pass."' WHERE email='$mail'";
        
mysql_query($sql,$link);
        echo 
"Contrase&ntilde;a cambiada correctamente";
        echo (
$sql);
        exit();            
        }
    }
}
?>
el form.
Código HTML:
<form name="form1" action="pass.php?id=<?=$id?>&mail=<?=$mail?>" class="login-form">
<input type="password" name="pass" id="pass" class="login-input" placeholder='Ingresa tu nueva contrase&ntilde;a...'>
  
  <input type="submit" class="login-btn" value="Guardar" name="button" id="button">
  
</form> 
ayudenme a ver mi error y a corregir en donde esta mal la cosa.

Última edición por elesanchezf; 19/02/2014 a las 10:29 Razón: agregue mas datos a mi pregunta
  #10 (permalink)  
Antiguo 19/02/2014, 12:49
Avatar de elesanchezf  
Fecha de Ingreso: septiembre-2011
Ubicación: México
Mensajes: 20
Antigüedad: 12 años, 8 meses
Puntos: 1
Mensaje Respuesta: Recuperar Password ingresando matrícula en form

hola amigos ya funsiona perfecto, tengo una duda como le hago para que los errores me aparezcan arriba del formulario y no en una pagina en blanco? aqui estan el codigo de los errores.

if($totEmp == 0){
echo "La matr&iacute;cula que has ingresado no existe";
exit(); // intente hacer lo mismo de abajo pero no me muestra nada
}


este si funsiona bien

if (mail($mail,"Recuperar password",$message,$headers)){
$msg = "Se te envio un link a tu mail para cambiar la password";

arriba de mi form coloco esto para que me muestra el mensaje.

<em><?=$msg?></em>
me ayudan? .gracias
  #11 (permalink)  
Antiguo 20/02/2014, 13:31
Avatar de elesanchezf  
Fecha de Ingreso: septiembre-2011
Ubicación: México
Mensajes: 20
Antigüedad: 12 años, 8 meses
Puntos: 1
Mensaje Respuesta: Recuperar Password ingresando matrícula en form

ya me fusiona el código, esta perfectisimo, que es lo que hace?
el usuario registrado ingresa su email en forgot.php y se le envía una url para el restablecimiento de su pass al email luego al abrir la url el usuario entra a password_reset.php ingresa su nueva contraseña y listo ya puede iniciar sesión a pero una ves hecho el cambio se le muestra la confirmación password_reset_confirmation.php, la contraseña esta encriptada y se cambia encriptada.
este es el código completo php del archivo forgot.php

Código PHP:
<?php require_once('Connections/tubd.php'); ?>

<?php

if($_POST['button']){
    if(
$_POST['mail']){
        if(empty(
$_POST['mail'])) {
            
$error =false
        }
        
$mail htmlentities($_POST['mail']);
        
$link mysql_connect ($hostname_bd$username_bd$password_bd) or die(mysql_error());
        
mysql_select_db($database_bd,$link);
    
        
$queEmp "SELECT * FROM tutabla WHERE email='$mail'";
        
$resEmp mysql_query($queEmp$link) or die(mysql_error());
        
$totEmp mysql_num_rows($resEmp);
        if(
$totEmp == 0){
            
$error true;
         echo 
"<script language=Javascript> window.location =\"forgot.php\"; </script>"
            
        exit();
        }        
        
$row mysql_fetch_assoc($resEmp);
        
$hash md5($row['password']) or die(mysql_error());

        
$headers .= "From:Nueva clave de usuario <[email protected]>\r\n";  
        
$headers .= "CC: [email protected]\r\n";
        
$message "hemos recibido una 
solicitud para restablecer tu contraseña.
  
Para restablecer la contraseña, haz clic o copia y pega la URL en tu navegador.
        http://www.tuweb.com/password_reset.php?id="
.$hash."&mail=".$mail."
        Si estás recibiendo muchos correos electrónicos de restablecimiento de contraseña que no solicitaste, puedes cambiarla Iniciando sesión para prevenir el robo de información.
        Por favor, no respondas a este mensaje; fue enviado desde una dirección de correo electrónico no supervisada. Este mensaje es un servicio de correo electrónico relacionado con tu uso en el portar."
;
        
        
//echo ($message);
        
if (mail($mail,"Recuperar password",$message,$headers)){
        
$msg "Hemos enviado las instrucciones de restablecimiento de contraseña a tu dirección de correo electrónico, Si no recibes las instrucciones dentro de pocos minutos, revisa el spam de tu correo electrónico y correo no deseado..";
        }
    }
}
?>
este es el código del formulario en forgot.php
Código HTML:
<form action="forgot.php" class="login-form" method="post" name="recupera">
 <em><?=$msg?></em>           
                <input name="mail" type="text" required="required" class="login-input" id="mail" placeholder='Ingresa tu email' value="">
    			
	<input type="submit" class="login-btn" value="Recuperar" name="button" id="button">
   
			</form> 
y este es el código PHP de password_reset.php
Código PHP:
<?php require_once('Connections/tubd.php'); ?>
<?
$id 
htmlentities($_GET['id']);
$mail htmlentities($_GET['mail']);

$pass md5($_POST['pass']);
if(
$_POST['button']){
    if(isset(
$id) && isset($mail)){
        
$link mysql_connect ($hostname_bd$username_bd$password_bd);
        
mysql_select_db($database_bd,$link);
        
        
$queEmp "SELECT * FROM tutabla WHERE email='$mail'";
        
$resEmp mysql_query($queEmp$link) or die(mysql_error());
        
$totEmp mysql_num_rows($resEmp);
        if(
$totEmp == 0){
        echo 
"El mail ingresado no existe";
        exit();
        }
        
        
$row mysql_fetch_assoc($resEmp);
        
$hash md5($row['password']);
        
        if(
$hash == $id){
        
$sql "UPDATE tutabla SET password='".$pass."' WHERE email='$mail'";
        
mysql_query($sql,$link);
        
$msg " Contrase&ntilde;a cambiada correctamente";
        
header('Location: password_reset_confirmation.php');
         
                
        }
    }
}
?>
y este del formulario

Código HTML:
<form name="form1" action="password_reset.php?id=<?=$id?>&mail=<?=$mail?>" class="login-form" method="post">
<em><?=$msg?></em>

  <input name="pass" type="password" required="required" class="login-input" id="pass" placeholder='Ingresa tu nueva contrase&ntilde;a...'>
  
  <input type="submit" class="login-btn" value="Guardar" name="button" id="button">
  
</form> 
y eso es todo muchas gracias por la ayuda... nos vemos.

Etiquetas: php+base+de+datos, php+bd+mysql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:19.