Donnés dans la base de donnéé php [Résolu]

Signaler
Messages postés
22
Date d'inscription
lundi 11 mai 2020
Statut
Membre
Dernière intervention
24 mai 2020
-
Messages postés
22
Date d'inscription
lundi 11 mai 2020
Statut
Membre
Dernière intervention
24 mai 2020
-
bonsoir a tous. J'ai realisé un formulaire d'inscription et de connection mais le soucis est que lorsque je fini de remplir mes champs du formulaire les information ne vont pas dans ma base de donné or je suis bien redirigé vers mon form de connection après avoir remplir celui d'inscription . Je ne sais donc pas ou vont mes données puisque je suis redirigé sur ma page de connection comme je le desir. Je vous envoie mon fichier de connection a la bdd, mon fichier inscript.ph et mon fichier connection.php. Pouvez -m'aider svp? depuis une semaine je cherche solution en vains. NB: je suis une debutante ohh. merci d'avance

inscript.php


<?php
include'connection.php';

 if(isset($_POST['forminscription']))
{
    $pseudo = addslashes($_POST['pseudo']);
    $email= addslashes($_POST['email']);
    $mdp = sha1($_POST['password']);
    $mdp2 = sha1($_POST['password']);

    if((!empty($pseudo))  && (!empty($email)) && (!empty($mdp)) && (!empty($mdp2)))
    {
        if(strlen($pseudo)<=20)
        {
            if(filter_var($email, FILTER_VALIDATE_EMAIL))
            {
                if($mdp == $mdp2)
                {
                    $con = getPDO();
                    $rowEmail = countDatabaseValue($con, 'Email', $email);
                    if($rowEmail == 0)
                    {
                      $rowpseudo = countDatabaseValue($con, 'Pseudo', $pseudo);
                      if($rowpseudo == 0)
                      {
                     $insertmbr = $con->prepare("INSERT INTO clients(Pseudo, Email, Motdepasse) VALUES(?, ?, ?)");
                          $insertmbr ->execute([
                              $pseudo,
                               $email,
                              $mdp
                          ]);
                          $succesMessage ='votre compte a bien été créé!!!!';
                          header('location:login.php');
                      }
                      else{
                          $errorMessage = 'ce pseudo est deja utilisé...';
                      }
                    }
                    else{
                      $errorMessage = 'cet email existe déja...';
                  }
                }
                else{
                  $errorMessage = 'les mots de passe ne correspondent pas...';
              }
            }
            else{
              $errorMessage = 'votre email est invalide...';
          }
        }
        else{
          $errorMessage = 'ce pseudo est trop long...';
      }
    }
    else{
      $errorMessage = 'veuillez remplir tous les champs...';
  }
}
?>


<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>Input form</title>
    <link rel="stylesheet" href="style.css">
  </head>
  <body>
  <form action="" method="post">
        <div class="box">
          <h2>Formulaire Inscription</h2>

    <div class="inputBox">
        <input type="text" name="pseudo" required="">
        <label >pseudo</label>
    </div>
    <div class="inputBox">
        <input type="text" name="email" required="">
        <label>email</label>
    </div>
    <div class="inputBox">
        <input type="password" name="password" required="">
        <label>Motdepasse</label>
    </div>
    <div class="inputBox">
        <input type="password" name="password" required="">
        <label>ConfirmMotdepasse</label>
    </div>
        <input type="submit" name="forminscription" value="Je m'inscris">
        <!--<p>Apres inscription veillez cliquer sur<a href="registrer.php">Se connecter</a></p>-->
          Avez vous deja un compt?<a href="login.php" style="text-decoration: none; font-family: 'Play', sans-serif; color: yellow;"> log in</a>
          </form>
        <?php

if(isset($erreur))
  {
    echo $erreur;
  }
   ?>
      </div>


      </body>
    </html>





8 réponses

Messages postés
29573
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
22 septembre 2020
2 788
Bonjour,

Commence par appliquer ceci : http://www.commentcamarche.net/faq/46512-pdo-gerer-les-erreurs

