PHP - Verificar contraseña actual guardada en la bd

 
Vista:
Imágen de perfil de yoclens
Val: 19
Ha aumentado su posición en 4 puestos en PHP (en relación al último mes)
Gráfica de PHP

Verificar contraseña actual guardada en la bd

Publicado por yoclens (20 intervenciones) el 23/03/2023 01:52:23
Hola actualmente tengo un problema para proceder al cambio de contraseña, resulta que si ingreso una contraseña que no es la que esta guardada en mi bd igualmente me cambia la contraseña y no debería porque no es la que esta guardada en mi bd y debería saltar la alerta de: Contraseña Actual Incorrecta. !.

todo lo demás funciona bien. Anexo código.

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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
<!-- cambiar contraseña-->
<?php
 {
 
   if(isset($_POST['modificar'])) {
 
 
       // consulto campos vacios
     $pass = $_POST['pass'];
     $nuevaclave = $_POST['nuevaclave'];
     $nuevaclaveconfirme = $_POST['nuevaclaveconfirme'];
 
      if(strlen(trim($pass)) < 1 || strlen(trim($nuevaclave)) < 1 || strlen(trim($nuevaclaveconfirme)) < 1) {
 
           $alert = "<div class='col-md-4 mb-2 offset-md-4 alert alert-warning' role='alert'>
           ! <strong>Ups Aviso:</strong> No pueden haber campos vacíos. !
           </div>";
 
            }  else  {
 
 
 
      // consulto la contrasena actual guardada en la bd
     $user = $_SESSION['id_nivel'];
     $pass = $_POST['pass'];
 
 
    // Preparamos la consulta y la ejecutamos
    $sql = "SELECT * FROM usuarios WHERE user = :user AND pass = :pass LIMIT 1"; //Creamos la select
    $sql = $DB_con->prepare($sql); //Preparamos la SELECT, de ésta manera evitamos SQL Injection
    $sql->bindParam(':user', $_POST['user']);
    $sql->bindParam(':pass', $_POST['pass']);
    $sql->execute();
 
    // Comprobamos si ha devuelto algun registro
    if($sql->rowCount()>0){
      $check->closeCursor();
 
            $alert = "<div class='col-md-4 mb-2 offset-md-4 alert alert-warning' role='alert'>
           ! <strong>Ups Aviso:</strong> Contraseña Actual Incorrecta. !
           </div>";
 
 
          } else {
 
 
 
    if($_POST['nuevaclave'] != $_POST['nuevaclaveconfirme']) {
 
            $alert = "<div class='col-md-4 mb-2 offset-md-4 alert alert-warning' role='alert'>
           ! <strong>Ups Aviso:</strong> Las Contraseñas Ingresadas no Coinciden. !
           </div>";
 
           } else {
 
    // todo va bien actualizo la contraseña
    $user = $_SESSION['user'];
    $pass = $_POST['pass'];
 
    $sql = "UPDATE usuarios SET pass= :pass WHERE user= :user"; //Creamos la select
    $perfil = $DB_con->prepare($sql); //Preparamos la SELECT, de ésta manera evitamos SQL Injection
    $perfil->bindParam(':pass',$pass,PDO::PARAM_STR);
    $perfil->bindParam(':user', $_SESSION['user'],PDO::PARAM_STR);
    $perfil->execute();
    if($perfil) {
 
 
            $alert = "<div class='col-md-4 mb-2 offset-md-4 alert alert-primary' role='alert'>
           ! <strong>Exelente:</strong> Contraseña Actualizada Correctamente. !
           </div>";
 
 
                } else {
 
            $alert = "<div class='col-md-4 mb-2 offset-md-4 alert alert-warning' role='alert'>
           ! <strong>Aviso:</strong> No se Pudo Cambiar la Contraseña. !
           </div>";
 
 
 
                     }
 
 
                }
 
 
             }
 
         }
 
 
    }
 
}
 
?>
<!-- fin cambiar contraseña-->
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

Verificar contraseña actual guardada en la bd

Publicado por Alejandro (839 intervenciones) el 23/03/2023 04:03:58
  • Alejandro se encuentra ahora conectado en el
  • chat de PHP
