My user never logs in php

0

Hi, I'm trying to fix my login because even though I log in, it always shows me the same errors:

  

Notice: Trying to get property of non-object in   C: \ xampp \ htdocs \ login.php on line 20

And it also gives me invalid:

  

Password or username incorrect

The table looks like this:

login.php:

<?php
include 'inc/base.php';

function captcha() {
  $url = 'https://www.google.com/recaptcha/api/siteverify';
  $privatekey = '';
  $response = file_get_contents($url."?secret=".$privatekey."&response=".strip_tags($_POST['g-recaptcha-response'])."&remoteip=".$_SERVER['REMOTE_ADDR']);
  $data = json_decode($response);
  return isset($data->success) AND $data->success == true;
}

// LOGIN
if (isset($_POST['login'], $_POST['username'], $_POST['password'])) {
    $query = $db->prepare('SELECT COUNT(*) AS nb, id, username FROM users WHERE username=? AND password=?');
    $query->execute([
      $_POST['username'],
      md5($_POST['password'])
    ]);
    $data = $query->fetch();
    if ($data->nb) {
        $_SESSION['user'] = $data->username;
        $_SESSION['user_id'] = $data->id;
        header("location: index.php");
        exit;
    } else {
      $error = "Password or username incorrect";
    } 
}

// SIGNUp
if (isset($_POST['signup'], $_POST['username'], $_POST['email'], $_POST['password'], $_POST['confirm'])) {
  if (preg_match("#^[a-z0-9_-]{3,30}$#i", $_POST['username'])) {
      if (captcha()) {
    $query = $db->prepare("SELECT COUNT(*) AS nb FROM users WHERE username=?");
    $query->execute([
      $_POST['username']
    ]);
    $data = $query->fetch();

    if (!$data->nb) {
      if (filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)) {
        $query = $db->prepare("SELECT COUNT(*) AS nb FROM users WHERE email=?");
        $query->execute([
          $_POST['email']
        ]);
        $data = $query->fetch();

        if (!$data->nb) {
          if ($_POST['password'] === $_POST['confirm']) {
            if (strlen($_POST['password']) >= 4) {

              $query = $db->prepare("INSERT INTO users(username, email, password) VALUES(:username, :email, :password)");
              $query->execute([
                "username" => $_POST['username'],
                "email" => $_POST['email'],
                "password" => md5($_POST['password'])
              ]);

              $_SESSION['user'] = $_POST['username'];
              $_SESSION['user_id'] = $db->lastInsertId();

              header("Location: index.php");
              exit;

            } else {
              $error = "The password must be at least 4 characters";
            }
          } else {
            $error = "The two passwords must match";
          }
        } else {
          $error = "This email is already taken";
        }
      } else {
        $error = "Incorrect email format";
      }
    } else {
      $error = "This username is already taken";
    }
  }
  else 
  {
      $error = "Invalid captcha";  
  }
  }
  else
  {
    $error = "The username must be within 3 and 30 characters";
  }
}

include 'inc/header.php';
?>
    <?php
    if (isset($error)) echo "<div class=\"message_erreur\">$error</div>";
    ?>
        <section>
            <h1 class="title">Log in</h1>
            <form method="POST">
            Username : <input type="text" name="username" required />
            Password : <input type="password" name="password" required />
        <input type="submit" name="login" value="Se connecter" required />
        </form>
        </section>

        <section>
            <h2 class="title">Sign Up</h2>
            <form method="POST">
            <label>Username :<br />
              <input type="text" name="username" <?php if(isset($_POST['username'])) echo 'value="'.htmlspecialchars($_POST['username']).'"'; ?> required />
            </label>
            <label>Email :<br />
              <input type="text" name="email" <?php if(isset($_POST['email'])) echo 'value="'.htmlspecialchars($_POST['email']).'"'; ?> required />
            </label>
            <label>Password :<br />
              <input type="password" name="password" required />
            </label>
            <label>Repeat password :<br />
              <input type="password" name="confirm" required />
            </label>
            <center><div class="g-recaptcha" data-sitekey="6LdXGA8TAAAAAKV0MvCvn5eT3--7v4eipyvKPD0s"></div></center><br/>
            <input type="submit" name="signup" value="Créer un compte" />
        </form>
        </section>
<?php
include 'inc/footer.php';
    
asked by Mohamed El Alami 18.01.2018 в 19:22
source

1 answer

4

The error is because $data = $query->fetch(); returns the records in array format, no object. Then, on line 20 you should replace:

if ($data->nb) {

for

if ($data['nb']) {

(Source: PHP Manual: PDO :: fetch , parameter fetch_style )

    
answered by 18.01.2018 в 19:32