Et ça : http://www.commentcamarche.net/faq/48399-php-gestion-des-erreurs-debogage-et-ecriture-du-code

Et, afin de pouvoir voir l'erreur, il faut que tu désactives les redirections. (sinon tu ne verras pas les messages d'erreurs... )


Messages postés
22
Date d'inscription
lundi 11 mai 2020
Statut
Membre
Dernière intervention
24 mai 2020
>
Messages postés
22
Date d'inscription
lundi 11 mai 2020
Statut
Membre
Dernière intervention
24 mai 2020

j'ai implémenté tout le code mais au niveau de inscript.php on m'affiche une erreur que je ne comprends pas. Voici la ligne en question et l'erreur


            $clientPseudo = $oClient->getClienByPseudo($pseudo);

Erreur fatale: erreur non détectée: appel à la méthode non définie Clients :: getClienByPseudo () dans C: \ wamp64 \ www \ phpmon \ ESTHER \ formu1 \ inscript.php à la ligne 29

Messages postés
22
Date d'inscription
lundi 11 mai 2020
Statut
Membre
Dernière intervention
24 mai 2020
>
Messages postés
22
Date d'inscription
lundi 11 mai 2020
Statut
Membre
Dernière intervention
24 mai 2020

j'ai cru que le probleme etait au niveau du nom de la variable j'ai donc changé mais meme erreur on m'a afficher donc j'ai juste remis les variables que vous avez envoyé et toujours erreur
Messages postés
29573
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
22 septembre 2020
2 788 >
Messages postés
22
Date d'inscription
lundi 11 mai 2020
Statut
Membre
Dernière intervention
24 mai 2020

J'ai mal copié/collé
c'est
 getClientByPseudo
( client avec un T )
D'ailleurs, faudrait corriger ma faute également sur le getClientByMail (dans la class ET dans le fichier inscript.php )
Messages postés
22
Date d'inscription
lundi 11 mai 2020
Statut
Membre
Dernière intervention
24 mai 2020
>
Messages postés
29573
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
22 septembre 2020

d'accord
Messages postés
22
Date d'inscription
lundi 11 mai 2020
Statut
Membre
Dernière intervention
24 mai 2020
>
Messages postés
29573
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
22 septembre 2020

bonsoir . j'ai eu a faire des corrections sur le code parcequ'on m'affichait des erreurs et je viens de finir il n'y a plus d'erreur qui s'affiche mais mes données ne vont toujours pas dans ma bdd. Avez-vous une idée a me proposer svp?
Messages postés
22
Date d'inscription
lundi 11 mai 2020
Statut
Membre
Dernière intervention
24 mai 2020

merci pour votre aide.
Messages postés
29573
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
22 septembre 2020
2 788

j'ai eu a faire des corrections sur le code parce qu'on m'affichait des erreurs

J'ai écrit le code de tête.. sans le tester. Donc c'est possible en effet qu'il y ai des erreurs

Par contre, il serait pas mal de nous montrer ce que tu as modifié...
Car, tu devrais avoir un message qui s'affiche...

Et puis, pour être sûr, pourrais tu nous montrer la structure de ta bdd ?


Messages postés
22
Date d'inscription
lundi 11 mai 2020
Statut
Membre
Dernière intervention
24 mai 2020

bonjour a tous. OK je vous envoie donc le fichier modifié et la structure de ma table
Messages postés
22
Date d'inscription
lundi 11 mai 2020
Statut
Membre
Dernière intervention
24 mai 2020


-- phpMyAdmin SQL Dump
-- version 4.9.2
-- https://www.phpmyadmin.net/
--
-- Hôte : 127.0.0.1:3306
-- Généré le :  mer. 20 mai 2020 à 10:40
-- Version du serveur :  10.4.10-MariaDB
-- Version de PHP :  7.3.12

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET AUTOCOMMIT = 0;
START TRANSACTION;
SET time_zone = "+00:00";


/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8mb4 */;

--
-- Base de données :  `mabase`
--

-- --------------------------------------------------------

--
-- Structure de la table `clients`
--