1
if($sql->rowCount()>0){
Línea 36: Si la contraseña es incorrecta rowCount() devolverá 0 y la condición no se cumple pasando a registrar la contraseña.

Un consejo, trata de reducir los niveles de anidamiento.
1
2
3
4
5
6
7
8
9
10
11
12
if(strlen(trim($pass)) < 1 || strlen(trim($nuevaclave)) < 1 || strlen(trim($nuevaclaveconfirme)) < 1) {
    // Campos vacios
    exit;
}
 
if($sql->rowCount()!=1){
    // Usuario o contraseña no válidos
}else if($_POST['nuevaclave'] != $_POST['nuevaclaveconfirme']) {
    // Las contrseñas no coinciden
}else{
    // Actualizar
}
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 yoclens
Val: 19
Ha aumentado su posición en 4 puestos en PHP (en relación al último mes)
Gráfica de PHP

Verificar contraseña actual guardada en la bd

Publicado por yoclens (20 intervenciones) el 24/03/2023 02:34:21
hola, gracias por responder lo he modificado un poco a la referencia, pero ahora me funciona mal. No se si es que estoy haciéndolo mal.


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
64
65
66
67
68
69
70
71
72
73
74
75
<!-- cambiar contraseña-->
<?php
{
 
     if(isset($_POST['modificar'])) {
 
 
     // consulto campos vacios
     $pass = $_POST['pass'];
     $nuevaclave = $_POST['nuevaclave'];
     $nuevaclaveconfirme = $_POST['nuevaclaveconfirme'];
 
 
     if(strlen(trim($pass)) < 1 || strlen(trim($nuevaclave)) < 1 || strlen(trim($nuevaclaveconfirme)) < 1) {
 
           $alert = "<div class='col-md-4 mb-2 offset-md-4 alert alert-warning' role='alert'>
           ! <strong>Ups Aviso:</strong> No pueden haber campos vacíos. !
           </div>";
 
    exit;
}
 
 
     // consulto la contrasena actual guardada en la bd
     $user = $_SESSION['id_nivel'];
     $pass = $_POST['pass'];
 
 
    // Preparamos la consulta y la ejecutamos
    $sql = "SELECT * FROM usuarios WHERE user = :user AND pass = :pass LIMIT 1"; //Creamos la select
    $sql = $DB_con->prepare($sql); //Preparamos la SELECT, de ésta manera evitamos SQL Injection
    $sql->bindParam(':user', $_POST['user']);
    $sql->bindParam(':pass', $_POST['pass']);
    $sql->execute();
    if($sql->rowCount()!=1){
 
           $alert = "<div class='col-md-4 mb-2 offset-md-4 alert alert-warning' role='alert'>
           ! <strong>Ups Aviso:</strong> Contraseña Actual Incorrecta. !
           </div>";
 
     }else if($_POST['nuevaclave'] != $_POST['nuevaclaveconfirme']) {
 
           $alert = "<div class='col-md-4 mb-2 offset-md-4 alert alert-warning' role='alert'>
           ! <strong>Ups Aviso:</strong> Las Contraseñas Ingresadas no Coinciden. !
           </div>";
 
    }else{
 
    // todo va bien actualizo la contraseña
    $user = $_SESSION['user'];
    $pass = $_POST['pass'];
 
    $sql = "UPDATE usuarios SET pass= :pass WHERE user= :user"; //Creamos la select
    $perfil = $DB_con->prepare($sql); //Preparamos la SELECT, de ésta manera evitamos SQL Injection
    $perfil->bindParam(':pass',$pass,PDO::PARAM_STR);
    $perfil->bindParam(':user', $_SESSION['user'],PDO::PARAM_STR);
    $perfil->execute();
    if($perfil) {
 
 
            $alert = "<div class='col-md-4 mb-2 offset-md-4 alert alert-primary' role='alert'>
           ! <strong>Exelente:</strong> Contraseña Actualizada Correctamente. !
           </div>";
 
 
                }
 
       }
 
 
     }
 
  }
?>
<!-- fin cambiar contraseña-->
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 Alejandro
Val: 1.634
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Verificar contraseña actual guardada en la bd

Publicado por Alejandro (839 intervenciones) el 24/03/2023 03:32:42
  • Alejandro se encuentra ahora conectado en el
  • chat de PHP
¿En que sentido funciona mal?
En este ultimo código veo innecesario separar en bloque (la llave luego de <php).
Las variables $user y $pass generan confusión, no se usan en el bloque donde aparece el comentario "consulto la contrasena actual guardada en la bd".
Y finalmente no se hace nada con la variable $alert.
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 yoclens
Val: 19
Ha aumentado su posición en 4 puestos en PHP (en relación al último mes)
Gráfica de PHP

Verificar contraseña actual guardada en la bd

Publicado por yoclens (20 intervenciones) el 24/03/2023 04:03:33
entonces como debería ser el código en si, ya me enrede todo, ah la variable $alert. es para emitir el mjs de alerta
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 Alejandro
Val: 1.634
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Verificar contraseña actual guardada en la bd

Publicado por Alejandro (839 intervenciones) el 24/03/2023 05:14:30
  • Alejandro se encuentra ahora conectado en el
  • chat de PHP
Si esto lo usas con un include entonces el exit puede provocar la interrupción de tu programa.
¿que es lo que te enreda?
Tu error inicial era el condicional en el que si el usuario era correcto asignaba el error a la variable $alert y si era incorrecto realizaba el cambio de contraseña.

Las sugerencias hechas son opcionales, puedes notar que es mas limpio el código aunque aun le falta estar bien indentado.

¿cómo debería ser? lo mas claro posible :) pero lo más importante es que entiendas que haces.

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
<!-- cambiar contraseña-->
<?php
if(isset($_POST['modificar'])) {
	$alert = '';
	// consulto campos vacios
	$pass = $_POST['pass'];
	$nuevaclave = $_POST['nuevaclave'];
	$nuevaclaveconfirme = $_POST['nuevaclaveconfirme'];
 
	if(strlen(trim($pass)) < 1 || strlen(trim($nuevaclave)) < 1 || strlen(trim($nuevaclaveconfirme)) < 1) {
		$alert = "No pueden haber campos vacíos.";
	}else{
		// consulto la contrasena actual guardada en la bd
		// Preparamos la consulta y la ejecutamos
		$sql = "SELECT * FROM usuarios WHERE user = :user AND pass = :pass LIMIT 1"; //Creamos la select
		$sql = $DB_con->prepare($sql); //Preparamos la SELECT, de ésta manera evitamos SQL Injection
		$sql->bindParam(':user', $_POST['user']);
		$sql->bindParam(':pass', $_POST['pass']);
		$sql->execute();
 
		if($sql->rowCount()!=1){
			$alert = "Contraseña Actual Incorrecta.";
		}else if($_POST['nuevaclave'] != $_POST['nuevaclaveconfirme']) {
			$alert = "Las Contraseñas Ingresadas no Coinciden.";
		}else{
			// todo va bien actualizo la contraseña
			$user = $_SESSION['user'];
			$pass = $_POST['pass'];
 
			$sql = "UPDATE usuarios SET pass= :pass WHERE user= :user"; //Creamos la select
			$perfil = $DB_con->prepare($sql); //Preparamos la SELECT, de ésta manera evitamos SQL Injection
			$perfil->bindParam(':pass',$pass,PDO::PARAM_STR);
			$perfil->bindParam(':user', $_SESSION['user'],PDO::PARAM_STR);
			$perfil->execute();
			if($perfil) {
				echo "<div class='col-md-4 mb-2 offset-md-4 alert alert-primary' role='alert'>".
				"! <strong>Exelente:</strong> Contraseña Actualizada Correctamente. !".
				"</div>";
			}
		}
	}
 
	if( $alert!='' ){
		echo "<div class='col-md-4 mb-2 offset-md-4 alert alert-warning' role='alert'>".
		"! <strong>Ups Aviso:</strong> $alert !".
		"</div>";
	}
}
?>
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