[RESOLU] Connexion Administrator et Message connexion

Eléphant du PHP | 88 Messages

28 mars 2021, 11:15

Hello hello !! au bon endroit php débutant !
j'ai toujours un gros probleme d'algorythme et bon sang je n'arrive pas à faire mon code correctement :( !
je veux que lorsque mon administrator se connecte sans son password : j'ai un message!!
et bien j'y arrive pas à cause de mon getter qui me transmet à juste titre un message :
Call to a member function getIsAdmin() on null

voici mon controller pour la connexion de mon admin :
$pdo = Connexion::getPDO();
$user = new User();
$userManager = new UserManager($pdo);



if (!empty($_POST)) {
    $errors = array();
    $user = $userManager->findByUsernameAndPassword($_POST['username'], $_POST['password']); 
     if(empty($_POST['password'])) {
       $errors['password'] = "rentrez votre mot de passe!";
     }
     if ($user->getIsAdmin()) {
        $_SESSION['auth'] = $user; 
        $_SESSION['message_section'] = 'administrator';
    
        header('Location: ' . $router->url('admin_posts'));
        exit();
    } else {
        $errors ['username'] =  'Vous n\'êtes pas  Administrateur!';
    }
  }
Dans ma class user oui j'ai fait un systeme pour passer à 1 mon admin par phpMyAdmin
donc j'ai fait : pour la creation cette function pour avoir user, mp et toutes les creates en user O puisque c'est moi qui vait changer!
public function createUser(User $user)
    {
        $id = $this->create([
    'username' => $user->getUsername(),
    'password' => $user->getPassword(),
    'is_admin' => 0,]);
        $user->setId($id);
        return $user;
    }
mes mutateurs :
 public function getIsAdmin(): ?bool
    {
        return $this->is_admin;
    }

    public function setIsAdmin(bool $is_admin)
    {
        $this->is_admin = $is_admin;

        return $this;
    }
et je me heurte à ce message qui pourtant est cohérent : j'appel une function getIsAdmin on null
alors qu'elle devrait etre appelée en true !

je beug j'arrive pas !
merci pour votre aide

Mammouth du PHP | 2703 Messages

28 mars 2021, 11:32

$user = $userManager->findByUsernameAndPassword($_POST['username'], $_POST['password']);
if ($user->getIsAdmin()) {

findByUsernameAndPassword (que l'on a pas) renvoie donc null quand pas de mot de passe.
il faut faire les choses dans l'ordre, commencer par tester s'il y a un mot de passe, et ne rien faire d'autre si ce n'est pas le cas.

Eléphant du PHP | 88 Messages

28 mars 2021, 14:48

Bon voilà moi ce que je lis de mon code : le ridicule ne tue pas
if (!empty($_POST)) {
    if (empty($_POST['password'])) {
        $errors['password'] = " rentrez mp";
    }
    if (empty($errors)) {
        $user = $userManager->findByUsernameAndPassword($_POST['username'], $_POST['password']);
    }
        if ($user->getIsAdmin()) {
        $_SESSION['auth'] = $user;
        $_SESSION['message_section'] = 'administrator';
    
        header('Location: ' . $router->url('admin_posts'));
        exit();
    } else {
        $errors ['username'] =  'Vous n\'êtes pas  Administrateur!';
    }
}
si mon formulaire n'est pas vide : on passe au traitement :
si mon pwd est vide : alors une erreur s'affiche de ma vue
si le tableau des erreurs est vide : alors je veux que tu me trouve le mp et le username
et si c'est un admin : ouvre la session blablabl
mais je pense que des la seconde ligne ya un souci

et mon $user apres ! vaut null !

Mammouth du PHP | 2703 Messages

28 mars 2021, 18:42

" il faut faire les choses dans l'ordre, commencer par tester s'il y a un mot de passe, et ne rien faire d'autre si ce n'est pas le cas."

d'autre choses sont-elles faites si aucun mot de passe n'est saisi ? oui, donc
if (empty($_POST['password'])) {
        $errors['password'] = " rentrez mp";
}
else{
// il y a un mot de passe 
        $user = $userManager->findByUsernameAndPassword($_POST['username'], $_POST['password']);
        if($user){
                // un user a été trouvé
        }
        else{
                // aucun user trouvé
        }
}