PDOException:
Bonjour à tous,ma grande absence est indépendante de ma volonté cependant j'ai un souci avec cette erreur qui s'affiche :
Fatal error: in C:\wamp\www\Users\Users\UsersLib\inscription.class.php on line 102
( ! ) PDOException: in C:\wamp\www\Users\Users\UsersLib\inscription.class.php on line 102
je n'arrive pas a trouvé la solution
je buter a un problème
j'ai deux fichiers
1. inscription.class.php
<?php
//namespace Library;
class Inscription
{
private $users_nom;
private $users_prenom;
private $users_pseudo;
private $users_email;
private $users_mdp;
private $users_mdp2;
private $bdd;
//private $erreurs = array();
public function __construct($users_pseudo,$users_nom,$users_prenom,$users_email,$users_mdp,$users_mdp2) {
$users_nom = htmlspecialchars($users_nom);
$users_pseudo = htmlspecialchars($users_pseudo);
$users_email = htmlspecialchars($users_email);
$this->users_nom = $users_nom;
$this->users_prenom = $users_prenom;
$this->users_pseudo = $users_pseudo;
$this->users_email = $users_email;
$this->users_mdp = $users_mdp;
$this->users_mdp2 = $users_mdp2;
$this->bdd = bdd();
//$this->erreurs = $array();
}
public function Verify()
{ //si la taille du pseudo soit sup a 4 et inf à 15
if(strlen($this->users_pseudo)> 4 and strlen($this->users_pseudo)<15)
{
$req = $this->bdd->prepare('SELECT id_users FROM users WHERE users_pseudo = ?');
$req->execute(array($this->users_pseudo));
$datas = $req->fetch();
if($datas){
$erreurs = 'Votre pseudo est déjà utilisé par un autre utilisateur';
return $erreurs;
}
if(strlen($this->users_nom)>3 and strlen($this->users_nom)>20)
{
if(strlen($this->users_prenom)>3 and strlen($this->users_prenom)>20)
{
//verifiction de l'adresse email
$syntaxe ='#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,6}$#';
if(preg_match($syntaxe, $this->users_email))
{
$req = $this->bdd->prepare('SELECT id_users FROM users WHERE users_email = ?');
$req->execute(array($this->users_email));
$datas = $req->fetch();
if($datas){
$erreurs = 'Cet email est déjà utilisé par un autre utilisateur';
return $erreurs;
}
if(strlen($this->users_mdp)> 9 and strlen($this->users_mdp)<15)
{
if(strlen($this->users_mdp)== strlen($this->users_mdp2))
{
return 'ok';
} else {
$erreurs ='les mots de passe ne correspondent pas';
return $erreurs;
}
} else {
$erreurs = 'le mot de passe doit contenir entre 9 et 15 caractères';
return $erreurs;
}
}else{
$erreurs = "la syntaxe de l'agresse n'est pas valide";
return $erreurs;
}
}else{
$erreurs = 'Le prenom doit contenir des caractères compris entre 5 et 15';
return $erreurs;
}
}else{
$erreurs = 'Le nom doit contenir des caractères compris entre 5 et 15';
return $erreurs;
}
} else {
$erreurs = "Votre pseudo (min 4) est trop court ou trop long";
return $erreurs;
}
}
public function Enregistrement(){
$req = $this->bdd->prepare('
INSERT INTO users(users_pseudo,users_nom,users_prenom,users_email,users_mdp)
VALUES(:users_pseudo,:users_nom,:users_prenom,:users_email,:users_mdp');
$this->users_mdp = password_hash($this->users_mdp, PASSWORD_BCRYPT);
$req->execute(array(
'users_pseudo'=> $this->users_pseudo,
'users_nom'=> $this->users_nom,
'users_prenom'=> $this->users_prenom,
'users_email'=> $this->users_email,
'users_mdp'=> $this->users_mdp,
));
return 1;
}
public function Session()
{
$req = $this->bdd->prepare('SELECT id_users FROM users WHERE users_pseudo =:users_pseudo');
$req->execute(array('users_pseudo' => $this->users_pseudo));
$datas = $req->fetch();
$_SESSION['id_users'] = $datas['id_users'];
$_SESSION['users_pseudo'] = $this->users_pseudo;
return 1;
}
//put your code here
}
et le fichier Inscription.php
<?php
session_start();
include '../func/bdd.php';
include './UsersLib/inscription.class.php';
//une personne qui est connecté avec les identifiant ne devrait plus et pas avoir
// accès à la page d'inscription à mois qu'il se soit déconnecter...
if(isset($_POST['users_pseudo'])and isset($_POST['users_nom'])and isset($_POST['users_prenom'])
and isset($_POST['users_email'])and isset($_POST['users_mdp'])and isset($_POST['users_mdp2']))
{
$users_pseudo = $_POST['users_pseudo'];
$users_nom = $_POST['users_nom'];
$users_prenom = $_POST['users_prenom'];
$users_email = $_POST['users_email'];
$users_mdp = $_POST['users_mdp'];
$users_mdp2 = $_POST['users_mdp2'];
$inscription = new Inscription($users_pseudo,$users_nom,$users_prenom, $users_email, $users_mdp, $users_mdp2);
$verify = $inscription->Enregistrement();
if($verify == 'ok')
{
if($inscription->Enregistrement())
{
if($inscription->Session()){
header('location:login.php');
} else {
$erreurs = $verify;
}
} else {
echo 'Une erreur inconue...';
}
} else {
$erreurs = $verify;
}
}
?>
<?php include '../inc/haut.php';?>
<?php if(isset($_SESSION['id_users']))
{
header('location:errors.php');// vous ne pouvez accéder à cette page
}else {
}?>
<h1 class="titre-affiche-personnel">S'Inscrire...</h1>
<p class="spech-sous-titre">Bonjour et Bienvenue sur la plate forme du
<a href="<?php echo ROOT_PATH;?>Contacts/quinous-sommes.php">
<i title="En savoir Plus!">mifs</i></a>
Veuillez remplir les champs pour commencer la prmière partie de votre inscription. Nous estimons que vous avez pris connaissance de la
<a href="<?php echo ROOT_PATH;?>Contacts/charte.php"><b><i title="En savoir Plus!">charte</i></b></a> du site</p>
<?php if(!empty($erreurs)): ?>
<div id="block-erreurs">
<p class="message-erreurs">Vous n'avez pas bien rempli le formulaire une erreur c'est glissée aucours de votre inscription,
Veuillez véréfier le(s) champ(s) suivant(s):</p>
<ol>
<?php foreach($erreurs as $erreurs):?>
<li><?= $erreurs; ?></li>
<?php endforeach; ?>
</ol>
</div>
<?php endif;?>
<div id="contenu">
<form action="inscription.php" method="post">
<div id="champ-block">
<label>Pseudo</label>
<input type="text" name="users_pseudo" class="champ-text" title="Tappez votre speudo pas de caractères spéciaux">
</div>
<div id="champ-block">
<label>Nom</label>
<input type="text" name="users_nom" title="Entrer votre nom de famille"class="champ-text">
</div>
<div id="champ-block">
<label>Prenom</label>
<input type="text" name="users_prenom" title="Entrer votre prenom" class="champ-text">
</div>
<div id="champ-block">
<label>Adresse E-mail</label>
<input type="text" name="users_email" title="Entrer votre adresse mail"class="champ-text">
</div>
<div id="champ-block">
<label>Mot de passe</label>
<input type="password" name="users_mdp" title="Entrer votre mot de passe"class="champ-text">
</div>
<div id="champ-block">
<label>Confirme Mot de passe</label>
<input type="password" name="users_mdp2" title="Retaper votre mot de passe"class="champ-text">
</div>
<div id="button-inscrire">
<input type="submit" value="S'inscrire" name="inscription" class="button-inscrire"/>
</div>
</form>
<?php ?>
</div>
<?php include '../inc/bas.php';?>
l'erreur est présenter au niveau du fichier inscription.class.php ligne 102 je ne comprends pas ce qu'il y a avec execute(). De Deux toute fois que je veux inserer une date en me servant de NOW() il signale une erreur... J'en appelle à votre expertise Merci d'avance
Réponses apportées à cette discussion
C'est la commande $req->execute qui contient une erreur.
Les paramètres sont mal indiqués, il manque les « : » comme dans la requête au dessus, ça devrait être :
$req->execute(array(
':users_pseudo' => $this->users_pseudo,
':users_nom' => $this->users_nom,
':users_prenom' => $this->users_prenom,
':users_email' => $this->users_email,
':users_mdp' => $this->users_mdp,
));
Et là ça devrait fonctionner.
Bojour Cyrano!
j'ai exactement fait ce que tu as montré « : », mais la même erreur est retourné
je ne sais quoi faire. je sais pas si mon ide qui fait problème ou mon server....
Si chez vous ça fonctionne alors je suis dans des gros problèmes.
merci de m'apporter des solutions...
Il faudrait indiquer ici le message d,erreur exact ainsi que la ligne de code correspondant à ce qui est indiqué avec le message d'erreur, incluant les 10 ou 15 lignes précédentes.
voila me message d'erreur exacte!
Fatal error: in C:\wamp\www\Users\Users\UsersLib\inscription.class.php on line 102( ! )
PDOException: in C:\wamp\www\Users\Users\UsersLib\inscription.class.php on line 102
voila mon fichier inscription.class.php
<?php
//namespace Library;
class Inscription
{
private $users_nom;
private $users_prenom;
private $users_pseudo;
private $users_email;
private $users_mdp;
private $users_mdp2;
private $bdd;
//private $erreurs = array();
public function __construct($users_pseudo,$users_nom,$users_prenom,$users_email,$users_mdp,$users_mdp2) {
$users_nom = htmlspecialchars($users_nom);
$users_pseudo = htmlspecialchars($users_pseudo);
$users_email = htmlspecialchars($users_email);
$this->users_nom = $users_nom;
$this->users_prenom = $users_prenom;
$this->users_pseudo = $users_pseudo;
$this->users_email = $users_email;
$this->users_mdp = $users_mdp;
$this->users_mdp2 = $users_mdp2;
$this->bdd = bdd();
//$this->erreurs = $array();
}
public function Verify()
{ //si la taille du pseudo soit sup a 4 et inf à 15
if(strlen($this->users_pseudo)> 4 and strlen($this->users_pseudo)<15)
{
$req = $this->bdd->prepare('SELECT id_users FROM users WHERE users_pseudo = ?');
$req->execute(array($this->users_pseudo));
$datas = $req->fetch();
if($datas){
$erreurs = 'Votre pseudo est déjà utilisé par un autre utilisateur';
return $erreurs;
}
if(strlen($this->users_nom)>3 and strlen($this->users_nom)>20)
{
if(strlen($this->users_prenom)>3 and strlen($this->users_prenom)>20)
{
//verifiction de l'adresse email
$syntaxe ='#^[\w.-]+@[\w.-]+\.[a-zA-Z]{2,6}$#';
if(preg_match($syntaxe, $this->users_email))
{
$req = $this->bdd->prepare('SELECT id_users FROM users WHERE users_email = ?');
$req->execute(array($this->users_email));
$datas = $req->fetch();
if($datas){
$erreurs = 'Cet email est déjà utilisé par un autre utilisateur';
return $erreurs;
}
if(strlen($this->users_mdp)> 9 and strlen($this->users_mdp)<15)
{
if(strlen($this->users_mdp)== strlen($this->users_mdp2))
{
return 'ok';
} else {
$erreurs ='les mots de passe ne correspondent pas';
return $erreurs;
}
} else {
$erreurs = 'le mot de passe doit contenir entre 9 et 15 caractères';
return $erreurs;
}
}else{
$erreurs = "la syntaxe de l'agresse n'est pas valide";
return $erreurs;
}
}else{
$erreurs = 'Le prenom doit contenir des caractères compris entre 5 et 15';
return $erreurs;
}
}else{
$erreurs = 'Le nom doit contenir des caractères compris entre 5 et 15';
return $erreurs;
}
} else {
$erreurs = "Votre pseudo (min 4) est trop court ou trop long";
return $erreurs;
}
}
public function Enregistrement(){
$req = $this->bdd->prepare('
INSERT INTO users(users_pseudo,users_nom,users_prenom,users_email,users_mdp)
VALUES(:users_pseudo,:users_nom,:users_prenom,:users_email,:users_mdp');
$this->users_mdp = password_hash($this->users_mdp, PASSWORD_BCRYPT);
$req->execute(array(
':users_pseudo'=> $this->users_pseudo,
':users_nom'=> $this->users_nom,
':users_prenom'=> $this->users_prenom,
':users_email'=> $this->users_email,
':users_mdp'=> $this->users_mdp,
)); /*Voici la ligne qui fait problème 102 J'ai aujouté les : comme tu as montré la dernière fois mais la même erreur persiste. en testant avec les : ou sans les : la meme erreur est retourné*/
return 1;
}
public function Session()
{
$req = $this->bdd->prepare('SELECT id_users FROM users WHERE users_pseudo =:users_pseudo');
$req->execute(array('users_pseudo' => $this->users_pseudo));
$datas = $req->fetch();
$_SESSION['id_users'] = $datas['id_users'];
$_SESSION['users_pseudo'] = $this->users_pseudo;
return 1;
}
//put your code here
}
voici ic mon fischier inscriprion.php
<?php
session_start();
include '../func/bdd.php';
include './UsersLib/inscription.class.php';
//une personne qui est connecté avec les identifiant ne devrait plus et pas avoir
// accès à la page d'inscription à mois qu'il se soit déconnecter...
if(isset($_POST['users_pseudo'])and isset($_POST['users_nom'])and isset($_POST['users_prenom'])
and isset($_POST['users_email'])and isset($_POST['users_mdp'])and isset($_POST['users_mdp2']))
{
$users_pseudo = $_POST['users_pseudo'];
$users_nom = $_POST['users_nom'];
$users_prenom = $_POST['users_prenom'];
$users_email = $_POST['users_email'];
$users_mdp = $_POST['users_mdp'];
$users_mdp2 = $_POST['users_mdp2'];
$inscription = new Inscription($users_pseudo,$users_nom,$users_prenom, $users_email, $users_mdp, $users_mdp2);
$verify = $inscription->Enregistrement();
if($verify == 'ok')
{
if($inscription->Enregistrement())
{
if($inscription->Session()){
header('location:login.php');
} else {
$erreurs = $verify;
}
} else {
echo 'Une erreur inconnue...';
}
} else {
$erreurs = $verify;
}
}
?>
<?php include '../inc/haut.php';?>
<?php if(isset($_SESSION['id_users']))
{
header('location:errors.php');// vous ne pouvez accéder à cette page
}else {
}?>
<h1 class="titre-affiche-personnel">S'Inscrire...</h1>
<p class="spech-sous-titre">Bonjour et Bienvenue sur la plate forme du
<a href="<?php echo ROOT_PATH;?>Contacts/quinous-sommes.php">
<i title="En savoir Plus!">mifs</i></a>
Veuillez remplir les champs pour commencer la prmière partie de votre inscription. Nous estimons que vous avez pris connaissance de la
<a href="<?php echo ROOT_PATH;?>Contacts/charte.php"><b><i title="En savoir Plus!">charte</i></b></a> du site</p>
<?php if(!empty($erreurs)): ?>
<div id="block-erreurs">
<p class="message-erreurs">Vous n'avez pas bien rempli le formulaire une erreur c'est glissée aucours de votre inscription,
Veuillez véréfier le(s) champ(s) suivant(s):</p>
<ol>
<?php foreach($erreurs as $erreurs):?>
<li><?= $erreurs; ?></li>
<?php endforeach; ?>
</ol>
</div>
<?php endif;?>
<div id="contenu">
<form action="inscription.php" method="post">
<div id="champ-block">
<label>Pseudo</label>
<input type="text" name="users_pseudo" class="champ-text" title="Tappez votre speudo pas de caractères spéciaux">
</div>
<div id="champ-block">
<label>Nom</label>
<input type="text" name="users_nom" title="Entrer votre nom de famille"class="champ-text">
</div>
<div id="champ-block">
<label>Prenom</label>
<input type="text" name="users_prenom" title="Entrer votre prenom" class="champ-text">
</div>
<div id="champ-block">
<label>Adresse E-mail</label>
<input type="text" name="users_email" title="Entrer votre adresse mail"class="champ-text">
</div>
<div id="champ-block">
<label>Mot de passe</label>
<input type="password" name="users_mdp" title="Entrer votre mot de passe"class="champ-text">
</div>
<div id="champ-block">
<label>Confirme Mot de passe</label>
<input type="password" name="users_mdp2" title="Retaper votre mot de passe"class="champ-text">
</div>
<div id="button-inscrire">
<input type="submit" value="S'inscrire" name="inscription" class="button-inscrire"/>
</div>
</form>
<?php ?>
</div>
<?php include '../inc/bas.php';?>
mon fichier bdd.php
function bdd()
{
try
{
$bdd = new PDO('mysql:host=localhost;dbname=userspdo', 'root','');
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
/$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_OBJ);/
}
catch (Exception $e)
{
die('Erreur'. $e->getMessage());
}
return $bdd;
}
vivement avoir une solution
Merci
Bogard, j'ai dit 10 ou 15 lignes, pas deux scripts complets. J'ai autre chose à faire que de me goinfrer un code complet pour trouver à quelle ligne correspond ce qu'indique le message.
Un peu de logique !
Bonjour Cyrano escuse-moi si j'ai pas compris ce que tu f=demande de faire, mais quand tu parles de 10 ou 15 lignes je ne comprends pas
le message d'erreur est celui-ci :
Fatal error: in C:\wamp\www\Users\Users\UsersLib\inscription.class.php on line 102( ! )
PDOException: in C:\wamp\www\Users\Users\UsersLib\inscription.class.php on line 102
public function Enregistrement(){
$req = $this->bdd->prepare('
INSERT INTO users(users_pseudo,users_nom,users_prenom,users_email,users_mdp)
VALUES(:users_pseudo,:users_nom,:users_prenom,:users_email,:users_mdp');
$this->users_mdp = password_hash($this->users_mdp, PASSWORD_BCRYPT);
$req->execute(array(
':users_pseudo'=> $this->users_pseudo,
':users_nom'=> $this->users_nom,
':users_prenom'=> $this->users_prenom,
':users_email'=> $this->users_email,
':users_mdp'=> $this->users_mdp,
)); /*Voici la ligne qui fait problème 102 J'ai aujouté les : comme tu as montré la dernière fois mais la même erreur persiste. en testant avec les : ou sans les : la meme erreur est retourné*/
return 1;
}
Ok, c'est mieux.
Pour corriger ce genre de problème, il faut identifier la nature de l'erreur rencontrée, on peut avoir des détails avec PDOStatement::errorInfo
En reprenant la fonction et en la détaillant un peu pour avoir d'abord une lecture plus simple et ensuite un retour d'erreur, je propose ceci :
public function Enregistrement()
{
$requete = 'INSERT INTO users(users_pseudo, users_nom, users_prenom, users_email, users_mdp)'.
' VALUES(:users_pseudo, :users_nom, :users_prenom, :users_email, :users_mdp';
$req = $this->bdd->prepare($rrequete);
$this->users_mdp = password_hash($this->users_mdp, PASSWORD_BCRYPT);
$parametres = array(
':users_pseudo' => $this->users_pseudo,
':users_nom' => $this->users_nom,
':users_prenom' => $this->users_prenom,
':users_email' => $this->users_email,
':users_mdp' => $this->users_mdp,
);
$retour = $req->execute($parametres);
if(true != $retour)
{
$erreurs = $req->errorInfo();
echo('<pre>'. PHP_EOL);
print_r($erreurs);
echo('</pre>'. PHP_EOL);
}
return $retour;
}
Et là, quel est le résultat ?
ok Cyrano!
merci. Je vais essayer et je te tiens informer
Bonjour Cyrano.
le script je l'ai essayé mais ce pendant il retourne toujours la même erreur
il est aussi vrai je ne comprends pas encore
if(true != $retour)
{
$erreurs = $req->errorInfo();
echo('<pre>'. PHP_EOL);
print_r($erreurs);
echo('</pre>'. PHP_EOL);
}
Fatal error: in C:\wamp\www\Users\Users\UsersLib\inscription.class.php on line 104
( ! ) PDOException: in C:\wamp\www\Users\Users\UsersLib\inscription.class.php on line 104
Call Stack
Ce serait mieux avec le message d'erreur complet : juste après « Call Stack », il y a normalement quelques lignes de messages pointant des endroits précis du code.