Donnés dans la base de donnéé php
Résolu
Esther_3379
Messages postés
21
Date d'inscription
Statut
Membre
Dernière intervention
-
Esther_3379 Messages postés 21 Date d'inscription Statut Membre Dernière intervention -
Esther_3379 Messages postés 21 Date d'inscription Statut Membre Dernière intervention -
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>
A voir également:
- Donnés dans la base de donnéé php
- Base de registre - Guide
- Formules mathématiques de base - Télécharger - Études & Formations
- Easy php - Télécharger - Divers Web & Internet
- Formules excel de base - Guide
- Tnt base de données vide - Forum TNT / Satellite / Réception
8 réponses
Bonjour,
Commence par appliquer ceci : https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Et ça : https://forums.commentcamarche.net/forum/affich-37584947-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... )
Commence par appliquer ceci : https://forums.commentcamarche.net/forum/affich-37584941-php-pdo-gerer-les-erreurs
Et ça : https://forums.commentcamarche.net/forum/affich-37584947-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... )
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 ?
-- 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 */;
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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 } ?>
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>
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
Tu verras que le code que je t'ai donné fonctionne.
Sauf qu'il t'affiche une erreur :
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...
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...
Tu peux aussi modifier la class Client par celle la:
Qui, ne retournera plus de souci avec le $res ( qui etait celui du addClient ... )
<?php // Fichier Clients.class.php class Clients{ private $bdd; function __construct($bdd = null){ if(!empty($bdd)){ $this->bdd = $bdd; }else{ $this->bdd = getPDO(); } } public function getClientByMail($email){ $sql = "SELECT Email FROM clients WHERE Email = ? "; $datas = array($email); try{ $prep = $this->bdd->prepare($sql); $prep->execute($datas); $res = $prep->fetchAll(); return $res; }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 $res; }catch(Exception $e){ echo "Erreur SQL : " . $e->getMessage(); } } public function addClient($pseudo,$email,$mdp){ $sql = "INSERT INTO clients(Pseudo, Email, Motdepasse,avatar) VALUES(?,?,?,?)"; /** // Si php > 5.6 $mdp = password_hash($mdp); */ //$mdp = sha1($mdp); // A changer par la ligne au dessus si version php compatible ! $mdp = password_hash($mdp,PASSWORD_DEFAULT); $datas = array($pseudo,$email,$mdp,""); try{ $prep = $this->bdd->prepare($sql); $res = $prep->execute($datas); $newId = $this->bdd->lastInsertId(); // Retourne le numero auto-incrément de la table pour l'enregistrement créé return array('new_id'=>$newId); }catch(Exception $e){ echo "Erreur SQL : " . $e->getMessage(); } } // Fin de la class Clients }
Qui, ne retournera plus de souci avec le $res ( qui etait celui du addClient ... )
Au passage, pour l'authentification des clients sur ton site, tu pourras utiliser ( en l'ajoutant dans la class clients) la fonction
et dans ton code pour ton formulaire de login, y faire appel
/** * 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); }
Change le second en password2