Bonjour,

Voila je rencontre un petit problème avec mon code.

Ce que je fais

J'ai suivi le tuto sur créer son portefolio et je suis tombé sur cette erreur là :
uncaught Error: Cannot access empty property

voici mon code

if(isset($_POST['username']) && isset($_POST['password'])){
    $username = $db->quote($_POST['username']);
    $password = sha1($_POST['password']);
    $select = ("SELECT * FROM usernames WHERE usernames=$username AND password='$password'");
    $db->$query;
    var_dump($select->rowCount());
    var_dump($_POST);

    if ($select->rowCount()>0) {
        $_SESSION['Auth'] = $select->fetch();
        setFlash('Vous êtes maintenant connnecter');
        header('location: index.php');
        die();
    }

}

9 réponses


Bonsoir.
Ton problème doit venir de $db->$query;
Je pense que tu veux plutôt faire :

$sql = "SELECT * FROM usernames WHERE usernames=$username AND password='$password'";
$select = $db->query($sql);
Arma_713
Auteur

yes je te remercie ça marche des keur sur toi ^^
ça ma affiché une nouvelle erreur : Uncaught Error: Call to a member function rowCount() on boolean

Bah d'où sort rowCount() ? si c'est pour tester si tu trouve ou pas un user :

if(!empty($select)){
    echo 'user connecté';
}
Arma_713
Auteur

excuse moi de pas avoir répondu depuis 3 mois j'ai eu quelque soucis cid je n'ai pas compris ta question

Salut,

ça ma affiché une nouvelle erreur : Uncaught Error: Call to a member function rowCount() on boolean

C'est juste la requête qui est mal écrite (par rapport aux quotes / double quotes).
Il faut un fetchAll() aussi.
Et du coup utilise count($truc) plutôt que $truc->rowCount().

$sql = 'SELECT * FROM usernames WHERE usernames = "' . $username . '" AND password = "' . $password . '"';
$select = $db->query($sql);
$response = $select->fetchAll();

var_dump($response);
var_dump(count($response));

Pas vraiment ultra important mais,
ça me perturbe beaucoup que le champ usernames soit au pluriel plutôt qu'au singulier.
Et que la table s'appelle usernames plutôt que users ou members ou autres...
C'est un peu confus.

Arma_713
Auteur

voila mon nouveau code mais ca me remarque la même choses "
Fatal error: Uncaught Error: Call to a member function fetchAll() on boolean in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\login.php:36 Stack trace: #0 {main} thrown in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\login.php on line 36"
pourl e champs qui porte quasiment le même nom j'avais fais ca il été tard donc j'été fatigué mais quand je m'en suis rendu compte j'avais de réemmeller les pinceaux si je changeais tout


<?php

    if(isset($_POST['username']) && isset($_POST['password'])){
    $username = $db->quote($_POST['username']);
    $password = sha1($_POST['password']);
    $sql = 'SELECT * FROM usernames WHERE usernames = "' . $username . '" AND password = "' . $password . '"';
    $select = $db->query($sql);
    $response = $select->fetchAll();

    var_dump($response);
    var_dump(count($response));
    /**
    $sql = ("SELECT * FROM usernames WHERE usernames=$username AND password='$password'");
    $select = $db->query($sql);

    var_dump($select->rowCount());
    if ($select->rowCount()>0) {

        $_SESSION['Auth'] = $select->fetchAll();
        setFlash('Vous êtes maintenant connnecter');
        header('location: index.php');
    }*/

il été tard donc j'été fatigué mais quand je m'en suis rendu compte j'avais de réemmeller les pinceaux si je changeais tout

haha,
oui je vois ^^
moi c'est pareil.

mets des var_dump sur $username et $password,
et vérifie que ce sont les bonnes valeurs en BDD.

$username = $db->quote($_POST['username']);
$password = sha1($_POST['password']);
var_dump($username);
var_dump($password);
Arma_713
Auteur

yep ce sont bien les bonne valeurs qui en ressortent

ah ben zut, je ne vois pas du tout... :'(