Le titre est très clair mais étant débutant je n'arrive quand même pas à le résoudre.
Donc voici le message d'erreur que j'ai:
( ! ) Fatal error: Call to undefined method modele\dao\FournisseursDAO::getId() in /home/btssio/www/STAGE/ProjetA2DF/vues/GestionFournisseurs/vObtenirFournisseur.php on line 39
Et ensuite mes fichiers:
vObtenirFournisseurs.php
FournisseursDao.class.php:
Code : 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 <?php $repInclude = './include/'; require($repInclude . "_init.inc.php"); // page inaccessible si visiteur non connecté if (!estVisiteurConnecte()) { header("Location: cSeConnecter.php"); } require($repInclude . "_entete.inc.html"); require($repInclude . "_sommaire.inc.php"); //Division principale echo '<div id="contenu">'; echo "<h2>Gestion des Fournisseurs</h2>"; use modele\dao\FournisseursDAO; use modele\dao\Bdd; require_once __DIR__ . '/../../include/autoload.php'; Bdd::connecter(); // AFFICHER L'ENSEMBLE DES FOURNISSEURS // CETTE PAGE CONTIENT UN TABLEAU CONSTITUÉ D'1 LIGNE D'EN-TÊTE ET D'1 LIGNE PAR // FOURNISSEUR echo " <br> <table width='55%' cellspacing='0' cellpadding='0' class='tabNonQuadrille'> <tr class='enTeteTabNonQuad'> <td colspan='4'><strong>Fournisseurs</strong></td> </tr>"; $lesFournisseurs = FournisseursDAO::getAll(); // BOUCLE SUR LES FOURNISSEURS foreach ($lesFournisseurs as $unFournisseur) { $id = $unFournisseur->getId(); $nom = $unFournisseur->getNom(); echo " <tr class='ligneTabNonQuad'> <td width='52%'>$nom</td> <td width='16%' align='center'> <a href='cGestionFournisseurs.php?action=detailFournib&id=$id'> Voir détail</a></td> <td width='16%' align='center'> <a href='cGestionFournisseurs.php?action=demanderModifierFourni&id=$id'> Modifier</a></td>"; echo " </tr>"; } echo " </table> <br> <a href='cGestionFournisseurs.php?action=demanderCreerFourni'> Création d'un fournisseur</a >"; require($repInclude . "_fin.inc.php"); echo '</div>';
cGestionFournisseurs.php:
Code : 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 <?php namespace modele\dao; use modele\metier\Fournisseurs; use PDO; /** * Description of FournisseursDAO * Classe métier : Fournisseurs * @author btssio */ class FournisseursDAO implements IDAO { protected static function enregVersMetier($enreg) { $id = $enreg['ID']; $nom = $enreg['NOM']; $adresse = $enreg[strtoupper('adresseRue')]; $cdp = $enreg[strtoupper('codePostal')]; $ville = $enreg[strtoupper('ville')]; $tel = $enreg[strtoupper('tel')]; $email = $enreg[strtoupper('adresseElectronique')]; $paiement = $enreg[strtoupper('paiement')]; $unFourni = new FournisseursDAO($id, $nom, $adresse, $cdp, $ville, $tel, $email, $paiement); return $unFourni; } /** * Valorise les paramètre d'une requête préparée avec l'état d'un objet Fournisseurs * @param type $objetMetier un Fournisseurs * @param type $stmt requête préparée */ protected static function metierVersEnreg($objetMetier, $stmt) { // On utilise bindValue plutôt que bindParam pour éviter des variables intermédiaires $stmt->bindValue(':id', $objetMetier->getId()); $stmt->bindValue(':nom', $objetMetier->getNom()); $stmt->bindValue(':rue', $objetMetier->getAdresse()); $stmt->bindValue(':cdp', $objetMetier->getCdp()); $stmt->bindValue(':ville', $objetMetier->getVille()); $stmt->bindValue(':tel', $objetMetier->getTel()); $stmt->bindValue(':email', $objetMetier->getEmail()); $stmt->bindValue(':paiement', $objetMetier->getTempsPaiement()); } /** * Insérer un nouvel enregistrement dans la table à partir de l'état d'un objet métier * @param Fournisseurs $objet objet métier à insérer * @return boolean =FALSE si l'opérationn échoue */ public static function insert($objet) { $requete = "INSERT INTO Fournisseurs VALUES (:id, :nom, :rue, :cdp, :ville, :tel, :email, :paiement)"; $stmt = Bdd::getPdo()->prepare($requete); self::metierVersEnreg($objet, $stmt); $ok = $stmt->execute(); return ($ok && $stmt->rowCount() > 0); } /** * Mettre à jour enregistrement dans la table à partir de l'état d'un objet métier * @param string identifiant de l'enregistrement à mettre à jour * @param Fournisseurs $objet objet métier à mettre à jour * @return boolean =FALSE si l'opération échoue */ public static function update($id, $objet) { $ok = false; $requete = "UPDATE Fournisseurs SET NOM=:nom, ADRESSERUE=:rue, CODEPOSTAL=:cdp, VILLE=:ville, TEL=:tel, ADRESSEELECTRONIQUE=:email, PAIEMENT=:paiement WHERE ID=:id"; $stmt = Bdd::getPdo()->prepare($requete); self::metierVersEnreg($objet, $stmt); $stmt->bindParam(':id', $id); $ok = $stmt->execute(); return ($ok && $stmt->rowCount() > 0); } public static function delete($id) { $ok = false; $requete = "DELETE FROM Fournisseurs WHERE ID = :id"; $stmt = Bdd::getPdo()->prepare($requete); $stmt->bindParam(':id', $id); $ok = $stmt->execute(); $ok = $ok && ($stmt->rowCount() > 0); return $ok; } public static function getAll() { $lesObjets = array(); $requete = "SELECT * FROM Fournisseurs"; $stmt = Bdd::getPdo()->prepare($requete); $ok = $stmt->execute(); if ($ok) { while ($enreg = $stmt->fetch(PDO::FETCH_ASSOC)) { $lesObjets[] = self::enregVersMetier($enreg); } } return $lesObjets; } public static function getOneById($id) { $objetConstruit = null; $requete = "SELECT * FROM Fournisseurs WHERE ID = :id"; $stmt = Bdd::getPdo()->prepare($requete); $stmt->bindParam(':id', $id); $ok = $stmt->execute(); // attention, $ok = true pour un select ne retournant aucune ligne if ($ok && $stmt->rowCount() > 0) { $objetConstruit = self::enregVersMetier($stmt->fetch(PDO::FETCH_ASSOC)); } return $objetConstruit; } /** * Permet de vérifier s'il existe ou non un Fournisseur ayant déjà le même identifiant dans la BD * @param string $id identifiant du Fournisseur à tester * @return boolean =true si l'id existe déjà, =false sinon */ public static function isAnExistingId($id) { $requete = "SELECT COUNT(*) FROM Fournisseurs WHERE ID=:id"; $stmt = Bdd::getPdo()->prepare($requete); $stmt->bindParam(':id', $id); $stmt->execute(); return $stmt->fetchColumn(0); } /** * Permet de vérifier s'il existe ou non un Fournisseur portant déjà le même nom dans la BD * En mode modification, l'enregistrement en cours de modification est bien entendu exclu du test * @param boolean $estModeCreation =true si le test est fait en mode création, =false en mode modification * @param string $id identifiant du Fournisseur à tester * @param string $nom nom du Fournisseurs à tester * @return boolean =true si le nom existe déjà, =false sinon */ public static function isAnExistingName($estModeCreation, $id, $nom) { $nom = str_replace("'", "''", $nom); // S'il s'agit d'une création, on vérifie juste la non existence du nom sinon // on vérifie la non existence d'un autre fournisseur (id!='$id') portant // le même nom if ($estModeCreation) { $requete = "SELECT COUNT(*) FROM Fournisseurs WHERE NOM=:nom"; $stmt = Bdd::getPdo()->prepare($requete); $stmt->bindParam(':nom', $nom); $stmt->execute(); } else { $requete = "SELECT COUNT(*) FROM Fournisseurs WHERE NOM=:nom AND ID<>:id"; $stmt = Bdd::getPdo()->prepare($requete); $stmt->bindParam(':id', $id); $stmt->bindParam(':nom', $nom); $stmt->execute(); } return $stmt->fetchColumn(0); } }
Et ce à quoi ressemble l'arborescence:
Code : 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 <?php /** * Contrôleur : gestion des fournisseurs */ use modele\dao\FournisseursDAO; use modele\metier\Fournisseurs; use modele\dao\Bdd; require_once __DIR__ . '/include/autoload.php'; Bdd::connecter(); // 1ère étape (donc pas d'action choisie) : affichage du tableau des // fournisseurs if (!isset($_REQUEST['action'])) { $_REQUEST['action'] = 'initial'; } $action = $_REQUEST['action']; // Aiguillage selon l'étape switch ($action) { case 'initial' : include("vues/GestionFournisseurs/vObtenirFournisseur.php"); break; case 'detailFourni': $id = $_REQUEST['id']; include("vues/GestionFournisseurs/vObtenirDetailFournisseur.php"); break; case 'demanderSupprimerFourni': $id = $_REQUEST['id']; include("vues/GestionFournisseurs/vSupprimerFournisseur.php"); break; case 'demanderCreerFourni': include("vues/GestionFournisseurs/vCreerModifierFournisseur.php"); break; case 'demanderModifierFourni': $id = $_REQUEST['id']; include("vues/GestionFournisseurs/vCreerModifierFournisseur.php"); break; case 'validerSupprimerFourni': $id = $_REQUEST['id']; FournisseursDAO::delete($id); include("vues/GestionFournisseurs/vObtenirFournisseur.php"); break; case 'validerCreerFourni':case 'validerModifierFourni': $id = $_REQUEST['id']; $nom = $_REQUEST['nom']; $adresseRue = $_REQUEST['adresseRue']; $codePostal = $_REQUEST['codePostal']; $ville = $_REQUEST['ville']; $tel = $_REQUEST['tel']; $adresseElectronique = $_REQUEST['adresseElectronique']; $paiement = $_REQUEST['paiement']; if ($action == 'validerCreerFourni') { verifierDonneesFourniC($id, $nom, $adresseRue, $codePostal, $ville, $tel, $adresseElectronique, $paiement); if (nbErreurs() == 0) { $unFourni = new Fournisseurs($id, $nom, $adresseRue, $codePostal, $ville, $tel, $adresseElectronique, $paiement); FournisseursDAO::insert($unFourni); include("vues/GestionFournisseurs/vObtenirFournisseur.php"); } else { include("vues/GestionFournisseurs/vCreerModifierFournisseur.php"); } } else { verifierDonneesFourniM($id, $nom, $adresseRue, $codePostal, $ville, $tel, $adresseElectronique, $paiement); if (nbErreurs() == 0) { $unFourni = new Fournisseurs($id, $nom, $adresseRue, $codePostal, $ville, $tel, $adresseElectronique, $paiement); FournisseursDAO::update($id, $unFourni); include("vues/GestionFournisseurs/vObtenirFournisseur.php"); } else { include("vues/GestionFournisseurs/vCreerModifierFournisseur.php"); } } break; } // Fermeture de la connexion au serveur MySql Bdd::deconnecter(); function verifierDonneesFourniC($id, $nom, $adresseRue, $codePostal, $ville, $tel, $adresseElectronique, $paiement) { if ($id == "" || $nom == "" || $adresseRue == "" || $codePostal == "" || $ville == "" || $tel == "" || $adresseElectronique == "" || $paiement == "") { ajouterErreur('Chaque champ suivi du caractère * est obligatoire'); } if ($id != "") { // Si l'id est constitué d'autres caractères que de lettres non accentuées // et de chiffres, une erreur est générée if (!estChiffresOuEtLettres($id)) { ajouterErreur ("L'identifiant doit comporter uniquement des lettres non accentuées et des chiffres"); } else { if (FournisseursDAO::isAnExistingId($id)) { ajouterErreur("Le fournisseur $id existe déjà"); } } } if ($nom != "" && FournisseursDAO::isAnExistingName(true, $id, $nom)) { ajouterErreur("Le fournisseur $nom existe déjà"); } } if ($codePostal != "" && !estUnCp($codePostal)) { ajouterErreur('Le code postal doit comporter 5 chiffres'); } if (!filter_var($adresseElectronique, FILTER_VALIDATE_EMAIL)) { ajouterErreur('Le format de l\'adresse élèctronique n\'est pas valide'); } function verifierDonneesFourniM($id, $nom, $adresseRue, $codePostal, $ville, $tel, $adresseElectronique, $paiement) { if ($id == "" || $nom == "" || $adresseRue == "" || $codePostal == "" || $ville == "" || $tel == "" || $adresseElectronique == "" || $paiement == "") { ajouterErreur('Chaque champ suivi du caractère * est obligatoire'); } if ($nom != "" && FournisseursDAO::isAnExistingName(false, $id, $nom)) { ajouterErreur("Le fournisseur $nom existe déjà"); } if ($codePostal != "" && !estUnCp($codePostal)) { ajouterErreur('Le code postal doit comporter 5 chiffres'); } } function estUnCp($codePostal) { // Le code postal doit comporter 5 chiffres return strlen($codePostal) == 5 && estEntier($codePostal); }
En esperant que vous m'aidez à résoudre mon problème, merci d'avance !
Partager