Fatal error: Uncaught exception 'PDOException'
Fermé
Jhon
-
3 juin 2018 à 16:29
jordane45 Messages postés 38292 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 19 novembre 2024 - 3 juin 2018 à 17:50
jordane45 Messages postés 38292 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 19 novembre 2024 - 3 juin 2018 à 17:50
A voir également:
- Fatal error: Uncaught exception 'PDOException'
- Eespt technical error ✓ - Forum TNT / Satellite / Réception
- Hls.js error networkerror - fatal true - manifestloaderror ✓ - Forum Réseaux sociaux
- Error 0x80070643 - Accueil - Windows
- Cpu over temperature error - Forum Matériel & Système
- Fan error lenovo - Forum Refroidissement
2 réponses
yg_be
Messages postés
23337
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
18 novembre 2024
Ambassadeur
1 551
3 juin 2018 à 16:41
3 juin 2018 à 16:41
je pense que tu as l'erreur parce que tu fais un INSERT d'un doublon.
jordane45
Messages postés
38292
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
19 novembre 2024
4 704
Modifié le 3 juin 2018 à 17:50
Modifié le 3 juin 2018 à 17:50
Bonjour,
Déjà.. pour poster du code sur le forum, merci de le faire en utilisant les balises de code
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
Ensuite, pense à activer la gestion des erreurs PDO ainsi que les erreurs PHP.
Puis niveau organisation de ton code, commence par récupérer PROPREMENT les variables AVANT de les utiliser
et enfin.. rowCount ne s'utilise pas pour les requêtes SELECT.
A la place on fera un COUNT sur un fetchAll
Je t'invite vivement à lire (et à 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
Ce qui donne un truc du genre :
PS: Au passage... on n'utilise plus le SHA1 pour "cryper" les password.
A la place on va utiliser la fonction password_hash....
http://php.net/manual/fr/function.password-hash.php
Déjà.. pour poster du code sur le forum, merci de le faire en utilisant les balises de code
https://codes-sources.commentcamarche.net/faq/10686-le-nouveau-codes-sources-comment-ca-marche#balises-code
Ensuite, pense à activer la gestion des erreurs PDO ainsi que les erreurs PHP.
Puis niveau organisation de ton code, commence par récupérer PROPREMENT les variables AVANT de les utiliser
et enfin.. rowCount ne s'utilise pas pour les requêtes SELECT.
A la place on fera un COUNT sur un fetchAll
Je t'invite vivement à lire (et à 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
Ce qui donne un truc du genre :
<?php session_start(); //Affichage des erreurs PHP error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); //on inclus le fichier de connexion à la bdd require_once 'database.php'; //Récupération PROPRE des variables AVANT de les utiliser $pseudo = !empty($_POST['pseudo']) ? $_POST['pseudo'] ; NULL; $mail = !empty($_POST['mail']) ? $_POST['mail'] ; NULL; $mdp = !empty($_POST['mdp']) ? $_POST['mdp'] ; NULL; $mdp2 = !empty($_POST['mdp2']) ? $_POST['mdp2'] ; NULL; //début du traitement if(isset($_POST['submit'])){ if($pseudo && $mail && $mdp && $mdp2) { if($mdp == $mdp2) { //on verifie si le pseudo existe déjà $sql = "SELECT * FROM membre WHERE pseudo = ?"; $datas = array($pseudo); try{ $prep = $bdd->prepare($sql); $prep->execute($datas); }catch(Exception $e){ echo "Erreur : ".$e->getMessage(); die(); } $user = $prep->fetchAll(); $pseudoexist = count($user) >0 ? TRUE : FALSE ; if($pseudoexist){ $erreur = 'Ce pseudo est déjà utilisé'; }else { $mdp = sha1($_POST['mdp']); if(filter_var($mail, FILTER_VALIDATE_EMAIL)) { $sql ="INSERT INTO membre(pseudo, email, password) VALUES(?, ?, ?)"; $datas = array($pseudo, $mail, $mdp); try{ $prep = $bdd->prepare($sql); $insert = $prep->execute($datas); header('Location: connexion.php'); exit(); }catch(Exception $e){ echo "Erreur : ".$e->getMessage(); die(); } }else { $erreur = 'Votre adrese mail n\'est pas valide'; } } }else{ $erreur = 'Vos mots de pase ne corepondent pas' ; } } else { $erreur = "Merci de remplir tous les champs"; } if(!empty($erreur)){ echo "<div class='error'>". $erreur ."</div>"; } } ?>
PS: Au passage... on n'utilise plus le SHA1 pour "cryper" les password.
A la place on va utiliser la fonction password_hash....
http://php.net/manual/fr/function.password-hash.php
3 juin 2018 à 17:13
<?php
session_start();
include('database.php');
if(isset($_POST['submit'])){
if(!empty($_POST['pseudo']) AND !empty($_POST['mail']) AND !empty($_POST['mdp']) AND !empty($_POST['mdp2']))
{
$pseudo = htmlspecialchars($_POST['pseudo']);
$mail = htmlspecialchars($_POST['mail']);
$mdp = sha1($_POST['mdp']);
$mdp2 = sha1($_POST['mdp2']);
if($mdp == $mdp2)
{
if(filter_var($mail, FILTER_VALIDATE_EMAIL))
{
$insertmbr = $bdd->prepare("INSERT INTO membre(pseudo, email, password) VALUES(?, ?, ?)");
$insertmbr->execute(array($pseudo, $mail, $mdp));
header('Location: connexion.php');
$reqpseudo = $bdd->prepare("SELECT * FROM membre WHERE pseudo = ?");
$reqpseudo->execute(array($pseudo));
$pseudoexist = $reqpseudo->rowCount();
if($pseudoexist == 0)
{
}else
{
$erreur = 'Ce pseudo est déja utilisé';
}
}else
{
$erreur = 'Votre adrese mail n\'est pas valide';
}
}else
{
$erreur = 'Vos mots de pase ne corepondent pas' ;
}
}else
{
$erreur = "Merci de remplir tous les champs";
}
}
?>
3 juin 2018 à 17:17
3 juin 2018 à 17:22
3 juin 2018 à 17:25