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

 
Vista:
Imágen de perfil de BlowDix
Val: 23
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

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

Publicado por BlowDix (6 intervenciones) el 27/08/2020 21:59:10
Hola, me tira el siguiente error en este codigo

Error: Warning: count(): Parameter must be an array or an object that implements Countable in C:\xampp\htdocs\login.php on line 17}

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
<?php
 
session_start();
 
if (isset($_SESSION['user_id'])) {
  header('Location: /');
}
require 'database.php';
 
if (!empty($_POST['email']) && !empty($_POST['password'])) {
  $records = $conn->prepare('SELECT id, email, password FROM users WHERE email = :email');
  $records->bindParam(':email', $_POST['email']);
  $records->execute();
  $results = $records->fetch(PDO::FETCH_ASSOC);
 
  $message = '';
  if (count($results) > 1 && password_verify($_POST["password"], $results["password"])) {
    $_SESSION["user_id"] = $results["id"];
    header("Location: /login.php");
  } else {
    $message = "Revisar los datos ingresados, son incorrectos!";
  }
}
?>
 
<!DOCTYPE html>
<html>
 
<head>
  <meta charset="utf-8">
  <title>Iniciar Sesion</title>
  <link href="https://fonts.googleapis.com/css?family=Roboto" rel="stylesheet">
  <link href="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js" rel="stylesheet">
  <link rel="stylesheet" href="assets/css/style.css">
</head>
 
<body>
  <?php require 'partials/header.php' ?>
 
  <?php if (!empty($message)) : ?>
    <p> <?= $message ?></p>
  <?php endif; ?>
 
  <h1>Iniciar Sesion</h1>
  <span>o <a href="signup.php">Registrarse</a></span>
 
 
  <div class="container">
 
 
    <!-- Fin Mensajes de Verificación -->
 
    <form action="login.php" name="singup" method="POST" id="miformulario" onsubmit="verificarPasswords(); return false">
      <div class="form-group">
        <label for="email"></label>
        <input name="email" type="text" class="form-control" id="email" placeholder="Ingresa tu usuario" required>
      </div>
      <div class="form-group">
        <label for="pass1"></label>
        <input name="password" type="password" class="form-control" id="pass1" placeholder="Ingresa tu contraseña" required>
      </div>
      <input type="submit" value="Iniciar" id="registrarNuevo">
    </form>
 
  </div>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
</body>
 
</html>

El codigo es un loguin y solamente me lo tira cuando pongo mal el usuario si pongo bien el usuario pero mal la contraseña pasa lo esperado..

Agradeceria su ayudo ya que me estoy volviendo loco tratando de solucionarlo y estoy recien empezando en todo eso :D
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 joel
Val: 2.922
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

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

Publicado por joel (917 intervenciones) el 28/08/2020 08:14:35
Hola BlowDix, ahi el problema es que seguramente tu consulta SQL no devuelve ningun registro, por lo que seguramente la variable $results tenga el valor false. Por esa razón te muestra el Warning.

prueba a cambiar esta linea:
1
if (count($results) > 1 && password_verify($_POST["password"], $results["password"])) {
por esta
1
if ($results && count($results) > 1 && password_verify($_POST["password"], $results["password"])) {

De esta manera, si $result es false, ya no continua revisando el resto de condiciones.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar