PHP

V2. creation de son site (class inscription)

Résolu

Bonjour,


je suis actuellement les vidéos du sitedudev version 2. Je suis exposé a un soucis que je ne trouve pas par rapport à la class inscription.


En effet il y a deux jours je pouvais inscrire sans aucuns soucis. Tout fonctionné bien mais, depuis, ça ne s'ajoute plus du tout à la BDD (mais il y a quand même la redirection à la page connexion qui s'effectue). J'ai surement du toucher à quelque chose mais je ne vois pas quoi.


class inscription :

<?php 
class Inscription 
{
    private $valid;
    private $err_pseudo;
    private $err_mail;
    private $err_password;

    public function verification_inscription($pseudo, $mail, $confmail, $password, $confpassword) 
    {   
        ////////////////////////////////////////////////////////////////////////////////////////////////////VARIABLE GLOBAL DB
        global $DB;

        ///////////////////////////////////////////////////////////////////////////////////////////////////VARIABLES D'ENTREES
        $pseudo         = (string) ucfirst(trim($pseudo));
        $mail           = (string) trim($mail);
        $confmail       = (string) trim($confmail);
        $password       = (string) trim($password);
        $confpassword   = (string) trim($confpassword);

        ///////////////////////////////////////////////////////////////////////////////////////////////////VARIABLES DECLAREES
        $this->err_pseudo       = (string) '';
        $this->err_mail         = (string) '';
        $this->err_password     = (string) '';
        $this->valid            = (boolean) true;

        //////////////////////////////////////////////////////////////////////APPEL D'UNE FONCTION A lINTERIEUR D'UNE FONCTION
        $this->verification_pseudo($pseudo);  
        $this->verification_mail($mail, $confmail);  
        $this->verification_password($password, $confpassword);  

        if ($this->valid) 
            {
                /////////////////////////////////////////////////////////////////////////////////////////INSERTION DANS LA BDD
                $crypt_password = password_hash($password, PASSWORD_ARGON2ID);
                $date_creation = date('Y-m-d H:i:s');
                $req = $DB->prepare("INSERT INTO utilisateur(pseudo, mail, mdp, date_creation, date_connexion) 
                  VALUES (?, ?, ?, ?, ?)");

                $req->execute(array($pseudo, $mail, $crypt_password, $date_creation, $date_creation));

                header('Location: connexion.php');
                exit;
            }
            ///////////////////////////////////////////////////C'EST UNE CLASSE , ON RETOURNE DONC LES ERREURS DANS UN TABLEAU
            return [$this->err_pseudo, $this->err_mail, $this->err_password];
    }
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////FONCTION POUR VERIFIER LE PSEUDO
    private function verification_pseudo($pseudo){
        global $DB;


        /*si le pseudo est vide*/
        if (empty($pseudo)) 
        {
            $this->valid = false;
            $this->err_pseudo = "Renseigner votre pseudo";
            

            /*limitation du nombre de characteres grapheme_strlen*/ 
          }elseif(strlen($pseudo) < 2){
            $this->valid = false;
            $this->err_pseudo = "Votre pseudo doit avoir plus de 2. actuellement :" . strlen($pseudo);


            }elseif(strlen($pseudo) > 25){
              $this->valid = false;
              $this->err_pseudo = "Votre pseudo ne doit pas avoir plus de 25 characteres. " . " (" .strlen($pseudo) . ")/25";

            }else{
                  /*requete pour le nom unique*/
                  $req = $DB->prepare("
                    SELECT id
                    FROM utilisateur
                    WHERE pseudo = ?");

                  /*execution de la requete*/
                  $req->execute(array($pseudo));

                  /*on reccupere les données avec fetch*/
                  $req = $req->fetch();

                  /*si on a quelque chose qui correspond a un ID*/
                  if (isset($req['id'])) 
                  {
                    /*on bloque l'etape pour dire que le pseudo existe*/
                    $this->valid = false;
                    $this->err_pseudo = "Ce pseudo est déjà pris.";
                  }
        }
    }
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////////////FONCTION POUR VERIFIER LE MAIL
    private function verification_mail($mail,$confmail){
        global $DB;
        /*si le mail est vide*/
        if (empty($mail)) 
        {
            $this->valid = false;
            $this->err_mail = "Renseigner votre mail";

        /*si le mail est different de la confirmation du mail*/
        }elseif(!filter_var($mail, FILTER_VALIDATE_EMAIL)) {
            $this->valid = false;
            $this->err_mail = "format mail : invalide";

        }elseif($mail <> $confmail){
            $this->valid = false;
            $this->err_mail = "la confirmation du mail est différent du mail";

        }else{
            /*requete pour le nom unique*/
            $req = $DB->prepare("
              SELECT id
              FROM utilisateur
              WHERE mail = ?");

            /*execution de la requete*/
            $req->execute(array($mail));

            /*on reccupere les données avec fetch*/
            $req = $req->fetch();

            /*si on a quelque chose qui correspond a un ID*/
            if (isset($req['id'])) 
            {
              /*on bloque l'etape pour dire que le mail existe*/
              $this->valid = false;
              $this->err_mail = "Ce mail est déjà pris.";
            }
        }
     }
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
////////////////////////////////////////////////////////////////////////////////////////FONCTION POUR VERIFIER LE MOT DE PASSE
    private function verification_password($password, $confpassword)
    {
        global $DB;
        if (empty($password)) 
        {
            $this->valid = false;
            $this->err_password = "Votre mot de passe est vide";

        }elseif($password <> $confpassword){

            $this->valid = false;
            $this->err_password = "Le mot de passe et la confirmation du mot de passe sont différents.";

        }
    }
}
?>


la page html :

<?php
/////////////////////////////////////////////////////////////////////////////////////////////////////////////CONNEXION A LA DB
require_once('include.php');
///////////////////////////////////////////////////////////////////////////////////////////////////////////VARIABLE DE SESSION
if (isset($_SESSION['id'])) 
{
  header('Location: index.php');
  exit;
}
//si on a des données
if (!empty($_POST)) 
{
  //on extrait les informations du post
  extract($_POST);
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  if (isset($_POST['inscription'])) 
  {
    //////////////////////////////////////////////////APPEL DE LA CLASSE INSCRIPTION ET UTILISATION DE LA CLASSE VERIFICATION 
    [$err_pseudo, $err_mail, $err_password] = $_Inscription->verification_inscription($pseudo, $mail, $confmail, $password, $confpassword); 
    /*ucfirst() = première lettre en majuscule*/
   
  }
}

?>

<!doctype html>
<html lang="fr">
  <head>
    <title>INSCRIPTION</title>
    <!--META--et--LINK-------------------------------------------------------------------------------------------------------->
    <?php 
      require_once('_head/meta.php');
      require_once('_head/link.php');
      require_once('_head/script.php');
    ?>
    <!------------------------------------------------------------------------------------------------------------------------>
  </head>




  <body>
    <!---------------------------------------------------------------------------------------------------------------------->
    <!---------------------------------------------------------------------------------------------------------------------->
    <!---------------------------------------------------------------------------------------------------------------------->
    <!--MENU---------------------------------------------------------------------------------------------------------------->
    <!---------------------------------------------------------------------------------------------------------------------->
    <!---------------------------------------------------------------------------------------------------------------------->
    <!---------------------------------------------------------------------------------------------------------------------->
    <?php 
      require_once('_menu/menu.php');
    ?>
    <!---------------------------------------------------------------------------------------------------------------------->
    <!---------------------------------------------------------------------------------------------------------------------->
    <!---------------------------------------------------------------------------------------------------------------------->
    <!--      -------------------------------------------------------------------------------------------------------------->
    <!---------------------------------------------------------------------------------------------------------------------->
    <!---------------------------------------------------------------------------------------------------------------------->
    <!---------------------------------------------------------------------------------------------------------------------->
    <div class="container">
      <h1>INSCRIPTION</h1>
      <!---------------------------------------------------------------------------------------------------------------------->
      <!---------------------------------------------------------------------------------------------------------------------->
      <!---------------------------------------------------------------------------------------------------------------------->
      <!--FORMULAIRE D'INSCRIPTION-------------------------------------------------------------------------------------------->
      <!---------------------------------------------------------------------------------------------------------------------->
      <!---------------------------------------------------------------------------------------------------------------------->
      <!---------------------------------------------------------------------------------------------------------------------->
      <form method="post" >
        <div class="mb-3">
          <label class="form-label">pseudo</label>
          <input class="form-control" type="text" name="pseudo" value="<?php if(isset($pseudo)){ echo $pseudo ;} ?>" placeholder="Renseigner votre pseudo">
          <?php if(isset($err_pseudo)){ echo "<div>" .$err_pseudo. "</div>"  ;} ?>
        </div>
        <!-------------------------------------------------------------------------------------------------------------------->
        <div class="mb-3">
          <label class="form-label">mail</label>
          <input class="form-control" type="email" name="mail" value="<?php if(isset($mail)){ echo $mail ;} ?>" placeholder="Renseigner votre mail">
          <?php if(isset($err_mail)){ echo "<div>" .$err_mail. "</div>"  ;} ?>
        </div>
        <!-------------------------------------------------------------------------------------------------------------------->
        <div class="mb-3">
          <label class="form-label">Confirmer le mail</label>
          <input class="form-control" type="email" name="confmail" value="<?php if(isset($confmail)){ echo $confmail ;} ?>" placeholder="confirmer l'email">
        </div>
        <!-------------------------------------------------------------------------------------------------------------------->
        <div class="mb-3">
          <label class="form-label">mot de pass</label>
          <input class="form-control" type="password" name="password" value="<?php if(isset($password)){ echo $password ;} ?>" placeholder="Renseigner votre mot de pass">
          <?php if(isset($err_password)){ echo "<div>" .$err_password. "</div>"  ;} ?>
        </div>
        <!-------------------------------------------------------------------------------------------------------------------->
        <div class="mb-3">
          <label class="form-label">confirmer le mot de pass</label>
          <input class="form-control" type="password" name="confpassword" value="" placeholder="confirmer votre mot de pass">
        </div>
        <!-------------------------------------------------------------------------------------------------------------------->
        <div class="mb-3">
          <button type="submit" name="inscription" class="btn btn-info">m'inscrire</button>
        </div>
      </form>
    </div>

    <?php 
      require_once('_footer/footer.php');
    ?>
  
  </body>

</html>


J'espère avoir un retour constructif de votre part en ésperant que j'ai fais ce qu'il fallait dans le sujet de ce post affin que l'on puisse vite m'aider.


Cordialement,


Jad.

584 vues
08 septembre 2022 à 7:48
Cette pub permet au site de vivre ...
Compte-supprimé
Le 14 Septembre 2022 à 08:48

Bonjour @Clouder ,


J'ai en effet une erreur :

Warning: PDOStatement::execute(): SQLSTATE[HY000]: General error: 1364 Field 'avatar' doesn't have a default value in C:\MAMP\htdocs\site2\_class\inscription.class.php on line 39

ok


J'avais en effet coché " privilège" au lieu de cocher " Null" dans la colone "avatar".


Maintenant tout fonctionne bien ! j'attend donc ton prochain tuto @Clouder .


Merci beaucoup :D


Cette pub permet au site de vivre ...

7 commentaires

Super ! 😁


Je termine mes vacances et ensuite je reprends les vidéos sur YouTube ✌️

Bonjour @Clouder ,


J'ai en effet une erreur :

Warning: PDOStatement::execute(): SQLSTATE[HY000]: General error: 1364 Field 'avatar' doesn't have a default value in C:\MAMP\htdocs\site2\_class\inscription.class.php on line 39

ok


J'avais en effet coché " privilège" au lieu de cocher " Null" dans la colone "avatar".


Maintenant tout fonctionne bien ! j'attend donc ton prochain tuto @Clouder .


Merci beaucoup :D


Salut @JAD ,


Si tu n'as pas d’entrées dans ta BDD mais que tu as bien la redirection alors fait ceci (du déboggage)


<?php

// ...

$crypt_password = password_hash($password, PASSWORD_ARGON2ID);
$date_creation = date('Y-m-d H:i:s');
$req = $DB->prepare("INSERT INTO utilisateur(pseudo, mail, mdp, date_creation, date_connexion) 
  VALUES (?, ?, ?, ?, ?)");
   
$req->execute(array($pseudo, $mail, $crypt_password, $date_creation, $date_creation));
 
// Tu commentes la ligne ci-dessous pour ne plus être redirigé et donc ne pas voir l'erreur .. :)
//header('Location: connexion.php');

// Tu ajoutes un petit echo 'ok'; pour être sur que ton code va jusque là
echo 'ok';

// Toujours laisser le 'exit' pour stopper le code
exit;

?>


Avec ça tu devrais obtenir une erreur. Ci ce n'est pas le cas alors il faut jouer avec le echo et le exit plus au dans le code.

re @Space001


oui possible que ce soit une erreur de frappe mais le soucis c'est que je ne me rappel pas d'avoir changer quelque chose.


et non je suis les nouvelles videos ici .


Oui je veux bien ^^


merci.

Re @JAD,


C'est peut-être une erreur de frappe...

J'ai des tutoriels avec code source téléchargeable mais je ne pense pas que ça soit le même que sur la vidéo (cf. ce tuto) 😞


Je vais demander à Clouder si tu veux :)

Salut @Space001 ,


je retape manuellement ce qu’il y a d’écrit sur la vidéo . ( en changeant parfois les noms des classes ou des choses comme ça mais sinon , je met pose , je recopie et j’appuie de nouveau sur play.)


Je voulais vérifier aussi au niveau du code à télécharger, mais je n’ai pas trouvé ici ou il se trouve.

Salut @JAD,


As-tu télécharger le code depuis l'espace tutoriel du site ? As-tu fais un simple copier-coller ou as-tu réécris manuellement le code d'après la vidéo ? 🤔

Cette pub permet au site de vivre ...