Partage
  • Partager sur Facebook
  • Partager sur Twitter

Inscription et connexion

N'est pas dirigée au bon endroit et ne s'applique pas a la bdd

    14 mars 2022 à 16:26:02

    Bonjour tout le monde!

    J'ai un soucis je suis en train de créer mon tout premier site internet j'ai créée la base de données les tables sont déjà reliées entre elles mais dans l'inscription le index.php?page=setInscription me mène sur une page 404 not found et l'user n'est pas enregistré dans la base de données voici le code des différentes pages si vous pouvez m'aider:

    inscription.php: 

    <?php
    $nom = "";
    $prenom = "";
    $email = "";
    $tel = "";
    $mdp = "";
    
    $errorNom = "";
    $errorEmail = "";
    $errorTel = "";
    $errorMdp = "";
    $errorPrenom = "";
    
    if (isset($_POST['nom'])) {
      if (!empty($_POST["nom"])) {
        $nom = $_POST["nom"];
      } else {
        $errorNom = "le nom est obligatoire";
      }
    }
    
    if (isset($_POST["email"])) {
      if ($_POST["email"] != "") {
        $email = $_POST["email"];
      } else if (!filter_var($email, FILTER_VALIDATE_EMAIL)) {
        $errorEmail = "l'email est invalide";
      } else {
        $errorEmail = "l'email est obligatoire";
      }
    }
    if (isset($_POST["mdp"])) {
    
      if ($_POST["mdp"] != "") {
        $mdp = $_POST["mdp"];
      } else {
        $errorMdp = "le mot de passe est obligatoire";
      }
      if (isset($_POST["prenom"])) {
    
        if ($_POST["prenom"] != "") {
          $message = $_POST["prenom"];
        } else {
          $errorMessage = "le prénom est obligatoire";
        }
      }
    }
    
    ?>
    
    <!DOCTYPE html>
    <html lang="en">
    
    <head>
      <link rel="stylesheet" href="/monSite/css/issueForm.css">
      <link rel="stylesheet" href="./css/bootstrap.min.css">
      <meta charset="UTF-8">
      <meta http-equiv="X-UA-Compatible" content="IE=edge">
      <meta name="viewport" content="width=device-width, initial-scale=1.0">
      <link rel="stylesheet" href="./css/bootstrap.min.css">
      <link rel="stylesheet" href="/css/contact.css">
    
    <body>
      <div><?= @$erreur ?></div>
      <form action="index.php?page=setInscription" method="post">
        <div class="background">
          <div class="container">
            <div class="screen">
              <div class="screen-header">
                <div class="screen-header-left">
                  <div class="screen-header-button close"></div>
                  <div class="screen-header-button maximize"></div>
                  <div class="screen-header-button minimize"></div>
                </div>
                <div class="screen-header-right">
                  <div class="screen-header-ellipsis"></div>
                  <div class="screen-header-ellipsis"></div>
                  <div class="screen-header-ellipsis"></div>
                </div>
              </div>
              <div class="screen-body">
                <div class="screen-body-item left">
                  <div class="app-title">
                    <span>INSCRIPTION</span>
                  </div>
                  <div class="app-contact">TEL: +33 76 45 45 45 45</div>
                </div>
                <div class="screen-body-item">
                  <div class="app-form">
                    <div class="app-form-group">
                      <input class="app-form-control" placeholder="NOM" type="text" name="nom" value="" required>
                      <span class="error"> <?php echo $errorNom; ?></span>
                    </div>
                    <div class="app-form-group">
                      <input class="app-form-control" placeholder="PRENOM" type="text" name="prenom" value="" required>
                      <span class="error"><?php echo $errorPrenom; ?></span>
                    </div>
                    <div class="app-form-group">
                      <input class="app-form-control" placeholder="TELEPHONE" type="tel" name="tel" value="" required>
                      <span class="error"><?php echo $errorTel; ?></span>
                    </div>
                    <div class="app-form-group">
                      <input class="app-form-control" placeholder="EMAIL" type="email" name="email" value="" required>
                      <span class="error"><?php echo  $errorEmail; ?></span>
                    </div>
                    <div class="app-form-group">
                      <input class="app-form-control" placeholder="MOT DE PASSE" type="password" name="mdp" value="" required>
                      <span class="error"><?php echo $errorMdp; ?></span>
                    </div>
                    <div class="app-form-group buttons">
                      <button class="app-form-button">S'INSCRIRE</button>
                    </div>
                  </div>
                </div>
              </div>
            </div>
    
          </div>
        </div>
        </div>
      </form>
    </body>
    
    </html>

    usersController.php:

    <?php
    include_once('model/usersModel.php');
    
    class UsersController extends UsersModel
    {
    
        protected $idUser;
        protected $nom;
        protected $prenom;
        protected $tel;
        protected $email;
        protected $mdp;
    
    
    
        public function inscription()
        {
            $this->nom = trim($_POST['nom']);
            $this->prenom = trim($_POST['prenom']);
            $this->tel = trim($_POST['tel']);
            $this->email = trim($_POST['email']);
            //    $this->mdp = trim($_POST['mdp']);
            $this->mdp = password_hash($_POST["mdp"], PASSWORD_DEFAULT);
    
    
    
    
    
            if ($this->nom != '' && $this->prenom != '' && $this->email != '' && $this->mdp != '') {
                // je recupere les informations de l'utilisateur par email
                $user = $this->getUserByEmail();
                if($user == false) {
                     $this->setUser();
                     echo "<h1>Inscription OK</h1>";
                } else {
                    echo "<h1>Utilisateur existant";
                }
               
                
            } else {
                $erreur = "Merci d'entrer les informations correctement";
                include('view/inscription.php');
            }
        }
    
        public function authentification()
        {
    
            $this->email = trim($_POST['email']);
            $this->mdp = $_POST["mdp"];
    
    
            if ($this->email != '' && $this->mdp != '') {
                $user = $this->getUserByEmail();
    
                if (password_verify($this->mdp, $user["mdp"])) {
    
                    $_SESSION["nom"] = $user['nom'];
                    $_SESSION["prenom"] = $user['prenom'];
                    $_SESSION["email"] = $user['email'];
                    $_SESSION["id"] = $user['id'];
    
                    header('Location: index.php');
                    echo "<h1>Authentification OK</h1>";
                } else {
                    $erreur = "Email ou mdp incorrecte";
                    include('view/authentification.php');
                }
            } else {
                $erreur = "Merci d'entrer les informations correctement";
                include('view/authentification.php');
            }
        }
        public function monCompte()
        {
    
            $this->idUser = $_SESSION['id'];
            $user = $this->getUserById($this->idUser);
            include('view/monCompte.php');
        }  
        public function modifierMonCompte()
        {
    
            $this->idUser = $_SESSION['id'];
            $user = $this->getUserById($this->idUser);
            include('view/modifierMonCompte.php');
        }  
       public function modification()
        {
            $this->nom = trim($_POST['nom']);
            $this->prenom = trim($_POST['prenom']);
            $this->tel = trim($_POST['tel']);
            $this->email = trim($_POST['email']);
            $this->idUser = $_SESSION['id'];
    
    
            if ($this->nom != '' && $this->prenom != '' && $this->email != '') {
                // je recupere les informations de l'utilisateur par email
                
                     $this->updateUser();
    
    
                     $_SESSION["nom"] =  $this->nom;
                     $_SESSION["prenom"] = $this->prenom;
                     $_SESSION["email"] = $this->email; 
                     echo "<h1>modification OK</h1>";
                } else {
                   $user = $this->getUserByEmail();
                   $erreur = "Merci d'entrer des informations correctes";
                   include ('view/modifierMonCompte.php');
                }
               
                
                    } 
            }
    

    usersModel: 

    <?php
    include_once('bdd.php');
    class usersModel
    {
    private $bdd;
    public function __construct()
    {
        $this->bdd = Bdd::connexion();
    }
    public function setUser()
    {
        $insert = $this->bdd->prepare("INSERT INTO users(nom,prenom,tel,email,mdp)value(?,?,?,?,?)");
        return $insert->execute([$this->nom,$this->prenom,$this->tel,$this->email,$this->mdp]);
    }
    public function getUsers()
    {
        #...
    }
    public function getUserByEmail()
    {
        return $this->bdd->query("SELECT * FROM users WHERE email='$this->email'")->fetch(PDO::FETCH_ASSOC);
    }
    public function getUserById($id)
    {
        return $this->bdd->query("SELECT * FROM users WHERE id='$id'")->fetch(PDO::FETCH_ASSOC);
    }
    public function updateUser()
    {
        $insert = $this->bdd->prepare("UPDATE users SET nom=?,prenom=?,tel=?,email=? WHERE id=?");
        return $insert->execute([$this->nom,$this->prenom,$this->tel,$this->email,$this->idUser]);
    }
    
     }

    router.php: 

    <?php
    $page = @$_GET['page'];
    switch ($page) {
    case 'contact':
        include('view/contact.php');
        break;
    
    case 'inscription':
        include('view/inscription.php');
        break;
    
    case 'setInscription':
        include('controller/usersController.php');
        $inscription = new UsersController;
        $inscription->inscription();
        break;
        case 'login':
            include('view/login.php');
            break;
    
        case 'setAuth':
            include('controller/usersController.php');
            $authentification = new UsersController;
            $authentification->authentification();
            break;
            case 'monCompte':
                include('controller/usersController.php');
                $monCompte = new UsersController;
                $monCompte->monCompte();
                break;
        
            case 'modifierMonCompte':
                include('controller/usersController.php');
                $monCompte = new UsersController;
                $monCompte->modifierMonCompte();
                break;
        
            case 'modification':
                include('controller/usersController.php');
                $monCompte = new UsersController;
                $monCompte->modification();
                break;
        
                case 'ajouterArticle':
                    include('controller/articlesController.php');
                    $moncompte = new ArticlesController;
                    $moncompte->formAjoutArticles();
                break;
            case 'setArticle':
                include('controller/articlesController.php');
                $moncompte = new ArticlesController;
                $moncompte->ajoutArticle();
                break;
        
            case 'deconnexion':
                $_SESSION = array();
                header('Location: index.php');
                break;
        
            default:
                include('controller/articlesController.php');
                $articles = new ArticlesController();
                $articles->dernierArticles();
        }?>






    • Partager sur Facebook
    • Partager sur Twitter
      18 mars 2022 à 12:33:53

      Salut

      le traintement de formulaire d'inscription se fait dans le fichier inscription.php mais l'action dans formulaire est vers page index.php , peut être l'erreur vient de ça

      action="index.php?page=setInscription"



      • Partager sur Facebook
      • Partager sur Twitter
        18 mars 2022 à 13:00:24

        Salut,

        inscription.php et index.php sont dans le même répertoire ?

        • Partager sur Facebook
        • Partager sur Twitter
          19 avril 2022 à 18:13:06

          Asmitta a écrit:

          Salut,

          inscription.php et index.php sont dans le même répertoire ?

          Non, index.php n'est dans aucun répertoire, tandis que inscription.php est dans le répertoire view

          hous a écrit:

          Salut

          le traintement de formulaire d'inscription se fait dans le fichier inscription.php mais l'action dans formulaire est vers page index.php , peut être l'erreur vient de ça

          action="index.php?page=setInscription"


          Il y a forcément un souci avec ce chemin mais je ne comprend vraiment pas pourquoi....

          Désolée pour la lenteur de ma réponse j'étais en stage entre temps je n'avais plus du tout le temps pour mon projet perso





          -
          Edité par blstrk 19 avril 2022 à 18:21:53

          • Partager sur Facebook
          • Partager sur Twitter
            19 avril 2022 à 21:34:12

            Hello,

            Il y a beaucoup de chose à dire avec les codes que tu nous présentes. Voici les problèmes que j'ai rencontré :

            Utilisation du "@"

            Dans ton code j'ai vu que tu as utilisé à 2 reprise le "@" pour cacher les erreurs.Il ne faut surtout pas l'utiliser car dans 99.9% des cas, ces erreurs tu peux les traiter et tu le doit.

            Par exemple dans le fichier router.php tu as mis un "@" pour le $_GET['page'] car potentiellement cette case dans le tableau $_GET n'existe pas si on ne transmets pas de paramètre. Mais en réalité tu peux le gérer assez simplement avec une simple condition et voir même plus simplement depuis php 7 (qui est dispo depuis 6, 7 ans)

            Voici les étapes de transformation de ton @ pour le router :

            // Ce que tu as mis
            $page = @$_GET['page'];
            
            // La condition à faire
            $page = '';
            if (isset($_GET['page'])) {
                $page = $_GET['page'];
            }
            
            // On raccourci le code avec un ternaire
            $page = isset($_GET['page']) ? $_GET['page'] : '';
            
            // On raccorci encore plus avec l'operateur ?? de php 7
            $page = $_GET['page'] ?? '';

            Indentation et nommage

            Fait attention à la propreté du code et au nommage de tes éléments (variables, méthodes, classes, etc).

            Exemple le switch case du router qui s'indente de plus en plus alors qu'il devrait être au même niveau. Exemple aussi au niveau des classes, un coup tu as fais du PascalCase (UsersController, majuscules à chaque mot même au premier) et de l'autre du camelCase (usersModel, majuscules à chaque mot sauf au premier).

            Pour le coup, PHP à une convention (les PSR) qui indique clairement qu'il faut nommer les classes avec du PascalCase :

            Héritage bizarre

            Je vois que tu as fait un extends de usersModel pour le UsersController. Pourquoi ?

            L'héritage c'est vraiment quand on peut dire que un élement B est un A. Est-ce qu'un controller est un model ? Je ne pense pas :) Du coup aucune raison de faire de l'héritage ici, mais je pense que tu en as fait car tu as du avoir un problème en amont.

            Voici un exemple de comment faire un peu mieux à partir de ce que tu nous montre (dans le sens ou on peu largement faire mieux mais que cela fait intervenir des notions beaucoup plus avancée et le but n'est pas de te perdre non plus) :

            ./router.php :

            <?php
            /* Emplacement:  ./router.php */
            
            // Il faut éviter absolument le @ pour cacher les erreurs
            $page = $_GET['page'] ?? '';
            
            /**
             * Tu duplicode le code du call du controller
             *  -> fonction/méthode
             *
             * @param string $controller
             * @param string $method
             * @return void
             */
            function callControllerAction(string $controller, string $method): void
            {
                require_once __DIR__ . "/controllers/{$controller}.php";
            }
            
            switch ($page) {
                case '':
                    callControllerAction('ArticleController', 'lastPublished');
                    break;
                case 'contact':
                    // views au pluriels car il y en a plusieurs
                    require_once __DIR__ . '/views/contact.php';
                    break;
                case 'inscription':
                    // Au lieu de inscription je mets en anglais vu que le nom du dossier est en anglais
                    require_once __DIR__ . '/views/register.php';
                    break;
                case 'connexion':
                    require_once __DIR__ . '/views/login.php';
                    break;
                case 'post-inscription':
                    callControllerAction('AuthController', 'postRegister');
                    break;
                case 'post-connexion':
                    callControllerAction('AuthController', 'postLogin');
                    break;
                // Je te laisse le soin de faire le reste
                default:
                    // ERREUR 404, page not found
                    header('HTTP/1.1 404 Not Found', true, 404);
                    require_once __DIR__ . '/views/404.php';
                    break;
            }
            

            ./entities/User.php :

            <?php
            
            class User
            {
                public function __construct(
                    private int $id,
                    private string $firstname,
                    private string $lastname,
                    private string $email,
                    private string $phone,
                    private string $password,
                ) {
                }
            
                public function id(): int
                {
                    return $this->id;
                }
            
                public function firstname(): string
                {
                    return $this->firstname;
                }
            
                public function lastname(): string
                {
                    return $this->lastname;
                }
            
                public function email(): string
                {
                    return $this->email;
                }
            
                public function phone(): string
                {
                    return $this->phone;
                }
            
                public function password(): string
                {
                    return $this->password;
                }
            
                public function setPassword(string $password): void
                {
                    $this->password = password_hash($password, );
                }
            }
            

             ./models/UsersModel.php :

            <?php
            /* Emplacement:  ./models/UsersModel.php */
            
            require_once __DIR__ . '/DB.php';
            require_once __DIR__ . '/../entities/User.php';
            
            class UsersModel
            {
                public function __construct(
                    // PHP 7.4
                    private PDO $db
                ) {
                }
            
                public function insert(User $user): void
                {
                    $requestInsert = $this->db->prepare(
                        'insert into users (firstname, lastname, email, pass, phone)
                        values (:firstname, :lastname, :email, :password, :phone)'
                    );
                    $requestInsert->execute([
                        ':firstname' => $user->firstname(),
                        ':lastname' => $user->lastname(),
                        ':email' => $user->email(),
                        ':password' => $user->password(),
                        ':phone' => $user->phone(),
                    ]);
                }
            
                public function findByEmail(string $email): User|null
                {
                    $requestSelect = $this->db->prepare(
                        'select id, firstname, lastname, email, pass, phone
                            from users where email = :email limit 1'
                    );
                    $requestSelect->execute([':email' => $email]);
            
                    $userSQL = $requestSelect->fetch();
                    if ($userSQL === false) {
                        return null;
                    }
            
                    return new User(
                        $userSQL['id'],
                        $userSQL['firstname'],
                        $userSQL['lastname'],
                        $userSQL['email'],
                        $userSQL['phone'],
                        $userSQL['pass']
                    );
                }
            }
            
            $usersModel = new UsersModel(DB::connection());
            
            

            ./controllers/AuthController.php :

            <?php
            /* Emplacement:  ./controllers/AuthController.php */
            
            /** @var string $method */
            /** @var UsersModel $usersModel */
            
            require_once __DIR__ . '/../entities/User.php';
            require_once __DIR__ . '/../models/UsersModel.php';
            
            class AuthController
            {
                public function __construct(
                    private readonly UsersModel $usersModel,
                ) {
                }
            
                public function postRegister(): void
                {
                    $firstname = $_POST['firstname'] ?? null;
                    $lastname = $_POST['lastname'] ?? null;
                    $email = $_POST['email'] ?? null;
                    $password = $_POST['password'] ?? null;
                    $phone = $_POST['phone'] ?? null;
            
                    $errors = [];
                    if (empty($firstname) || empty($lastname) || empty($email) ||
                        empty($password) || empty($phone)) {
                        $errors[] = 'Merci de renseigner toutes les informations obligatoires !';
                    }
            
                    if (filter_var($email, FILTER_VALIDATE_EMAIL) === false) {
                        $errors[] = "Format incorrecte pour l'adresse mail";
                    }
            
                    if (mb_strlen($password) < 8) {
                        $errors[] = 'Le mot de passe doit comporter au moins 8 caractères';
                    }
            
                    if ($this->usersModel->findByEmail($email) !== null) {
                        $errors[] = "Un utilisateur existe déjà avec cette adresse mail";
                    }
            
                    if (!empty($errors)) {
                        $_SESSION['errors'] = $errors;
                        header('Location: /router.php?page=inscription');
                        exit();
                    }
            
                    $user = new User(0, $firstname, $lastname, $email, $phone, '');
                    $user->setPassword($password);
            
                    $this->usersModel->insert($user);
            
                    header('Location: /router.php?page=connexion');
                    exit();
                }
            }
            
            $controller = new AuthController($usersModel);
            $controller->$method();
            
            

            Voilà pour l'exemple de code avec juste la partie process de l'inscription d'un utilisateur. Je préviens que le code écrit n'a pas été testé et n'est qu'un exemple. C'est à toi après de bien réfléchir en amont à comment organiser ton code. Et n'oublie pas aussi que php évolue et que maintenant on est en php 8.1 et qu'il y a eu plein de nouveauté intéressante.

            • Partager sur Facebook
            • Partager sur Twitter
              13 mai 2022 à 15:30:30

              Bonjour à toi!

              Je t'avoue que je suis complètement débutante donc ton message avec autant de détails et explication me fait trop trop plaisir et je t'en remercie, 

              Après j'hésite à utiliser ton code, car c'est un projet pour mes exams, et j'y comprend pas grand chose ^^'

              du coup je pense le tester si je fais un site toute seule de mon côté les conseils je les prend sur, c'est juste que c'est vrai que ça va un peu vite pour moi, que veux tu dire quand tu dis qu'il faut éviter l'utilisation du @? Et aussi pour l'extends j'ai juste suivi le modèle d'un site qu'on avait fais avec un formateur, mais je vais me concentrer et réviser sur ton code ça c'est sur, merci pour ta patience et ta gentillesse!

              • Partager sur Facebook
              • Partager sur Twitter
                19 mai 2022 à 14:21:03

                J'ai réglé le problème de l'inscription c'était une toute petite erreur de syntaxe, j'avais aussi réussi à faire la connexion mais ça ne fonctionne plus
                • Partager sur Facebook
                • Partager sur Twitter

                Inscription et connexion

                × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
                × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
                • Editeur
                • Markdown