IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

fatal error: call to member function prepare() on null [PHP 7]


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2018
    Messages
    28
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 25
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Mars 2018
    Messages : 28
    Points : 22
    Points
    22
    Par défaut fatal error: call to member function prepare() on null
    Bonjour à tous je rencontre un problème suivant dans Mon code php.
    fatal error: call to member function prepare() on null
    Voici Mon code php.
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
     
     
    <?php
    session_start();
    require_once ('db/database.php');
    /**
     *fonction de récupération des données
     *
     * @param string nom du client
     * @param string prenom du client
     * @param string date de naissance du client
     * @param string telephone du client
     * @param string numero de permis du client
     * @param string date de délivrance
     * @param string boite postal
     * @param string adresse du client
     * @param string marque de l'auto
     * @param string immatriculation de l'auto
     * @param string chassis
     * @param string date de la première mise en circulation
     * @param string poids du véhicule
     * @param string valeur neuve de l'auto
     * @param string valeur venale de l'auto
     * @param string nombre de passagers
     */
     // déclaration de variable
     $NomErr=$PrenomErr=$DateNaisErr=$TelephoneErr=$NoPermisErr=$DateDelErr=$BPErr=$AdresErr="";
     $Nom=$Prenom=$DateNais=$Telephone=$NoPermis=$DateDel=$BP=$Adres="";
     
     $MarqueErr=$ImmatriculationErr=$ChassisErr=$datePrCirculationErr=$PoidsErr=$valeurNeuveErr=$valeurVenalErr=$nbrePassagersErr="";
     $Marque=$Immatriculation=$Chassis=$datePrCirculation=$Poids=$valeurNeuve=$valeurVenal=$NbrePassagers="";
     
     if($_SERVER["REQUEST_METHOD"] == "POST"){
     
        function test_input($data){
            $data=trim($data);
            $data=stripcslashes($data);
            $data=htmlspecialchars($data);
            return $data;
        }
        //reduction des chaînes
        $nom=$_POST['Nom_cl'];
        $prenom=$_POST['Prenom_cl'];
        $date=$_POST['DateNais_cl'];
        $telephone=$_POST['Telephone_cl'];
        $permis=$_POST['noPermis'];
        $datedel=$_POST['dateDelivrance'];
        $bp=$_POST['BoitePostal'];
        $adres=$_POST['adresse'];
        $marque=$_POST['marque'];
        $immat=$_POST['immatriculation'];
        $chassis=$_POST['Chassis'];
        $datepr=$_POST['datePrCirculation'];
        $poids=$_POST['Poids'];
        $valeurneuve=$_POST['valeurNeuve'];
        $valeurvenal=$_POST['valeurVenal'];
        $passagers=$_POST['nbrePassagers'];
     
        //fonction de récupération des informations du clients
        function recup_client(){
            //on vérifie si tout les champs ont bien été rempli
            if(!empty($nom)){
                $NomErr="veillez saisir le nom du client...";
            }else{
                $Nom=test_input(htmlspecialchars(trim($nom)));
                if(!preg_match("/^[a-zA-Z]*$/", $Nom)){
                    $NomErr="le nom doit contenir rien que des lettres et des espace";
                }
            }
            if(!empty($prenom)){
                $PrenomErr="veillez saisir le prenom du client...";
            }else{
                $Prenom=test_input(htmlspecialchars(trim($prenom)));
            }
            if(!empty($date)){
                $DateNaisErr="veillez saisir la date de naissance du client...";
            }else{
                $DateNais=test_input(htmlspecialchars(trim($date)));
            }
            if(!empty($telephone)){
                $TelephoneErr="veillez saisir le numero de téléphone du client...";
            }else{
                $Telephone=test_input(htmlspecialchars(trim($telephone)));
            }
            if(!empty($permis)){
                $NoPermisErr="veillez saisir le numéro de permis du client...";
            }else{
                $NoPermis=test_input(htmlspecialchars(trim($permis)));
            }
            if(!empty($datedel)){
                $DateDelErr="veillez saisir la date de délivrance...";
            }else{
                $DateDel=test_input(htmlspecialchars(trim($datedel)));
            }
            if(!empty($bp)){
                $BPErr="veillez saisir la boite postal du client...";
            }else{
                $BP=test_input(htmlspecialchars(trim($bp)));
            }
            if(!empty($adres)){
                $AdresErr="veillez saisir l'adresse du client...";
            }else{
                $Adres=test_input(htmlspecialchars(trim($adres)));
            }
            //variable contenant les différentes requêtes
            $select='SELECT ID_Cl FROM clients WHERE Nom_Cl=? ORDER BY Nom_Cl ASC ID_Cl ASC';
            $insert='INSERT INTO clients VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)';
            $donne=array();
            $sel=$db->prepare($select);
            $sel->execute(array($nom));
            $ins=$db->prepare($insert);
            $ins->execute( array('',$Nom,$Prenom,$DateNais,'',$Telephone,'','','',$NoPermis,$DateDel,$BP,$Adres,'','',''));
            $nbr=$ins->rowcount();
            unset($db);
            if(count($donne)>0){
             echo '<pres>';
                print_r($donne);
             echo '<pres>';
            }
        }
        return recup_client();
        //récupération des informations de l'automobile
        function recup_auto(){
            if(!empty($marque)){
                $MarqueErr="veillez saisir la marque de l'automobile...";
            }else{
                $Marque=test_input(htmlspecialchars(trim($marque)));
            }
            if(!empty($immat)){
                $ImmatriculationErr="veillez saisir l'immatriculation de l'automobile...";
            }else{
                $Immatriculation=test_input(htmlspecialchars(trim($immat)));
            }
            if(!empty($chassis)){
                $ChassisErr="veillez saisir le numéro du chassis de l'automobile...";
            }else{
                $Chassis=test_input(htmlspecialchars(trim($chassis)));
            }
            if(!empty($datepr)){
                $datePrCirculationErr="veillez saisir la date de la première mise en circulation...";
            }else{
                $datePrCirculation=test_input(htmlspecialchars(trim($datepr)));
            }
            if(!empty($poids)){
                $PoidsErr="veillez saisir le poids de l'automobile...";
            }else{
                $Poids=test_input(htmlspecialchars(trim($poids)));
            }
            if(!empty($valeurneuve)){
                $valeurNeuveErr="veillez saisir la valeur neuve de l'automobile...";
            }else{
                $valeurNeuve=test_input(htmlspecialchars(trim($valeurneuve)));
            }
            if(!empty($valeurvenal)){
                $valeurVenalErr="veillez saisir la valeur venal de l'automobile...";
            }else{
                $valeurVenal=test_input(htmlspecialchars(trim($valeurvenal)));
            }
            if(!empty($passagers)){
                $nbrePassagersErr="veillez saisir le nombre passagers de l'automobile...";
            }else{
                $NbrePassagers=test_input(htmlspecialchars(trim($passagers)));
            }
            //requête
            $select1='SELECT ID_Auto FROM automobile';
            $insert1='INSERT INTO automobile VALUES(?,?,?,?,?,?,?,?,?,?)';
            $req=$db->prepare($select1);
            $req->execute();
            $req1=$db->prepare($insert1);
            $req1->execute(array('',$Marque,$Immatriculation,$Chassis,$Poids,'',$valeurNeuve,$valeurVenal,$NbrePassagers));
            $donne=array();
            $nbr=$req1->rowcount();
            unset($db);
            if(count($donne)>0){
             echo '<pres>';
                print_r($donne);
             echo '<pres>';
            }
     
        }
     }
    ?>
    Merci d'avance pour votre aide

  2. #2
    Membre expert
    Avatar de Dendrite
    Femme Profil pro
    Développeuse informatique
    Inscrit en
    Juin 2008
    Messages
    2 129
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 58
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeuse informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2008
    Messages : 2 129
    Points : 3 627
    Points
    3 627
    Billets dans le blog
    8
    Par défaut
    Bonjour Python,

    Tu ne nous montre pas la structure de tes tables, ont-elles des id auto-increment ?
    Et enfin, tu ne nous mets pas le message d'erreur complet (donc avec la ligne qui coince)...
    Merci de rectifier tout ça...
    PDO, une soupe et au lit !
    Partir de la fin est un bon moyen de retrouver son chemin. Bibi - 2020

  3. #3
    Invité
    Invité(e)

  4. #4
    Expert confirmé
    Avatar de laurentSc
    Homme Profil pro
    Webmaster débutant perpétuel !
    Inscrit en
    Octobre 2006
    Messages
    10 386
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Webmaster débutant perpétuel !
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2006
    Messages : 10 386
    Points : 5 733
    Points
    5 733
    Billets dans le blog
    1
    Par défaut
    Salut,

    quelques remarques :

    - pour répondre à jreaux62, place un var_dump juste après ton include (donc après la ligne 5)

    - t'es sûr de tes tests if(!empty($xxx)) ? Le ! est-il pas en trop ?

    - A quoi elle sert la fonction recup_auto() définie dans la fonction recup_client(), placée après un return et jamais appelée ?

    - si tu utilisais des marqueurs nommés, tu te serais rendu compte que dans l'appel $req1->execute(array('',$Marque,$Immatriculation,$Chassis,$Poids,'',$valeurNeuve,$valeurVenal,$NbrePassagers));, il manque un paramètre...

    - une réponse à dendrite pourrait servir.
    Il vaut mieux viser la perfection et la manquer que viser l'imperfection et l'atteindre. - Bertrand Russell

    Si la discussion est résolue, merci de cliquer sur le bouton

  5. #5
    Invité
    Invité(e)
    Par défaut
    Vu.

    1-
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
        function recup_client(){
    ...
            $req=$db->prepare(...);
    ...
            unset($db);
    }
        function recup_auto(){
    ...
            $req=$db->prepare(...);
    ...
            unset($db);
    }
    On est A L'INTERIEUR de FONCTIONS.
    Or, $db N'est PAS défini DANS ces fonctions.

    Solution -> il faut ajouter :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        function ..............(){
            global $db;
    ...
    2-
    D'autre part, il n'est pas utile (ni recommandé ici !) de FERMER la connexion.


    [...]
    Beaucoup d'applications web utilisent des connexions persistantes aux serveurs de base de données.
    Les connexions persistantes ne sont pas fermées à la fin du script, mais sont mises en cache et réutilisées lorsqu'un autre script demande une connexion en utilisant les mêmes paramètres.
    Le cache des connexions persistantes vous permet d'éviter d'établir une nouvelle connexion à chaque fois qu'un script doit accéder à une base de données, rendant l'application web plus rapide.
    [...]
    Dernière modification par Invité ; 12/08/2019 à 15h09.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fatal error call to undefined function prepare
    Par Totze dans le forum PHP & Base de données
    Réponses: 25
    Dernier message: 09/06/2017, 07h45
  2. [XML] [XSLT] Fatal error: Call to undefined function xslt_create()
    Par fadex dans le forum Bibliothèques et frameworks
    Réponses: 5
    Dernier message: 05/07/2006, 12h34
  3. Réponses: 3
    Dernier message: 13/05/2006, 15h48
  4. Réponses: 3
    Dernier message: 21/03/2006, 14h21
  5. Réponses: 11
    Dernier message: 08/12/2005, 16h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo