Problème d'insertion dans la base de données

Messages postés
4
Date d'inscription
mardi 29 octobre 2019
Statut
Membre
Dernière intervention
8 novembre 2019
-
Bonjour à tous,
Je suis un débutant en php et surtout côté orienté objet. Depuis deux semaines, j'ai des bugs, j'ai parcouru des forums mais pas de satisfaction: en un mot le problème demeure. Alors voici mes codes:

-----------------------------------------------
->HTML: page_fournisser.php
<?php 
    include_once '../config/connexion.php';
    include_once '../class/fournisseur.class.php';
       if(isset($_POST["ajouter"]) && isset($_POST["matri_four"])&& isset($_POST["name_four"]) && isset($_POST["raisonso"]) && 
          isset($_POST["adresse"]) && isset($_POST["contact"]) && isset($_POST["fax"]) && isset($_POST["adresse_email"])){
              
           $four = new Fournisseur($_POST["matri_four"], $_POST["name_four"], $_POST["raisonso"], $_POST["adresse"], $_POST["contact"], $_POST["fax"], $_POST["adresse_email"]);
           
            // Appel de la fonction 
           $four->InsertFournisseur();
           // Test sur la de fonction InsertFournisseur

                if($four=="OK"){
                    echo 'Bon enregistrement';
                }
                else{
                    echo "Echec d'enregistrement";
                }

       }

           
?>

<!doctype html>
<html>
 <head>
            <title>Fournisseurs</title>
            <link rel="stylesheet" href="../static/css/fondecran.css" type="text/css">
            <link rel="shortcut icon" href="../static/images/LogoCondicaf.ico" type="image/x-icon"> 
 </head>
        <body>
            <?php include_once 'page_menu.php'; ?>
                <form method="post" action="">
                    <center> 
                        <div id="div-ajout"><strong>    AJOUTER   FOURNISSEUR </strong></div>
                        <div id="div-user">
                                 <table>
                                     <tr>
                                         <td>N° fournisseur</td>
                                         <td><input type="text" name="matri_four" size="10"/></td>
                                     </tr>
                                           <tr><td> </td></tr>

                                     <tr>
                                         <td>Nom fournisseur</td> 
                                         <td><input type="text" name="name_four" size="25"/></td>
                                     </tr>
                                     <tr>
                                         <td>Raison sociale</td>
                                         <td><input type="text" name="raisonso" size="25"/></td>
                                     </tr>
                                     <tr>
                                         <td>Adresse</td> 
                                         <td><input type="text" name="adresse" size="25"/></td>
                                     </tr>
                                     <tr><td>Téléphone</td>
                                         <td><input type="text" name="contact" size="25"/></td>
                                     </tr>
                                     <tr>
<td>Fax</td>
                                         <td>
                                            <input type="text" name="fax" size="25"/>
                                         </td>
                                     </tr>
                                     <tr><td>Adresse email</td>
                                         <td><input type="email" name="adresse_email" size="25"/></td>
                                     </tr>
<tr>
      <td><input type="submit" name="ajouter"  value="Ajouter" /></td>
      <td><input type="reset" name="vider"  value="Vider" /></td>
        <td><input type="button" name="imprimer"  value="Imprimer" /></td>
         <td><input type="button" name="fermer"  value="Fermer" /></td>
   </tr>
                                 </table> 
        </form>
</body>
</html>


------------------------------------------
-> PHP: fournisseur.class.php

<?php

/*
Insertion de la base de données */
include_once '../config/connexion.php';

class Fournisseur {
    //put your code here
    private $matri_four;
    private $name_four;
    private $raisonso;
    private $adresse;
    private $contact;
    private $fax;
    private $adresse_email;
    private $bdd;


    public function __construct($matri_four, $name_four, $raisonso, $adresse, $contact, $fax, $adresse_email) {
        $matri_four = htmlspecialchars($matri_four);
        $name_four = htmlspecialchars($name_four);
        $raisonso = htmlspecialchars($raisonso);
         $adresse = htmlspecialchars($adresse);
         $contact = htmlspecialchars($contact);
             $fax = htmlspecialchars($fax);
           $adresse_email = htmlspecialchars($adresse_email);
           
          $this->matri_four = $matri_four."<br/>";
          $this->name_four = $name_four."<br/>";
          $this->raisonso = $raisonso."<br/>";
          $this->adresse = $adresse."<br/>";
          $this->contact = $contact."<br/>";
          $this->fax = $fax."<br/>";
          $this->adresse_email = $adresse_email."<br/>";
           $this->bdd = bdd();
        }
        
