Page 1 sur 1

creation d'un espace membre

Posté : 20 juin 2016, 01:31
par daiv
Bonjour,
Alors voila j'ai un problème avec la création de mon espace membre ,lorsque je m'inscrit avec différent utilisateur il ne s'ajoute pas a ma bases de donnée .j'aimerais savoir pourquoi ma page n'arrive pas a accédé a ma base de données ?J'utilise easy php .il m'arrive d'avoir le message d'erreur suivant Fatal error: Uncaught exception 'PDOException' with message 'could not find driver' in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\bla.php:2 Stack trace: #0 C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\bla.php(2): PDO->__construct('mysql:localhost...', 'root', '') #1 {main} thrown in C:\Program Files (x86)\EasyPHP-Devserver-16.1\eds-www\bla.php on line 2 .

Merci de votre attention


Code : Tout sélectionner

<?php $bdd = new PDO('mysql:host=127.0.0.1;dbname=linkedin', 'root', ''); //connection au serveur sql if(isset($_POST['forminscription'])) { $prenom = htmlspecialchars($_POST['prenom']);//htmlspecialchars enleve tout les caractere html afin d'eviter les injection de code $nom = htmlspecialchars($_POST['nom']); $mail = htmlspecialchars($_POST['mail']); $mdp = sha1($_POST['mdp']); //sha1 permet de cacher le mot de passe au cas ou une personne penetre la base de donnees elle n'aura pas accès au mot de passe on peut également utiliser md5 if(!empty($_POST['prenom']) AND !empty($_POST['nom']) AND !empty($_POST['mail']) AND !empty($_POST['mdp'] )) { //boucle erreur $pseudolength = strlen($pseudo); if($pseudolength <= 255) { $insertmbr = $bdd->prepare("INSERT INTO user(nom, prenom ,mail, motdepasse) VALUES(?, ?, ?)"); $insertmbr->execute(array($pseudo, $mail, $mdp)); $erreur = "Votre compte a bien été créé ! <a href=\"connexion.php\">Me connecter</a>"; } else { $erreur = "Votre pseudo ne doit pas dépasser 255 caractères !"; } } else { $erreur = "Tous les champs doivent être complétés !"; } } ?> <html> <head> <title>Linkedin</title> <meta charset="utf-8"> </head> <body> <div align="center" style="border:1px solid black;"> <h1>Distinguez-vous professionnellement</h1> <br /> <h4>Lancez-vous, c'est gratuit.<h4> <br /><br /> <form method="POST" action=""> <!--Creation d'un formulaire--> <table> <!--creation d'une table pour la presentation du formulaire--> <tr> <td align="right"> <label for="prenom">Prénom :</label> </td> <td> <input type="text" id="prenom" name="prenom" value="<?php if(isset($prenom)) { echo $prenom; } ?>" /> </td> </tr> <tr> <td align="right"> <label for="nom">Nom :</label> <br /> </td> <td> <input type="text" id="nom" name="nom" value="<?php if(isset($nom)) { echo $nom; } ?>" /> </td> </tr> <tr> <td align="right"> <label for="mail">E-mail :</label> </td> <td> <input type="email" id="mail" name="mail" value="<?php if(isset($mail)) { echo $mail; } ?>"/> <!--type email permet de verifier si on a bien une adresse mail et non pas un pseudo par exemple--> </td> </tr> <tr> <td align="right"> <label for="mdp">Mot de passe (6 caractères minimum) :</label> </td> <td> <input type="password" id="mdp" name="mdp" /> </td> </tr> <tr> <td></td> <td align="center"> <br /> En cliquant sur S'inscrire ,vous acceptez les <B>Conditions d'utilisation</B> ,la <B>Politique de confidentialité</B> ,et la<B>Politique relative aux cookies</B> de Linkedin <br /> <br /> <input type="submit" name="forminscription" value="S'inscrire"/> <!--creation d'une balise --> </td> </tr> </table> </form> <?php //creation d'une boucle si tout les champ ne sont pas complété permetent afficher un message d'erreur if(isset($erreur)) { echo $erreur; } ?> </div> </body> </html>

Re: creation d'un espace membre

Posté : 20 juin 2016, 09:23
par moogli
salut,

message d'erreur indique que l'extension pdo mysql n'est pas chargée.
si tu affiches un phpinfo(); dans ton navigateur tu pourras le confirmer simplement (un fichier qui contient simplement <?php phpinfo(); ?>).