DROP TABLE IF EXISTS `clients`;
CREATE TABLE IF NOT EXISTS `clients` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `Pseudo` varchar(255) CHARACTER SET utf8 NOT NULL,
  `Email` varchar(255) CHARACTER SET utf8 NOT NULL,
  `Motdepasse` varchar(255) CHARACTER SET utf8 NOT NULL,
  `avatar` varchar(11) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=26 DEFAULT CHARSET=latin1;

--
-- Déchargement des données de la table `clients`
--

INSERT INTO `clients` (`id`, `Pseudo`, `Email`, `Motdepasse`, `avatar`) VALUES
(1, 'Datto', 'estelle', 'estelledatto.03@gmail.com', '0'),
(9, 'Dolou', 'shiva', '', '0'),
(3, 'gagou', 'antoine', 'gagouantoine@gmail.com', '0'),
(4, 'Datto', 'antoine', 'gagouantoine@gmail.com', '0'),
(5, 'Datto', 'antoine', 'estelledatto.03@gmail.com', '0'),
(6, 'malone', 'miriém', 'desouza@gmail.com', '0'),
(7, 'allelouya', 'amen', 'amen@gmail.com', '0'),
(8, 'Fryte', 'etyu', 'fre@gmail.com', '0'),
(10, 'vako', 'shiva', '', '0'),
(11, 'digbeuta', 'bonsoir', 'sdf@gmail.com', '0'),
(13, 'red', 'abib', 'aku@gmail.com', '0'),
(14, 'cft', 'cfao', 'cfa@gmail.com', '0'),
(15, 'hu', 'ju', 'gh@gmail.com', '0'),
(16, 'elie', 'aman', 'aman@gmail.com', '0'),
(18, 'maya', 'louise', 'may@gmail.com', '0'),
(20, 'junior', 'kausronlab@gmail.com', 'f3a3e91ead339309af864f4fe0a884db456d42ba', '0'),
(21, 'djao', 'djao@gmail.com', '7110eda4d09e062aa5e4a390b0a572ac0d2c0220', '0'),
(22, 'aime', 'aim@gmail.com', '37db39666e5ba650dd188e0a58d8af89f48f61cf', '0'),
(23, 'fala', 'fala@gmail.com', '88e6101730f4cf454196252e1e1e2e77fd30da4c', '0'),
(24, 'queenB', 'emrickyann@gmail.com', 'f0fd596f396d8fc32d5e4fe4c73c61fa2ac55c70', '0'),
(25, 'oumar', 'sy@hotmail.com', '8af56de68279cb6f5ed022f31af18b9fcdcc2e92', '0');
COMMIT;

/*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */;
/*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */;
/*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;


Messages postés
22
Date d'inscription
lundi 11 mai 2020
Statut
Membre
Dernière intervention
24 mai 2020

Voici ce que j'ai modifié dans le fichier Clients.class.php. J'ai modifié tout les return $res en return $this car cela m'affichais des erreurs..

 <?php
 class Clients{
  
  private $bdd;
  
  function __construct($bdd = null){
    if(!empty($bdd)){
      $this->bdd = $bdd;
    }else{
       $this->bdd = getPDO();
    }
  }
  
  
  public function getClientByEmail($email){
     $sql = "SELECT Email FROM clients WHERE Email = ? ";
     $datas = array($email);
     try{
        $prep = $this->bdd->prepare($sql);
        $prep->execute($datas);
        $res = $prep->fetchAll();
        return $this;
     }catch(Exception $e){
       echo "Erreur SQL : " . $e->getMessage();
     }
  }
  
  public function getClientByPseudo($pseudo){
     $sql = "SELECT Pseudo FROM clients WHERE Pseudo = ? ";
     $datas = array($pseudo);
     try{
        $prep = $this->bdd->prepare($sql);
        $prep->execute($datas);
        $res = $prep->fetchAll();
        return $this;
     }catch(Exception $e){
       echo "Erreur SQL : " . $e->getMessage();
     }
  }
  
  public function addClient($pseudo,$email,$mdp){
    $sql = "INSERT INTO clients(Pseudo, Email, Motdepasse) VALUES(?, ?, ?)";
    
    /*
       $mdp = password_hash($mdp);
    */
    $mdp = password_hash($mdp,PASSWORD_DEFAULT); // A changer par la ligne au dessus si version php compatible !
    
    
    $datas = array($pseudo,$email,$mdp);
    try{
        $prep = $this->bdd->prepare($sql);
        $prep->execute($datas);
         // Retourne le numero auto-incrément de la table pour l'enregistrement créé
        return $this;
     }catch(Exception $e){
       echo "Erreur SQL : " . $e->getMessage();
     }
  }
  
  // Fin de la class Clients
}
?>
Messages postés
29573
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
22 septembre 2020
2 788
J'ai modifié tout les return $res en return $this