        public function InsertFournisseur() {
            $insertfour =   "INSERT INTO fournisseur(matri_four,name_four,raisonso,adresse,contact,fax, adresse_email)"
                          . "VALUES(:$this->matri_four,:$this->name_four,:$this->raisonso,:$this->adresse,:$this->contact,:$this->fax,:$this->adresse_email)";
                         
            $preparefour = $this->bdd->prepare($insertfour);
            
            $preparefour->execute(array(
                'matri_four' => $this->matri_four,
                'nom_four' => $this->name_four,
                'raisonso' => $this->raisonso,
                'adresse' => $this->adresse,
                'contact' => $this->contact,
                'fax' => $this->fax,
                'adresse_email' => $this->adresse_email));
            
                return 'OK';
        }
}


Et voici le message d'erreur qui s'affiche quand j'exécute le programme:
Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in C:\wamp64\www\gesmatinfo\class\fournisseur.class.php on line 52.

La ligne 52 c'est celle-là :'adresse_email' => $this->adresse_email));

J'ai formellement besoin de votre aide pour avancer dans la suite de mon programme.
Afficher la suite 

2 réponses

Messages postés
1
Date d'inscription
dimanche 3 novembre 2019
Statut
Membre
Dernière intervention
3 novembre 2019
0
Merci
Peut tu montrer le fichier connexion.php qui représente la connexion à la base de donnée
GETHALEX007
Messages postés
4
Date d'inscription
mardi 29 octobre 2019
Statut
Membre
Dernière intervention
8 novembre 2019
-
Bonjour tamsir55,

Vous m'avez demandé le code de connexion et j'ai mis du temps pour pouvoir vous répondre je m'en excuse. Le voici:

<?php
/*
  • Paramètres de connexion a la BDD
  • /

function bdd(){
try{
$logins = "root";
$mdp = "**********";

// Etablissement de la connexion
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=localhost; dbname=gesmateriel', $logins, $mdp, $pdo_options);

Test de la connexion bonne
if($bdd = "OK"){
echo "Connexion établie";
}
}
catch (Exception $ex) {
print "Erreur !: ".$ex->getMessage()."<br/>";
die();
}
return $bdd ;
}
Commenter la réponse de tamsir55
0
Merci
<?php
/*Paramètres de connexion a la BDD*/

//declaration de la fonction
function newInstanceDb(){
try{
$logins = "root";
$mdp = "**********";

// Etablissement de la connexion
$db = new PDO("mysql:host=localhost; dbname=gesmateriel; charset=UTF8", $logins, $mdp);
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

//Test de la connexion
    if($db != null){
         echo "Connexion établie !";
    }
}
catch (PDOException $ex) {
        die("Erreur! :".$ex->getMessage());
}
       return $db;
}
GETHALEX007
Messages postés
4
Date d'inscription
mardi 29 octobre 2019
Statut
Membre
Dernière intervention
8 novembre 2019
-
Bonjour Jlec,
Après avoir essayé les modifications que vous avez apportées aux codes de connexion, le problème d'insertion dans la base de données demeure toujours. Alors je conclus que le souci ne provient pas du fichier connexion.php mais plutôt ce fichier php

<?php

/*
Insertion de la base de données */
include_once '../config/connexion.php';

class Fournisseur {
//put your code here
private $matri_four;
private $name_four;
private $raisonso;
private $adresse;
private $contact;
private $fax;
private $adresse_email;
private $newInstanceDb;


public function __construct($matri_four, $name_four, $raisonso, $adresse, $contact, $fax, $adresse_email) {
$matri_four = htmlspecialchars($matri_four);
$name_four = htmlspecialchars($name_four);
$raisonso = htmlspecialchars($raisonso);
$adresse = htmlspecialchars($adresse);
$contact = htmlspecialchars($contact);
$fax = htmlspecialchars($fax);
$adresse_email = htmlspecialchars($adresse_email);

$this->matri_four = $matri_four."<br/>";
$this->name_four = $name_four."<br/>";
$this->raisonso = $raisonso."<br/>";
$this->adresse = $adresse."<br/>";
$this->contact = $contact."<br/>";
$this->fax = $fax."<br/>";
$this->adresse_email = $adresse_email."<br/>";
$this->newInstanceDb = newInstanceDb();
}

public function InsertFournisseur() {
$insertfour = "INSERT INTO fournisseur(matri_four,name_four,raisonso,adresse,contact,fax, adresse_email)"
. "VALUES(:$this->matri_four,:$this->name_four,:$this->raisonso,:$this->adresse,:$this->contact,:$this->fax,:$this->adresse_email)";

$preparefour = $this->newInstanceDb->prepare($insertfour);

$preparefour->execute(array(
'matri_four' => $this->matri_four,
'nom_four' => $this->name_four,
'raisonso' => $this->raisonso,
'adresse' => $this->adresse,
'contact' => $this->contact,
'fax' => $this->fax,
'adresse_email' => $this->adresse_email));

return 'OK';
}
}

Fatal error: Uncaught PDOException: SQLSTATE[HY093]: Invalid parameter number: parameter was not defined in C:\wamp64\www\gesmatinfo\class\fournisseur.class.php on line 51.
Commenter la réponse de Jlec