PHP

Problème lors de l'inscription a un formulaire

Résolu

Bonjour, étant en train de suivre la suite de vidéo sur la création d'un site de rencontre (à la 5ème vidéo) je me retrouve bloqué avec une erreur quand je valide le bouton inscrire, ce que j'écris ne s'affiche pas dans ma base de donnée.


Je ne vois pas d'ou peu venir cette erreur car ayant bien suivis l'explication il me semble que j'ai fais ce qu'il fallait faire.


J'utilise :


XAMPP Control Panel v3.2.4

Apache

MySQL


Voici l'erreur qui apparaît lors de l'inscription, la function prepare n'est pas comprise a ce que je vois :



Et ensuite la fameuse ligne 64 ou il est censé avoir un "problème" :


$req = $BDD->prepare("INSERT INTO utilisateur (pseudo, mail, password, date_naissance, date_inscription, date_connexion)VALUES (?, ?, ?, ?, ?, ?)");


Et voici tout mon code si ça ne suffit pas :


inscription.php


<?php
    session_start();
    include_once('db/connexiondb.php');
    
    if(!empty($_POST)){
        extract($_POST);
        $valid = (boolean) true;


        if(isset($_POST['inscription'])){
            $pseudo =(String) trim($pseudo);
            $mail =(String) strtolower(trim($mail));
            $password =(String) trim($password);
            $jour = (int) $jour;
            $mois = (int) $mois;
            $annee = (int) $annee;
            $date_naissance = (String) null;


            if(empty($pseudo)){
              $valid = false;
              $err_pseudo = "Veuillez renseigner ce champs !";
            }


            if(empty($mail)){
              $valid = false;
              $err_mail = "Veuillez renseigner ce champs !";
            }      
        
            if(empty($password)){
                  $valid = false;
                  $err_password = "Veuillez renseigner ce champs !";
            }
            
            $verif_jour = array(1, 2, 3);


            if(!in_array($jour, $verif_jour)){
                  $valid = false;
                  $err_jour = "Veuillez renseigner ce jour !";
            }


            $verif_mois = array(1, 2, 3);


            if(!in_array($mois, $verif_mois)){
                  $valid = false;
                  $err_mois = "Veuillez renseigner ce mois !";
            }            


            $verif_annee = array(1990, 2000, 3);


            if(!in_array($annee, $verif_annee)){
                  $valid = false;
                  $err_annee = "Veuillez renseigner ce annee !";
            }    
            
            if(!checkdate($mois, $jour, $annee)){
                $valid = false; 
                $err_date = "Date fausse";
            }else{
                $date_naissance = $annee . '-' . $mois . '-' . $jour;
            }


            if($valid){
              $date_inscription = date("Y-m-d h:m:s");
                
              $req = $BDD->prepare("INSERT INTO utilisateur (pseudo, mail, password, date_naissance, date_inscription, date_connexion)VALUES (?, ?, ?, ?, ?, ?)");


                $req->execute(array($pseudo, $mail, $password, $date_naissance, $date_inscription, $date_connexion));
            }
        }
    }
?>
<!DOCTYPE html>
<html lang="fr">
  <head>
    <meta charset="utf-8"/>
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    
    <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">


    <?php require_once('style.php'); ?>
    <title>Inscription</title> 
  </head>
  <body>
    <header>
      <?php 
        require_once('menu.php'); 
      ?> 


      <div class="container">
          <div class="row">


              <div class="col-sm-0 col-md-2 col-lg-3"></div>
              <div class="col-sm-12 col-md82 col-lg-6">
                <h1>
                  <strong>Inscription<strong>
                </h1>     
              </div>
          </div>
      </div>
      
      <form method="post">
          <section>
              <div>
                  <?php 
                    if(isset($err_pseudo)){
                        echo $err_pseudo;
                    }
                  ?>
                  <input type="text" name="pseudo" placeholder="Pseudo">
              </div>
              <div>
                  <input type="text" name="mail" placeholder="Mail">
              </div>
              <div>
                  <input type="password" name="password" placeholder="Mot de passe">
              </div>          
              <div>    
                  <select name="jour">
                      <option value="1">1</option>
                      <option value="2">2</option>
                  </select>
                  <select name="mois">
                      <option value="1">Janvier</option>
                      <option value="2">Février</option>
                  </select>
                  <select name="annee">
                      <option value="1990">1990</option>
                      <option value="2000">2000</option>
                  </select>                                    
              </div> 
          </section>


          <input type="submit" name="inscription" value="S'inscrire">
      </form>


      <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
    <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
    <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js" integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script>
</header>
</body>
</html>


connexiondb.php


