Fatal error: call to member function prepare() on nul

- - Dernière réponse : yg_be
Messages postés
8320
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 août 2019
- 12 août 2019 à 15:06
Bonjour, Bonjour à tous je rencontre un problème suivant dans Mon code php. fatal error: call to member function prepare() on nul
J'essaye juste de récupérer les informations saisies par le user



<?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>';
}

}
}
?>






Configuration: Android / Chrome 76.0.3809.89
Afficher la suite 

1 réponse

Messages postés
3642
Date d'inscription
lundi 16 juillet 2007
Statut
Contributeur sécurité
Dernière intervention
17 août 2019
1126
0
Merci
Bonjour,

$db contient-t-il une instance de PDO ? Que fait ton fichier database.php ?

Attention, si l'instance de PDO a été créée dans une fonction, il faut prendre en compte la portée des variables.
https://www.php.net/manual/fr/language.variables.scope.php
Pyraah
Messages postés
3642
Date d'inscription
lundi 16 juillet 2007
Statut
Contributeur sécurité
Dernière intervention
17 août 2019
1126 -
Comme je te l'ai dit, $db ici ne contient rien. Si tu as rendu ta variable statique dans une class, elle ne dépassera jamais le cadre de la class.
Tu peux le vérifier toi-même en faisant un petit var_dump($db); ça devrait te dire que c'est vide :).
Donc tu me conseil de rendre ma variable $db en global ?
yg_be
Messages postés
8320
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 août 2019
412 > Python997 -
bonjour,
moi je ferais
$db=connection_db();
, en adaptant, si nécessaire, database.php.
ton code est illisible, car non indenté.
que retourne la fonction recup_client()?
> yg_be
Messages postés
8320
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 août 2019
-
La fonction recup_client retourne les infos du client..
J'essaye cette methode je revient Vers vous
yg_be
Messages postés
8320
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
23 août 2019
412 > Python997 -
comment la fonction recup_client retourne-t'elle les infos du client?
Commenter la réponse de Pyraah