Bonjour les amis invisibles,
SOS CODE
je galère sur la reprise d'un tuto gernere une errors que je comprend pas.
le navigateur m'affiche que le nom d'utilsateur n'est definie a la ligne 10 pourtant c'est le cas.
Et son absence a des repercution sur la ligne 14 de la class Auth: VOICI L'ERREUR

Avis : Index non défini : nom d'utilisateur dans C: \ xampp \ htdocs \ usersession \ public \ login.php à la ligne 10

Erreur fatale : Uncaught TypeError: L'argument 1 passé à App \ Auth :: login () doit être de type chaîne, null donné, appelé dans C: \ xampp \ htdocs \ usersession \ public \ login.php sur la ligne 10 et défini dans C: \ xampp \ htdocs \ usersession \ src \ Auth.php: 14 Stack trace: # 0 C: \ xampp \ htdocs \ usersession \ public \ login.php (10): App \ Auth-> login (NULL, 'oko') # 1 {main} jeté dans C: \ xampp \ htdocs \ usersession \ src \ Auth.php à la ligne 14
.

Ce que je fais

Voici les codes

<?php
require '../vendor/autoload.php';
use App\Auth;
if(!empty($_POST)){
    $pdo = new PDO("sqlite:../data.sqlite", null, null,[
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
    ]);
    $auth = new Auth($pdo);
     $user = $auth->login($_POST['username'], $_POST['password']);//ligne 10
    dd($user);

}
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
</head>
<body class="p-4 container col-md-6">
    <h1>Se connecter</h1>
    <form action="" method="post">
        <div class="form-group">
        <input type="text" class="form-control" name="username" placeholder="pseudo">
        </div>
        <div class="form-group">
        <input type="password" class="form-control" name="password" placeholder="password">
        </div>
        <button class="btn btn-primary">Se connecter</button>
    </form>
</body>
</html>

voici la class Auth:

<?php 
namespace App;
use PDO;

class Auth{
    private $pdo;
    public function __construct(PDO $pdo)
    {
      $this->pdo = $pdo;
    }
    public function user(): ?User
    {

    }
    public function login(string $username, string $password): ?User
    {
        //Trouver l'utilisateur correspondant au username
        $query = $this->pdo->prepare('SELECT * FROM users WHERE username = :username');
        $query->execute(['username' => $username]);
        $query->setFetchMode(PDO::FETCH_CLASS, User::class);
         $user = $query->fetch();
         if($user === false){
             return null;
         }
        // On verifie password que l'utilisateur corresponde
        if(password_verify($password, $user->password)){
            return $user;
        }
        return null;
    }

}

Ce que je veux

j'apprend php grace aux tuto de graficart (apprendre le php ) et actuelement je fait le chapitre 39, j'aimeriais avoir les meme resutats que lui
mais nos erreurs se different.Aidez mois SVP.

Merci d'avance.

6 réponses


Carouge10
Réponse acceptée

bonsoir.
que donne un var_dump de $_POST avant $pdo ?

merciful
Auteur
Réponse acceptée

voici ce que donne le var_dump: array(2) { ["user"]=> string(4) "koko" ["password"]=> string(3) "oko" }

Carouge10
Réponse acceptée

donc tu n'as pas d'index username mais user
donc soit tu ne modifies pas le bon code, soit un problème de cache.....

merciful
Auteur
Réponse acceptée

je pense fortement que c'est le cache.
Merci pour la sugestion et de ta rapidité

merciful
Auteur
Réponse acceptée

oui c'est le cache,je l'ai teste avec un autre navigateur et sa marche.Merci beaucoup

Carouge10
Réponse acceptée

de rien,
passe ton sujet en résolu