<?php 
  class connexionDB {
      private $host = 'localhost'; // nom de l'host
      private $name = 'site1'; // nom de la base de donnée
      private $user = 'root'; // Utilisateur
      private $pass = ''; // Mot de passe 
      private $connexion;


      function __construc($host = null, $name = null, $user = null, $pass = null){
          if($host != null){
              $this->host = $host;
              $this->name = $name;
              $this->user = $user;
              $this->pass = $pass;
          }
          try{
              $this->connexion = new PDO('mysql:host=' . $this-> host . ';dbname=' . $this->name,
                  $this->user, $this->pass, array(PDO::MYSQL_ATTR_INIT_COMMAND =>'SET NAMES UTF8MB4', 
                  PDO::ATR_ERRMODE => PDO::ERRMODE_WARNING));
          }catch (PDOException $e){
              echo 'Erreur : Impossible de se connecter à la BDD !';
              die();
          }
      }


      public function connexion (){
          return $this->connexion;
      }
  }
  
  $DB = new connexionDB;
  $BDD = $DB->connexion();


?>


Si vous vous demandez, je n'ai pas mis "departement" tout est exactement pareil j'ai juste décidé que cette fonction était inutile pour mes besoins.


J'aurais besoin de votre aide si c'est possible car la je ne vois pas d'ou proviens cette erreur, j'ai essayé avec le code téléchargé sur le site et pareil ça me fais la même erreur...


Bonne fin de journée, cordialement.

583 vues
20 juillet 2020 à 18:34 (Édité)
Cette pub permet au site de vivre ...
Compte-supprimé
Le 20 Juillet 2020 à 19:12 (Édité)

Me re-voila !


J'ai finalement téléchargé le code et j'ai tout fais bon et du coup ça s'affiche bien dans ma BDD, j'avais du mal recopier à un endroit sans m'en rendre compte !


@florent72 ça devait être ça mais j'ai préféré prendre le code en le téléchargeant comme ça la maintenant je suis sur que ça marchera parfaitement.


Un grand merci pour votre aide en tout cas passez une bonne soirée en espérant ne pas avoir trop dérangé 😁

Cette pub permet au site de vivre ...

5 commentaires

Me re-voila !


J'ai finalement téléchargé le code et j'ai tout fais bon et du coup ça s'affiche bien dans ma BDD, j'avais du mal recopier à un endroit sans m'en rendre compte !


@florent72 ça devait être ça mais j'ai préféré prendre le code en le téléchargeant comme ça la maintenant je suis sur que ça marchera parfaitement.


Un grand merci pour votre aide en tout cas passez une bonne soirée en espérant ne pas avoir trop dérangé 😁

Salut @jimsfr !


Pour ma part je pense que c'est peut-être dû à un/des espace/s invisibles dans le code.

Cela arrive lorsque l'on recopie le code sans l'avoir télécharger 🙂

Préviens-nous si cela règle ton soucis👍

Re:


Pas de soucis ! 😉

Si tu as un problème d'utilisation avec les balises, ce topic t'expliques comment les utilisées 😉

Cette erreur t'indique que la variable à la ligne 64 qui devrait correspondre à ton objet PDO est nulle. Vérifies que ta variable est bien instanciée. Peut-être un simple oubli de include ou require en tête de ton code ?

Es-tu sûr également d'avoir correctement téléchargé le code en cliquant sur "Obtenir le code" puis "Télécharger le code" ? 🤔

Bonsoir @Jerem971 !


Tout d'abord merci pour ces informations, je pensais faire bien mais c'est vrai que c'est plus pratique de mettre tout le code sur ce post.


Alors petit récapitulatif de ce que j'ai fais en vain :


  1. J'ai désinstallé Wamp pour installer Xampp
  2. J'ai remis la base de donnée sur le MySQL de xampp sans soucis
  3. Après avoir remis ma destination, je retrouve le même soucis en voulant m'inscrire, j'ai la même erreur ainsi que les données ne s'enregistrent pas sur la bdd.


Donc la je ne sais pas je vais relire mon code mais je trouve ça bizarre quand même que ça ne marche toujours pas.. (ps : j'ai modifié la photo en mettant l'erreur avec xampp)

Hello @jimsfr,


Quelques indications concernant la rédaction de ton topic :


  • N'utilise plus NoëlShack comme hébergeur d'image car à partir du 21/11/2019, Noelshack sera dédié exclusivement à l'hébergement d'images pour une utilisation sur jeuxvideo.com. En conséquence, l'ensemble des images qui ne sont pas utilisées sur jeuxvideo.com seront supprimées de Noelshack. Dorénavant, tu utiliseras l'hébergeur GooPics et rien d'autres ! 😉
  • Poste ton code directement sur le site en utilisant la balise [CODE] (</>) (tu peux t'aider de ce topic pour les balises) ! Ne l'héberge pas sur un autre service en ligne... S'il est long ce n'est pas un problème !
  • J'ai déjà réédité ton topic pour effectuer les modifications, tu n'as rien à faire pour cette fois 😉


Concernant ton problème, premièrement, il faudra que tu désinstalles Wamp, voilà la raison 😉

Préviens-moi quand cela est fait 😉

Cette pub permet au site de vivre ...