[RESOLU] Fatal error: Call to undefined method

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : [RESOLU] Fatal error: Call to undefined method

Re: Fatal error: Call to undefined method

par cfleurance » 09 févr. 2017, 11:47

Oh mon dieu... Merci énormément c'était effectivement ça le problème !!
Désolé d'être si pressé :x
Et pour expliquer brievement c'est pour ajouter une vente ou un dépannage ainsi que leur prix et la date du jour dans une base de données.
C'est une appliction de gestion de compte d'un magasins qui vend et répare des produits informatiques.

Re: Fatal error: Call to undefined method

par Spols » 09 févr. 2017, 11:40

Un peu de patience, nous ne sommes pas à ton service 24/24. un up 30 minutes plus tard ne va pas accèlerer les réponses.
De plus tu fourni beaucoup de données sans prémachage, nous n'avons aucune idée de comment fonctionne ce code.

je pense qu'il faut vérifier de ce coté là
$uneOpe = new EnCoursDAO($id, $designation, $prix, $type, $date);
EnCoursDAO::update($id, $uneOpe);
tu crée un objet EnCoursDAO ne faudrait il pas plutot un objet EnCours ?

Re: Fatal error: Call to undefined method

par cfleurance » 09 févr. 2017, 11:32

Personne n'a de réponses à me fournir ? Je suis vraiment bloqué :/

Fatal error: Call to undefined method

par cfleurance » 09 févr. 2017, 11:03

Après avoir chercher sur pas mal de forum je ne comprend toujours pas pourquoi j'ai cette erreur, car j'ai l'impression qu'il n'y a pourtant aucun problème dans mon code !
Voici mes fichiers ainsi que l'erreur que j'obtiens:

cSaisieEnCours.php :

Code : Tout sélectionner

<?php use modele\dao\EnCoursDAO; use modele\dao\Bdd; require_once __DIR__ . '/include/autoload.php'; Bdd::connecter(); $repInclude = './include/'; require($repInclude . "_init.inc.php"); // 1ère étape: Affichage de la première semaine. if (!isset($_REQUEST['action'])) { $_REQUEST['action'] = 'initial'; } $action = $_REQUEST['action']; // Aiguillage selon l'étape switch ($action) { case 'initial' : include("vues/SaisieEnCours/vObtenirEnCours.php"); break; case 'demanderSupprimerOpe': $id = $_REQUEST['id']; include("vues/SaisieEnCours/vSupprimerEnCours.php"); break; case 'demanderCreerOpe': include("vues/SaisieEnCours/vCreerModifierEnCours.php"); break; case 'demanderModifierOpe': $id = $_REQUEST['id']; include("vues/SaisieEnCours/vCreerModifierEnCours.php"); break; case 'validerSupprimerOpe': $id = $_REQUEST['id']; EnCoursDAO::delete($id); include("vues/SaisieEnCours/vObtenirEnCours.php"); break; case 'validerSupprimerTouteOpe': $uneOpe = EnCoursDAO::deleteAll(); include("vues/SaisieEnCours/vObtenirEnCours.php"); break; case 'validerCreerOpe':case 'validerModifierOpe': $id = $_REQUEST['id']; $designation = $_REQUEST['designation']; $prix = $_REQUEST['prix']; $type = $_REQUEST['type']; $date = $_REQUEST['date']; if ($action == 'validerCreerOpe') { verifierDonneesOpeC($id, $designation, $prix, $type, $date); if (nbErreurs() == 0) { $uneOpe = new EnCoursDAO($id, $designation, $prix, $type, $date); EnCoursDAO::insert($uneOpe); include("vues/SaisieEnCours/vObtenirEnCours.php"); } else { include("vues/SaisieEnCours/vCreerModifierEnCours.php"); } } else { verifierDonneesOpeM($id, $designation, $prix, $type, $date); if (nbErreurs() == 0) { $uneOpe = new EnCoursDAO($id, $designation, $prix, $type, $date); EnCoursDAO::update($id, $uneOpe); include("vues/SaisieEnCours/vObtenirEnCours.php"); } else { include("vues/SaisieEnCours/vCreerModifierEnCours.php"); } } break; } // Fermeture de la connexion au serveur MySql Bdd::deconnecter(); function verifierDonneesOpeC($id, $designation, $prix, $type, $date) { if ($id == "" || $designation == "" || $prix == "" || $type == "" || $date == "") { 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 (EnCoursDAO::isAnExistingId($id)) { ajouterErreur("La/Le $type $id existe déjà"); } } } } function verifierDonneesOpeM($id, $designation, $prix, $type, $date) { if ($id == "" || $designation == "" || $prix == "" || $type == "" || $date == "") { ajouterErreur('Chaque champ suivi du caractère * est obligatoire'); } }
vCreerModifierEnCours.php :

Code : Tout sélectionner

<?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><center>Ajouter un(e) vente / dépannage</center></h2>"; use modele\dao\EnCoursDAO; use modele\metier\EnCours; use modele\dao\Bdd; require_once __DIR__ . '/../../include/autoload.php'; Bdd::connecter(); setlocale(LC_TIME, 'fr_FR.utf8', 'fra'); // CRÉER OU MODIFIER UNE VENTE OU UN DEPANNAGE // S'il s'agit d'une création et qu'on ne "vient" pas de ce formulaire (on // "vient" de ce formulaire uniquement s'il y avait une erreur), il faut définir // les champs à vide sinon on affichera les valeurs précédemment saisies if ($action == 'demanderCreerOpe') { $id = ''; $designation = ''; $type = 1; $prix = ''; $date = '. strftime("%B %Y") . '; } // S'il s'agit d'une modification et qu'on ne "vient" pas de ce formulaire, il // faut récupérer les données sinon on affichera les valeurs précédemment // saisies if ($action == 'demanderModifierOpe') { $uneOpe = EnCoursDAO::getOneById($id); /* @var $uneOpe EnCours */ $designation = $uneOpe->getDesignation(); $type = $uneOpe->getType(); $prix = $uneOpe->getPrix(); $date = $uneOpe->getDate(); } // Initialisations en fonction du mode (création ou modification) if ($action == 'demanderCreerOpe' || $action == 'validerCreerOpe') { $creation = true; $messageOpe = "Nouvelle vente ou nouveau dépannage"; // Alimentation du message de l'en-tête $action = "validerCreerOpe"; } else { $creation = false; $messageOpe = "$designation"; // Alimentation du message de l'en-tête $action = "validerModifierOpe"; } // Déclaration du tableau des types echo " <form method='POST' action='cSaisieEnCours.php?'> <input type='hidden' value='$action' name='action'> <br> <table width='65%' cellspacing='0' cellpadding='0' class='tabNonQuadrille'> <tr class='enTeteTabNonQuad'> <td colspan='3'><strong><center>$messageOpe</center></strong></td> </tr>"; // En cas de création, l'id est accessible sinon l'id est dans un champ // caché if ($creation) { // On utilise les guillemets comme délimiteur de champ dans l'echo afin // de ne pas perdre les éventuelles quotes saisies (même si les quotes // ne sont pas acceptées dans l'id, on a le souci de ré-afficher l'id // tel qu'il a été saisi) echo ' <tr class="ligneTabNonQuad"> <td>&nbsp Id: </td> <td><input type="text" value="' . $id . '" name="id" size ="30" maxlength="8"></td> </tr>'; } else { echo " <tr> <td><input type='hidden' value='$id' name='id'></td><td></td> </tr>"; } echo ' <tr class="ligneTabNonQuad"> <td>&nbsp Designation: </td> <td><input type="text" value="' . $designation . '" name="designation" size="30" maxlength="32"></td> </tr> <input type="hidden" value="' . $date . '" name="date"> </tr> <tr class="ligneTabNonQuad"> <td>&nbsp Type: </td> <td>'; if ($type == 1) { echo " <input type='radio' name='type' value='Dépannage' checked> Dépannage <input type='radio' name='type' value='Vente'> Vente"; } else { echo " <input type='radio' name='type' value='Dépannage'> Dépannage <input type='radio' name='type' value='Vente' checked> Vente"; } echo ' <tr class="ligneTabNonQuad"> <td>&nbsp Valeur: </td> <td><input type="text" value="' . $prix . '" name="prix" size="30" maxlength="8"></td> </tr>'; echo '</div>'; echo "<br> <table align='right' cellspacing='15' cellpadding='0'> <br> <a href='cSaisieEnCours.php'><button type=button>Retour</button></a> <tr> <td align='right'><input type='submit' value='Valider' name='valider'> </tr> </table> </form>"; include("include/_fin.inc.php");
EnCours.class.php :

