PHP - Generar password y enviar por mail

 
Vista:
sin imagen de perfil
Val: 41
Ha aumentado su posición en 7 puestos en PHP (en relación al último mes)
Gráfica de PHP

Generar password y enviar por mail

Publicado por Jordi S (28 intervenciones) el 04/02/2019 01:02:23
Hola a todos,

Estoy realizando una pagina para poner el usuario y si esta registrado genera un password nuevo y lo envia por mail. Pero no consigo que me funcione meda dos errores:

si me puden dar una mano.

Muchas gracias

Errores:


Warning: mysqli_query() expects at least 2 parameters, 1 given in /var/www/foro/recuperar_contrasena.php on line 18

Warning: mysql_num_rows() expects parameter 1 to be resource, null given in /var/www/foro/recuperar_contrasena.php on line 19
El usuario no está registrado. Reintentar


Codigo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
<?php
    include('dbconn.php'); // incluímos los datos de acceso a la BD
?>
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <?php
        if(isset($_POST['enviar'])) { // comprobamos que se han enviado los datos del formulario
            if(empty($_POST['usuario_nombre'])) {
                echo "No ha ingresado el usuario. <a href='javascript:history.back();'>Reintentar</a>";
            }else {
                $usuario_nombre = $_POST['usuario_nombre'];
                $usuario_nombre = trim($usuario_nombre);
                $con = mysqli_query("SELECT usuario, password, email FROM usuarios WHERE usuario='".$usuario_nombre."'");
                if(mysql_num_rows($con)) {
                    $row = mysql_fetch_assoc($con);
                    $num_caracteres = "10"; // asignamos el número de caracteres que va a tener la nueva contraseña
                    $nueva_clave = substr(password_hash(rand()),0,$num_caracteres); // generamos una nueva contraseña de forma aleatoria
                    $usuario_nombre = $row['usuario'];
                    $usuario_clave = $nueva_clave; // la nueva contraseña que se enviará por correo al usuario
                    $usuario_clave2 = password_hash($usuario_clave); // encriptamos la nueva contraseña para guardarla en la BD
                    $usuario_email = $row['email'];
                    // actualizamos los datos (contraseña) del usuario que solicitó su contraseña
                    mysqli_query("UPDATE usuarios SET password='".$usuario_clave2."' WHERE usuario='".$usuario_nombre."'");
                    // Enviamos por email la nueva contraseña
                    $remite_nombre = ""; // nombre
                    $remite_email = ""; //  correo
                    $asunto = "Recuperación de contraseña"; // Asunto 
                    $mensaje = "Se ha generado una nueva contraseña para el usuario <strong>".$usuario_nombre."</strong>. La nueva contraseña es: <strong>".$usuario_clave."</strong>.";
                    $cabeceras = "From: ".$remite_nombre." <".$remite_email.">\r\n";
                    $cabeceras = $cabeceras."Mime-Version: 1.0\n";
                    $cabeceras = $cabeceras."Content-Type: text/html";
                    $enviar_email = mail($usuario_email,$asunto,$mensaje,$cabeceras);
                    if($enviar_email) {
                        echo "La nueva contraseña ha sido enviada al email asociado al usuario ".$usuario_nombre.".";
                    }else {
                        echo "No se ha podido enviar el email. <a href='javascript:history.back();'>Reintentar</a>";
                    }
                }else {
                    echo "El usuario <strong>".$usuario_nombre."</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_nombre" /><br />
            <input type="submit" name="enviar" value="Enviar" />
        </form>
    <?php
        }
    ?>
</body>
</html>
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro
Val: 1.634
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Generar password y enviar por mail

Publicado por Alejandro (839 intervenciones) el 04/02/2019 03:38:44
  • Alejandro se encuentra ahora conectado en el
  • chat de PHP
Pues el segundo error es consecuencia del primero aunque eso no quiere decir que no debas prever que pueda suceder.

Te falta los datos de conexión, revisa la documentación de mysqli_query() aquí.
1
2
3
4
5
6
7
$con=mysqli_query($conexion,$consulta);
if(!$con){
echo 'Error en la consulta.';
}else{
$row = mysql_fetch_assoc($con);
...
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 41
Ha aumentado su posición en 7 puestos en PHP (en relación al último mes)
Gráfica de PHP

Generar password y enviar por mail

Publicado por Jordi S (28 intervenciones) el 05/02/2019 18:07:38
Hola a todos,

He modificado los dato pero no lo consigo, no lo estoy usando bien

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
<?php
    include('dbconn.php'); // incluímos los datos de acceso a la BD
 
    if (!$con) {
  		die("Error de conexión: " . mysqli_connect_error());
  	}
?>
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
</head>
<body>
    <?php
    $consulta = "SELECT usuario, password, email FROM usuarios WHERE usuario='".$usuario_nombre."'";
    $password = $con-> query($consulta);
        if(isset($_POST['enviar'])) { // comprobamos que se han enviado los datos del formulario
        if(empty($_POST['usuario_nombre'])) {
                echo "No ha ingresado el usuario. <a href='javascript:history.back();'>Reintentar</a>";
            }else {
                $usuario_nombre = $_POST['usuario_nombre'];
                $usuario_nombre = trim($usuario_nombre);
                if(mysql_num_rows($con)) {
                    $row = mysql_fetch_assoc($con);
                    $num_caracteres = "10"; // asignamos el número de caracteres que va a tener la nueva contraseña
                    $nueva_clave = substr(password_hash(rand()),0,$num_caracteres); // generamos una nueva contraseña de forma aleatoria
                    $usuario_nombre = $row['usuario'];
                    $usuario_clave = $nueva_clave; // la nueva contraseña que se enviará por correo al usuario
                    $usuario_clave2 = password_hash($usuario_clave); // encriptamos la nueva contraseña para guardarla en la BD
                    $usuario_email = $row['email'];
                    // actualizamos los datos (contraseña) del usuario que solicitó su contraseña
                    $query = mysqli_query("UPDATE usuarios SET password='".$usuario_clave2."' WHERE usuario='".$usuario_nombre."'");
                    // Enviamos por email la nueva contraseña
                    $remite_nombre = ""; // nombre
                    $remite_email = ""; //  correo
                    $asunto = "Recuperación de contraseña"; // Asunto
                    $mensaje = "Se ha generado una nueva contraseña para el usuario <strong>".$usuario_nombre."</strong>. La nueva contraseña es: <strong>".$usuario_clave."</strong>.";
                    $cabeceras = "From: ".$remite_nombre." <".$remite_email.">\r\n";
                    $cabeceras = $cabeceras."Mime-Version: 1.0\n";
                    $cabeceras = $cabeceras."Content-Type: text/html";
                    $enviar_email = mail($usuario_email,$asunto,$mensaje,$cabeceras);
                    if($enviar_email) {
                        echo "La nueva contraseña ha sido enviada al email asociado al usuario ".$usuario_nombre.".";
                    }else {
                        echo "No se ha podido enviar el email. <a href='javascript:history.back();'>Reintentar</a>";
                    }
                }else {
                    echo "El usuario <strong>".$usuario_nombre."</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_nombre" /><br />
            <input type="submit" name="enviar" value="Enviar" />
        </form>
    <?php
        }
    ?>
</body>
</html>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauro
Val: 2.761
Oro
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Generar password y enviar por mail

Publicado por Mauro (1036 intervenciones) el 06/02/2019 21:34:57
¿Puedes mostrar el contenido de 'dbconn.php'?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 41
Ha aumentado su posición en 7 puestos en PHP (en relación al último mes)
Gráfica de PHP

Generar password y enviar por mail

Publicado por Jordi S (28 intervenciones) el 07/02/2019 00:16:17
Hola,

Gracias. Es este:

1
2
3
4
5
6
7
8
<?php
	$host = 'localhost';
	$username = 'root';
	$password = 'jjjjjjjjjjjjjjj';
	$dbname = 'db';
	$con = mysqli_connect($host, $username, $password, $dbname);
	mysqli_set_charset($con, 'utf8');
?>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauro
Val: 2.761
Oro
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Generar password y enviar por mail

Publicado por Mauro (1036 intervenciones) el 07/02/2019 14:31:56
Ok, para empezar veo que estás mezclando los usos de las funciones mysql_* con mysqli_*... no sé qué resultado puede dar eso, pero de seguro nada bueno :).

Te recomiendo migrar todo hacia mysqli_* (O mejor, si conoces de POO, usa PDO).

Por otro lado, en la línea 24 dices:

1
if(mysql_num_rows($con)) {

Fíjate que $con es una conexión, y mysql_num_rows espera el resultado de una consulta, es decir, deberías usar lo que venga de la línea 17 en la variable $password... aunque leyéndolo mejor, ¿funciona esa línea?? Me parece que estás mezclando nuevamente.

Para hacerlo como buscas deberías usar mysqli_query y con el resultado de esta ejecución podrás usar mysql_num_rows.

En definitiva, creo que te vendría bien leer con un poco más de cuidado las funciones mysqli_* o, como te decía, las de PDO.

Saludos
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil
Val: 41
Ha aumentado su posición en 7 puestos en PHP (en relación al último mes)
Gráfica de PHP

Generar password y enviar por mail

Publicado por Jordi S (28 intervenciones) el 09/02/2019 17:32:04
Gracias me ha sido de ayuda.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar