Page 1 sur 1

Function methode avec LISTES ERRORS pour enregistrer un membre

Posté : 08 mars 2021, 13:16
par Beebeepc
Hello hello à tous !
j'aibesoin de vous aujourd'hui car je n'arrive pas à "enregistrer" un membre avec ce que je tente de mettre en place avec mon MVC POO! :(

je viens de creer une fonction qui me prepare un user avec des conditions:

Fichier UserManager.php
  public function addUser($username, $password)
    {
        $query = $this->pdo->prepare("INSERT INTO user SET  username = ?, password = ?");
        $password = password_hash($password, PASSWORD_BCRYPT);
        $query->execute([$username,$password]);
        $query->setFetchMode(PDO::FETCH_CLASS, $this->class);
        $result = $query->fetch();
        if (empty($_POST['username']) || !preg_match('/^[a-zA-Z0-9_]+$/', $_POST['username'])) {
            $errors['username']= "Votre pseudo ne correspond pas aux caractères valides";
        }
        if (isset($_POST['username'])) {
            $errors['username']= "Ce pseudo existe déjà  ou est vide merci d'en choisir un autre";
        }
        if (empty($_POST['password']) || $_POST['password'] != $_POST['password_confirm']) {
            $errors['password']= "Votre mot de passe ne correspond pas ou n'est pas rempli correctement!";
            return $errors;
        }
        return $user;  [b]c'est souligné par  l IDE  donc marche pas[/b]
    }
moi si je me traduis je dis je veux que ma fonction me cree mon user avec username et password , elle verifie le pasword, et si
en revanche ma viariable $_POST est vide de username ou ne correspond pas à pregmatch ou si username existe deja ou si le password est soit vide ou pas identique à la confirmation : alors tu me retourn les errors

si tout est bon tu retournes mon user!

Mon fichier controller.php
$pdo = Connection::getPDO();
$user = new User();
$userManager = new UserManager($pdo);
$user = $userManager->addUser($username, $password);
$errors = array();
if (!empty($_POST)) {
    if (!isset($user)) {
        $_SESSION['auth'] = $user;
        $_SESSION['premier_affichage'] = true;
        header('Location: ' . $router->url('blog'));
        exit();
    }
} 
require_once('../views/auth/login_register.php');
deja j'ai un message d'erreur en plus : qui dit que ma variable $username n'existe pas ( dans mon controller)

bref je comprends vraiment pas :(

est ce que vous pourriez m'aider?
PI = pour info mes sessions = pour l'affichage de mes alertes et ca OK

merci bcp
belle journee

Re: Function methode avec LISTES ERRORS pour enregistrer un membre

Posté : 08 mars 2021, 13:27
par or 1
$user = $userManager->addUser($username, $password);
dans le code donné, aucune valeur n'a été donné à $username.

il faut créer le user quand on est en méthode post, donc il faut commencer par
if (!empty($_POST)) {
et ne faire le traitement que dans ce if.

dans la fonction addUser, jamais cela ne doit faire appel à $_POST, car les données peuvent venir d'un fichier, de $_GET, d'une autre ligne de la table, ...

Re: Function methode avec LISTES ERRORS pour enregistrer un membre

Posté : 08 mars 2021, 15:40
par Beebeepc
Hello or1
Aucune valeur dans $username? oui je peux pas !!la valeur sera ajoutée lors du remplissage du formulaire?!
ok si il faut passer pae (!empty($_POST)) { mais moi mon but c'etait justement de ne pas faire tous mes if dans mon controller!! ::
if (!empty($_POST)) {
    $user=$userManager->createUser($username, $password);
    if (!isset($user)) {

       if (empty($_POST['username']) || !preg_match('/^[a-zA-Z0-9_]+$/', $_POST['username'])) {
           $errors['username']= "Votre pseudo ne correspond pas aux caractères valides";
       }

       if (isset($_POST['username'])) {

           //$user = $userManager->findByUsername($username);
           $errors['username']= "Ce pseudo existe déjà  ou est vide merci d'en choisir un autre";
       }

       if (empty($_POST['password']) || $_POST['password'] != $_POST['password_confirm']) {
           $errors['password']= "Votre mot de passe ne correspond pas ou n'est pas rempli correctement!";
       }
       if (empty($errors)) {
           $user->setUsername($_POST['username']);
           $user->setPassword($_POST['password']);
           $userManager->createUser($user);
           $success = true;

Re: Function methode avec LISTES ERRORS pour enregistrer un membre

Posté : 08 mars 2021, 19:04
par or 1
if (!empty($_POST)) {
$user = new User();
$user->populateFromForm(); // appels des fonction setUsername, setPassword ... qui font les vérifications adéquates
$user->saveInDb(); // sauve seulement si tous les champs nécessaires sont remplis correctement
}

pour sauver dans un fichier plutôt qu'en db :
if (!empty($_POST)) {
$user = new User();
$user->populateFromForm();
$user->saveInFile();
}

pour crééer un utilisateur aux donnée codées en dur :
$user = new User();
$user->setUsername(...);
$user->setPassword(...);
$user->saveInDb();