Code : Tout sélectionner

<?php namespace modele\metier; /* * To change this license header, choose License Headers in Project Properties. * To change this template file, choose Tools | Templates * and open the template in the editor. */ /** * Description of EnCours * * @author btssio */ class EnCours { private $id; private $designation; private $prix; private $type; private $date; function __construct($id, $designation, $prix, $type, $date) { $this->id = $id; $this->designation = $designation; $this->prix = $prix; $this->type = $type; $this->date = $date; } function getId() { return $this->id; } function getDesignation() { return $this->designation; } function getPrix() { return $this->prix; } function getType() { return $this->type; } function getDate() { return $this->date; } function setId($id) { $this->id = $id; } function setDesignation($designation) { $this->designation = $designation; } function setPrix($prix) { $this->prix = $prix; } function setType($type) { $this->type = $type; } function setDate($date) { $this->date = $date; } }
EnCoursDAO.class.php:

Code : Tout sélectionner

<?php namespace modele\dao; use modele\metier\EnCours; use PDO; /** * Description of SyntheseDAO * Classe métier : Synthese * @author Charly */ class EnCoursDAO implements IDAO { protected static function enregVersMetier($enreg) { $id = $enreg['ID']; $designation = $enreg[strtoupper('designation')]; $prix = $enreg[strtoupper('prix')]; $type = $enreg[strtoupper('type')]; $date = $enreg[strtoupper('date')]; $uneOpe = new EnCours($id, $designation, $prix, $type, $date); return $uneOpe; } /* Valorise les paramètre d'une requête préparée avec l'état d'un objet Synthese */ 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(':designation', $objetMetier->getDesignation()); $stmt->bindValue(':prix', $objetMetier->getPrix()); $stmt->bindValue(':type', $objetMetier->getType()); $stmt->bindValue(':date', $objetMetier->getDate()); } /* Insérer un nouvel enregistrement dans la table à partir de l'état d'un objet métier */ public static function insert($objet) { $requete = "INSERT INTO Operations VALUES (:id, :designation, :prix, :type, :date)"; $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 */ public static function update($id, $objet) { $ok = false; $requete = "UPDATE Operations SET DESIGNATION=:designation, PRIX=:prix, TYPE=:type, DATE=:date 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 Operations 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 Operations"; $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 Operations 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 une Synthese ayant déjà le même identifiant dans la BD * @param string id identifiant de la Synthese à tester * @return boolean =true si l'id existe déjà, =false sinon */ public static function isAnExistingId($id) { $requete = "SELECT COUNT(*) FROM Operations WHERE ID=:id"; $stmt = Bdd::getPdo()->prepare($requete); $stmt->bindParam(':id', $id); $stmt->execute(); return $stmt->fetchColumn(0); } public static function superSum() { $requete = "SELECT SUM(prix) FROM `Operations`"; $stmt = Bdd::getPdo()->prepare($requete); $ok = $stmt->execute(); return $stmt->fetchColumn(0); } }
Image

En esperant que vous puissiez m'apporter de l'aide car ça fait vraiment 2 jours que je bloque sur ce problème !

Merci