PDOException:

Rechercher

PDOException:

Par Bogard  -  10 reponses  -  Le 11/12/2019 21:50  -  Editer  - 

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

Par Cyrano  -  Le 12/12/2019 19:53  -  Haut de page  - 

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.

 
Par Bogard  -  Le 14/12/2019 16:03  -  Haut de page  - 

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...

 
Par Cyrano  -  Le 14/12/2019 19:45  -  Haut de page  - 

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.

 
Par Bogard  -  Le 15/12/2019 06:32  -  Haut de page  - 

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

 
Par Cyrano  -  Le 15/12/2019 08:41  -  Haut de page  - 

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 !

 
Par Bogard  -  Le 15/12/2019 14:27  -  Haut de page  - 

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;  

    }
 
Par Cyrano  -  Le 15/12/2019 15:03  -  Haut de page  - 

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 ?

 
Par Bogard  -  Le 15/12/2019 16:53  -  Haut de page  - 

ok Cyrano!
merci. Je vais essayer et je te tiens informer

 
Par Bogard  -  Le 24/12/2019 07:28  -  Haut de page  - 

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
 
Par Cyrano  -  Le 24/12/2019 07:42  -  Haut de page  - 

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.

 

Ajouter une réponse à la discussion

Seuls les membres connectés sont autorisés à poster dans les forums !

Identifiez-vous
Join |  ID/MDP? |