PHP - Warning: count(): Parameter must be an array or an object that implements Countable in C:\xampp\htdo

 
Vista:
Imágen de perfil de Caroline Prada
Val: 6
Ha aumentado su posición en 26 puestos en PHP (en relación al último mes)
Gráfica de PHP

Warning: count(): Parameter must be an array or an object that implements Countable in C:\xampp\htdo

Publicado por Caroline Prada (4 intervenciones) el 23/03/2019 23:39:05
Compañeros,

Anteriormente hice una publicación, la cual inicié nuevamente, pero ahora tengo un nuevo error, el código se conecta con la base de MySQL y trata de hacer la validación, pero no se que estoy haciendo o poniendo mal, porque no me los valida en su totalidad, agradezco a quien me pueda colaborar con una orientación, debo entregar pronto este ejercicio y sigo quedada por esta casuistica.

Muchas gracias, este es el 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
98
99
100
101
<?php
 
	session_start();
 
	if (isset($_SESSION['id_user']))
	{
		header("Location: /login");
	}
 
	require "database.php";
 
	if (!empty($_POST['email']) && !empty($_POST['password']))
	{
 
		$records = $conn->prepare('SELECT * FROM usuario2 WHERE email = :email AND password = :password');
 
		$records->bindParam(':email', $_POST['email']);
		$records->bindParam(':password', $_POST['password']);
 
		$records->execute();
 
		$results= $records->fetch(PDO::FETCH_ASSOC);
 
 
 
		$message = '';
 
 
 
		if (count($results) > 0 && password_verify($_POST['password'], $results['password']))
		{
 
			$_SESSION['id_user'] = $results['id_user'];
			$message = 'Usuario Autenticado';
 
			/**header("Location: /login");**/
 
		}
		else
		{
 
			$message = 'Estas credenciales estan erradas, intente nuevamente';
 
		}
 
	}
 
?>
 
 
 
<!DOCTYPE html>
 
<html>
 
	<head>
 
		<meta charset= "utf-8">
 
		<title> Ingreso </title>
 
		<link rel="stylesheet" href="css/style.css" >
 
	</head>
 
 
 
	<body>
 
		<?php require 'header.php' ?>
 
 
 
		<?php if (!empty($message)) : ?>
 
		<p> <?= $message ?></p>
 
		<?php endif;?>
 
 
 
		<h1> Ingreso </h1>
 
 
		<form action="login.php" method= "POST">
 
			<input name="email" type="text" placeholder="Ingrese el E-mail">
 
			<input name="password" type="password" placeholder= "Ingrese la Contraseña">
 
			<input type="submit" value= "Ingresar">
 
 
 
		</form>
 
 
 
	</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 italo_pm
Val: 920
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Warning: count(): Parameter must be an array or an object that implements Countable in C:\xampp\htdo

Publicado por italo_pm (193 intervenciones) el 24/03/2019 14:43:44
Hola, en pdo la manera de contar los record afectados del select, update o delete es distinta.

deberas utilizar rowcount(); por ejemplo:

1
$numero_records = $stmt->rowcount();

para saber cuantos records hay.

en tu caso:

de:

1
$results= $records->fetch(PDO::FETCH_ASSOC);

a

1
$total_records = $records->rowcount();

y

de

1
if (count($results) > 0 && password_verify($_POST['password'], $results['password']))

a

1
if ($total_records > 0 && password_verify($_POST['password'], $results['password']))


prueba

salud2
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 italo_pm
Val: 920
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Warning: count(): Parameter must be an array or an object that implements Countable in C:\xampp\htdo

Publicado por italo_pm (193 intervenciones) el 24/03/2019 15:24:02
hola, quise decir que agregues (antes o despues)

de:

1
$results= $records->fetch(PDO::FETCH_ASSOC);

agregas o antes o después lo siguiente

1
$total_records = $records->rowcount();

y el resto de mi respuesta anterior...

por otra parte, tu comparas el count de los records con > a 0, pero si solo puede haber un (1) solo usuario en tu sistema no seria mejor compararlo con == 1 (igual a 1)?

bueno mi ultimo comentario es solo como información adicional, no siempre es necesario comparar con > a 0.

prueba

salud2
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 Caroline
Val: 6
Ha aumentado su posición en 26 puestos en PHP (en relación al último mes)
Gráfica de PHP

Warning: count(): Parameter must be an array or an object that implements Countable in C:\xampp\htdo

Publicado por Caroline (4 intervenciones) el 24/03/2019 20:19:59
Hola,

Muchas gracias ya no presento el error, pero aún mi código no valida los datos de la base de datos, si coloco de forma errada o correcta los datos siempre me sale el mensaje de credenciales erradas (el mismo que puse para validar), ayuda por fa es lo único que no he podido sacar, dejo adjunta la imagen de la base y el error que persiste.

Muchas gracias a quien me pueda ayudar,

Nota: El código es el mismo que se encuentra al inicio.


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
Imágen de perfil de italo_pm
Val: 920
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Warning: count(): Parameter must be an array or an object that implements Countable in C:\xampp\htdo

Publicado por italo_pm (193 intervenciones) el 25/03/2019 02:04:20
hola, en la parte de validación utilizas password_verify, lo que quiere decir que la password que esta en tu database fue creada con password_hash, si ese NO fuera el caso, te devuelve false, por eso el error de tu validación.

si ese fuera el caso (si has utilizado password_hash) tendras que hacer el password_verify antes de la query mysql y pasar ese valor en la query como el campo de la password y ya NO será necesario que lo validez nuevamente en tu if.

si NO has utilizado pasdword_hash (ósea si has insertado directamente la password en claro en tu database) no validez con password_verify ni nada.

si necesitas ayuda tendrias que escribir el codigo (escribelo, no lo adjuntes) que utilizas para el insert de la password en el database para verificar.

prueba.

salud2
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 italo_pm
Val: 920
Bronce
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Warning: count(): Parameter must be an array or an object that implements Countable in C:\xampp\htdo

Publicado por italo_pm (193 intervenciones) el 26/03/2019 03:22:46
Hola, he visto las imagenes de adjuntaste y se ve que la password la guardas en claro... (c1234) asi que no tiene ningun hash ni nada.

entonces, para tu problema deberas eliminar la parte de la verificacion del password_verify, cambia esta parte

de:

1
if ($total_records > 0 && password_verify($_POST['password'], $results['password']))

a:

1
if ($total_records > 0)

como la password ya la has verificado en la query del select y no has utilizado ningun hash, pues en este caso bastara que verifiques si hay uno o mas de un record.

prueba.

salud2.
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