pour l'activer il faut
- arreter le serveur web
- modifier le fichier php.ini et enlever le point virgule au début de la ligne ;extension=php_pdo_mysql.dll (dans mon cas c'est a ligne 882).

du coté de ton code il faut revoir la logique :
tu commences par appliquer la fonction htmlspecialchars aux éléments du tableau $_POST et d'encoder le mot de passe en sha1 Puis tu vérifies que les infos soient présente.
Si le formulaire est incomplet tu va avoir des erreurs sur les lignes suivantes (qui devraient être dans le if qui suis).
<?php
$prenom = htmlspecialchars($_POST['prenom']);//htmlspecialchars enleve tout les caractere html afin d'eviter les injection de code
   $nom = htmlspecialchars($_POST['nom']);
   $mail = htmlspecialchars($_POST['mail']);
   $mdp = sha1($_POST['mdp']); //sha1 permet de cacher le mot de passe au cas ou une personne penetre la base de donnees elle n'aura pas accès au mot de passe on peut également utiliser md5
Attention htmlspecialchars enlève rien, elle converties les choses comme les chevrons (< >) vers les entités html ( < > ) mais les choses sont toujours la (ceci dit cela peux être une bonne quand même le principe est bon c'est juste de la pinaille sur les termes ;) ).

pour le mot de passe il est préférable de ne plus utiliser sha1/ ou md5 ou alors d'utiliser un grain de sel
en php il y a les fonctions password_hash et password_verify pour te simplifier la vie ;)

Ta requête d'insertion n'est pas bonne
<?php
$insertmbr = $bdd->prepare("INSERT INTO user(nom, prenom ,mail, motdepasse) VALUES(?, ?, ?)");
tu indiques que tu veux créer une nouvelle ligne en fournissant quatre colonnes (nom, prenom ,mail, motdepasse) mais dans le "values" il n'y a que trois marqueurs (donc tu compte founir que trois valeurs) => BOOM ;)
<?php
$insertmbr->execute(array($pseudo, $mail, $mdp));
la variable pseudo n'existe pas => re BOOM ;)

il faut que tu utilises les variables : $nom, $prenom, $mail et $mdp.
Pour améliorer la lisibilitée du code tu peux utiliser les marqueurs nommés dans la construction de ta requêtes SQL.

@+

Re: creation d'un espace membre

Posté : 20 juin 2016, 10:18
par daiv
Ok merci je vais corriger les erreur .

Re: creation d'un espace membre

Posté : 20 juin 2016, 11:02
par daiv
J'ai corriger les erreur mais lorsque je clique sur s'inscrire rien ne se passe et rien ne s'ajoute a ma base de donnée.

Code : Tout sélectionner

<?php $bdd = new PDO('mysql:host=127.0.0.1;dbname=linkedin', 'root', ''); //connection au serveur sql if(isset($_POST['forminscription'])) { if(!empty($_POST['prenom']) AND !empty($_POST['nom']) AND !empty($_POST['mail']) AND !empty($_POST['mdp'] )) { $prenom = htmlspecialchars($_POST['prenom']); $nom = htmlspecialchars($_POST['nom']); $mail = htmlspecialchars($_POST['mail']); $mdp = sha1($_POST['mdp']); $prenomlenght = strlen($prenom); if($prenomlength <= 255) { $insertmbr = $bdd->prepare("INSERT INTO user(nom, prenom, mail, motdepasse) VALUES(?, ?, ?, ?)"); $insertmbr->execute(array($nom, $prenom, $mail, $mdp)); $erreur = "Votre compte a bien été créé ! <a href=\"connexion.php\">Me connecter</a>"; } else { $erreur = "Votre pseudo ne doit pas dépasser 255 caractères !"; } } else { $erreur = "Tous les champs doivent être complétés !"; } } ?> <html> <head> <title>Linkedin</title> <meta charset="utf-8"> </head> <body> <div align="center" style="border:1px solid black;"> <h1>Distinguez-vous professionnellement</h1> <br /> <h4>Lancez-vous, c'est gratuit.<h4> <br /><br /> <form method="POST" action=""> <!--Creation d'un formulaire--> <table> <!--creation d'une table pour la presentation du formulaire--> <tr> <td align="right"> <label for="prenom">Prénom :</label> </td> <td> <input type="text" id="prenom" name="prenom" value="<?php if(isset($prenom)) { echo $prenom; } ?>" /> </td> </tr> <tr> <td align="right"> <label for="nom">Nom :</label> <br /> </td> <td> <input type="text" id="nom" name="nom" value="<?php if(isset($nom)) { echo $nom; } ?>" /> </td> </tr> <tr> <td align="right"> <label for="mail">E-mail :</label> </td> <td> <input type="email" id="mail" name="mail" value="<?php if(isset($mail)) { echo $mail; } ?>"/> <!--type email permet de verifier si on a bien une adresse mail et non pas un pseudo par exemple--> </td> </tr> <tr> <td align="right"> <label for="mdp">Mot de passe (6 caractères minimum) :</label> </td> <td> <input type="password" id="mdp" name="mdp" /> </td> </tr> <tr> <td></td> <td align="center"> <br /> En cliquant sur S'inscrire ,vous acceptez les <B>Conditions d'utilisation</B> ,la <B>Politique de confidentialité</B> ,et la<B>Politique relative aux cookies</B> de Linkedin <br /> <br /> <input type="submit" name="forminscription" value="S'inscrire"/> <!--creation d'une balise --> </td> </tr> </table> </form> <?php //creation d'une boucle si tout les champ ne sont pas complété permetent afficher un message d'erreur if(isset($erreur)) { echo $erreur; } ?> </div> </body> </html>

Re: creation d'un espace membre

Posté : 20 juin 2016, 12:32
par moogli
erreur de typo entre $prenomlenght = strlen($prenom); et if($prenomlength <= 255)

met directement le strlen dans le if = if(strlen($prenom) <= 255) {

il faut vraiment que tu actives l'affichage des erreurs sur ton environnement de dev.
plusieurs possibilités :
- Tu n'as pas de fichier php.ini (j'en doutes mais bon) la distribution php est fournit avec un fichier php.ini-dev tu le renomme en php.ini et ça roule :)
- tu cherches dans ton fichier php.ini : error_reporting et tu met en valeur E_ALL
- tu actives l'affichage des erreurs :display_error = on

avec ça tu aurais eu un message qui indique l'erreur.


PS : attention a ce que tu "emprunte" comme code, les "linkedin" qui trainent ça fait moche ! (par exemple <title>Linkedin</title>)

@+