N'importe quoi !!
Si ça te retourne une erreur... indique nous laquelle pour qu'on essaye de la corriger .. au lieu de retourner n'importe quoi qui ne donnera pas l'effet escompté !
Messages postés
22
Date d'inscription
lundi 11 mai 2020
Statut
Membre
Dernière intervention
24 mai 2020
>
Messages postés
29573
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
22 septembre 2020

excusez moi
Messages postés
22
Date d'inscription
lundi 11 mai 2020
Statut
Membre
Dernière intervention
24 mai 2020

et enfin le fichier inscript.php

<?php


// fichier inscript.php

 error_reporting(E_ALL);
 ini_set('display_errors',TRUE);
 ini_set('display_startup_errors', TRUE);

 require_once 'connection.php';
 $con = getPDO();


require_once "Clients.class.php";
//on instancie la class Clients
$oClient = new Clients($con);

if(isset($_POST['forminscription'])) {
  $pseudo = !empty($_POST['pseudo']) ? trim($_POST['pseudo']) : NULL;
  $email = !empty($_POST['email']) ? trim($_POST['email']) : NULL;
  $mdp = !empty($_POST['password']) ? trim($_POST['password']) : NULL;
  $mdp2 = !empty($_POST['password2']) ? $_POST['password2'] : NULL;
  if((!empty($pseudo))  && (!empty($email)) && (!empty($mdp)) && (!empty($mdp2))) {
     if(strlen($pseudo)<=20) {
       if($mdp == $mdp2){
        
          $clientMail = $oClient->getClientByEmail($email);
          if(empty($clientMail)){
            $clientPseudo = $oClient->getClientByPseudo($pseudo);
            if(empty($clientPseudo)){
              $addC = $oClient->addClient($pseudo,$email,$mdp);
              $succesMessage ='votre compte a bien été créé!!!!';
              //header('location:login.php'); // Désactivé le temps des tests
              exit;
            }else{
              $errorMessage = 'ce pseudo est déjà utilisé...';
            } 
          }else{
            $errorMessage = 'cet email existe déja...';
          }      
       }else{
          $errorMessage = 'les mots de passe ne correspondent pas...'; 
       }
    }else{
      $errorMessage = 'ce pseudo est trop long...';
    }
  }else{
    $errorMessage = 'veuillez remplir tous les champs...';
  }
}


    
?>



<!DOCTYPE html>
<html lang="en" dir="ltr">
  <head>
    <meta charset="utf-8">
    <title>Input form</title>
    <link rel="stylesheet" href="style.css">
  </head>
  <body>
  <form action="" method="post">
        <div class="box">
          <h2>Formulaire Inscription</h2>

    <div class="inputBox">
        <input type="text" name="pseudo" required="">
        <label >pseudo</label>
    </div>
    <div class="inputBox">
        <input type="text" name="email" required="">
        <label>email</label>
    </div>
    <div class="inputBox">
        <input type="password" name="password" required="">
        <label>Motdepasse</label>
    </div>
    <div class="inputBox">
        <input type="password" name="password2" required="">
        <label>ConfirmMotdepasse</label>
    </div>
        <input type="submit" name="forminscription" value="Je m'inscris">
        
          </form>
        <?php

if(isset($erreur))
  {
    echo $erreur;
  }
   ?>
      </div>


      </body>
    </html>
