Problème enregistrer données en BDD PDO

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Problème enregistrer données en BDD PDO

Re: Problème enregistrer données en BDD PDO

par mistermef » 08 avr. 2011, 22:47

Hmmm quel âne, j'avais oublié de créer un champ "hash"

Ca fonctionne, merci :p

Re: Problème enregistrer données en BDD PDO

par mistermef » 08 avr. 2011, 21:30

Merci beaucoup misterflo pour ces beugs !!

mais malheureusement toujours aucuns enregistrements :/ je pensais pourtant que ca aurait solutionné mais il doit rester un petit beug, je vais revoir ca en détail et vous reposte le code corrigé si jamais..

merci en tout cas :)

Re: Problème enregistrer données en BDD PDO

par misterflo » 08 avr. 2011, 12:20

Salut,
plusieurs petites erreurs.
Lorsque tu fais un try - catch il n'y pas besoin de faire un or die apres le new PDO, c'est le but du catch si la connexion ne réussi pas (d'ailleur c'est Exception avec un C).
try {
		$bdd = new PDO('mysql:host=XXXXX;dbname=XXXXX' , 'XXXXX', 'XXXXX')
		$bdd->exec('SET NAMES utf8');
}
catch(Exception $e){
	die('Erreur:'.$e->getMessage());
}
Ensuite lors de l'execution d'une requête (ligne 48-49), il ne faut pas mettre les deux points : du mot clé choisi dans la requête (ici :email)
$req = $bdd->prepare('SELECT id FROM newsletters WHERE email=:email');
$req->execute(array('email'=>$email));
//Dans le execute array() il ne faut pas mettre les deux points :
Et enfin ligne 68, tu refais une execution avec array, le dernier mot clé ne prend de virgule à la fin.
$req = $bdd->prepare('INSERT INTO newsletters (nom,pass,email,hash) VALUES (:nom,:pass,:email,:hash)');
$req->execute(array(
         'nom'=>$nom,
         'pass'=>sha1($pass),
         'email'=>$email,
         'hash'=>$hash //Ici pas de virgule
      ));

Problème enregistrer données en BDD PDO

par mistermef » 08 avr. 2011, 09:33

salut à tous

j'suis en train d'adapter un de mes scripts de création de compte que j'avais développé lors d'une formation, pour en faire un script d'inscription à une newsletter.

Mon problème est que le formulaire n'enregistre rien en base de données. Les champs sont pourtant ok, la vérification est ok. J'ai donc rentré manuellement une donnée dans ma table, pour vérifier si mon script se connectait bien à la BDD et lorsque je veux m'inscrire avec mon entrée existante il me dit bien que le mail est déjà utilisé !! Donc pas de prob de connexion à la bdd..

J'ai revu plusieurs fois mon code mais je dois passer à coté d'un détail !

Voici le code de mon inscription :

Code : Tout sélectionner

<?php ini_set('display_errors', 1); if(!empty($_POST)) { extract($_POST); $valid = true; if(empty($nom)) { $valid = false; $erreurnom = 'indiquez votre nom'; } if(!empty($nom) && strlen($nom)<3) { $valid = false; $erreurnom = '3 caractères minimum'; } if(empty($email)) { $valid = false; $erreuremail = 'Indiquez votre e-mail'; } if (!empty($email) && filter_var($email,FILTER_VALIDATE_EMAIL)===FALSE) { $valid = false; $erreuremail = 'Adresse e-mail invalide'; } // Connexion BDD try{ $bdd = new PDO('mysql:host=XXXXX;dbname=XXXXX' , 'XXXXX', 'XXXXX') or die(print_r($bdd->errorInfo())); $bdd->exec('SET NAMES utf8'); } catch(Exeption $e){ die('Erreur:'.$e->getMessage()); } // Verification si les champs sont utilisés $req = $bdd->prepare('SELECT id from newsletters WHERE email=:email'); $req->execute(array(':email'=>$email)); if($req->rowCount()>0) { $valid = false; $erreurid = 'E-mail déjà utilisé'; } $req->closeCursor(); // Si tout est OK if($valid) { $hash = md5(rand(0,1000)); $pass = rand(1000,5000); // on envoi en BDD $req = $bdd->prepare('INSERT INTO newsletters (nom,pass,email,hash) VALUES (:nom,:pass,:email,:hash)'); $req->execute(array( 'nom'=>$nom, 'pass'=>sha1($pass), 'email'=>$email, 'hash'=>$hash, )); $req->closeCursor(); $ok = 'Vous recevrez désormais notre lettre d\'informations !'; unset($nom); unset($email); } } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Administration</title> <link href="css/admin.css" type="text/css" rel="stylesheet" media="screen"> </head> <body> <div id="header"><h2>Administration</h2></div> <div id="site"> <div id="col-left"> <div id="title" class="left"><h2>Menu Admin</h2></div> <div id="content" class="left"></div> </div> <div id="content"> <div id="title" class="content"><h2>Newsletters</h2></div> <div id="content" class="content"> <h3>Formulaire d'inscription</h3> <form action="index.php" method="post"> <label for="nom">Nom :</label><br /> <input type="text" name="nom" value="" /><br /> <? if(isset($erreurnom)) echo $erreurnom; ?><br /><br /> <label for="email">Votre E-mail :</label><br /> <input type="text" name="email" value="" /><br /> <? if(isset($erreuremail)) echo $erreuremail; ?><br /><br /> <input type="submit" class="submit" value="Je m'inscris !" /> </form> <? if(isset($erreurid)) echo '<div class="erreurid"><p>' .$erreurid. '</p></div>' ;?> <? if(isset($ok)) echo '<div class="ok"><p>' .$ok. '</p></div>' ;?> </div> </div> </div> </body> </html>
Merci à tous pour vos futurs réponses !