Messages postés
22
Date d'inscription
lundi 11 mai 2020
Statut
Membre
Dernière intervention
24 mai 2020

mais sans vous mentir je ne comprends pas bien l'action qui est mené par le code dans le fichier inscript de la ligne 16 a 31. Quand j'interprete avec ma petite connaissance ça ne passe pas bien dans mon esprit. Pouvez vous m'expliquer svp ces lignes que j'ai citées plus haut. Merci

Cordialement
Messages postés
29573
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
22 septembre 2020
2 788
Au passage.... si tu regardes ta fonction de connexion à la bdd ... ne vois tu pas une erreur ???!

Tu fais le "return $con" AVANT d'avoir activé l'affichage des erreurs PDO !

Donc en changeant comme ceci
function getPDO(){
  try{
    $con = new PDO('mysql:dbname=mabase; host=127.0.0.1', 'root', '');
    $con->exec("SET CHARACTER SET UTF8");
   
     // Activation des erreurs PDO
    $con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // mode de fetch par défaut : FETCH_ASSOC / FETCH_OBJ / FETCH_BOTH
     $con->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
     
    return $con;
 }catch(PDOException $e){
     var_dump($e);
     echo 'connection failed: ' or die('Erreur : ' . $e->getMessage());
 }
}


Tu verras que le code que je t'ai donné fonctionne.
Sauf qu'il t'affiche une erreur :

Erreur SQL : SQLSTATE[HY000]: General error: 1364 Field 'avatar' doesn't have a default value

Et oui.. tu n'as pas défini de valeur par défaut à ton champ "avatar" dans ta bdd...

Donc soit tu en définis un ...
Soi tu ajoutes l'avatar en parametre pour la création du client...

Messages postés
29573
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
22 septembre 2020
2 788 >
Messages postés
29573
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
22 septembre 2020

Au passage, pour l'authentification des clients sur ton site, tu pourras utiliser ( en l'ajoutant dans la class clients) la fonction
 /**
   * Fonction permettant de vérifier si l'utilisateur existe en fonction de son login et password
   */
  public function authentification($pseudo,$mdp){
    $user = $this->getClientByPseudo($pseudo);
    //verifie qu'il n'y a bien qu'un seul user avec ce pseudo..
    if(!empty($user) && count($user)==1){
      $mdpBdd = $user[0]['Motdepasse'];
      if (password_verify($mdp, $mdpBdd)){
        return $user;
      }else{
        return false;
      }
    }
  }


et dans ton code pour ton formulaire de login, y faire appel
$user = $oClient-> authentification($pseudo,$mdp);
if($user ){
   //ici ce que tu veux faire si le client est bien identifié..
   // par exemple 
   print_r($user);
}
Messages postés
22
Date d'inscription
lundi 11 mai 2020
Statut
Membre
Dernière intervention
24 mai 2020

D'accord. excusez moi encore
Messages postés
22
Date d'inscription
lundi 11 mai 2020
Statut
Membre
Dernière intervention
24 mai 2020

Voici ce qu'on m'affiche

Fatal error: Uncaught Error: Call to undefined method Clients::getClientByEmail() in C:\wamp64\www\phpmon\ESTHER\formu1\inscript.php on line 27

Messages postés
29573
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
22 septembre 2020
2 788 >
Messages postés
22
Date d'inscription
lundi 11 mai 2020
Statut
Membre
Dernière intervention
24 mai 2020

Regarde la class.
La fonction se nomme getClientByMail
J'ai sûrement modifié sans le faire exprès
Messages postés
22
Date d'inscription
lundi 11 mai 2020
Statut
Membre
Dernière intervention
24 mai 2020
>
Messages postés
29573
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
22 septembre 2020

MERCI MR JORDANE pour votre assistance mes données vont dans ma bdd et j'arrive a faire mes inscription et connection
Messages postés
22
Date d'inscription
lundi 11 mai 2020
Statut
Membre
Dernière intervention
24 mai 2020

bonsoir a tous et merci pour votre aide, mes données vont dans ma bdd et j'arrive a m'inscrire et me connecter correctement.