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

PHP & Base de données Discussion :

Lien classe bdd et manager


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2017
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2017
    Messages : 41
    Par défaut Lien classe bdd et manager
    Bonjour,

    Je rencontre un petit souci depuis hier soir que je n'arrive pas à résoudre.

    Dans un fichier de vue principale, j'ai une requête de création de commentaires, tel que :
    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
     
    <?php if(isset($commentaires))
    foreach ($commentaires as $commentaire): ?>
        <p><strong><?= $commentaire['auteur'] ?><br /></strong><?= $commentaire['date_b'] ?></p>
        <p><?= $commentaire['contenu']?></p>
        <hr />
    <?php endforeach; ?>
        <p> Pour poster un commentaire, veuillez remplir ces champs :</p>
        <form id="commentaire_form" action='entity/commentaireManager.php' method="POST" enctype="multipart/form-data">
            <div class="row">
                <label for="auteur">Votre pseudo:</label><br />
                <input id="auteur" class="input" name="auteur" type="text" value="" size="30" /><br />
            </div>
            <div class="row">
                <label for="commBillet">Votre commentaire:</label><br />
                <textarea id="commBillet" class="input" name="commBillet" rows="7" cols="30"></textarea><br />
            </div>
            <input id="submit_button" type="submit" value="Envoyer" />
        </form>
    </div>




    L'affichage des commentaires est ok. Par contre, quand je l'ajoute via la classe :
    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
     
    <?php
     
     
    class commentaireManager extends bddmanager
    {
     
        public function addCommentaire()
        {
            $bdd = $this->bdd;
                $query ='INSERT INTO t_commentaire (COM_DATE, COM_AUTEUR, COM_CONTENU) VALUES (NOW(), :auteur, :contenu)';
                $req = $bdd->prepare($query);
                $req->execute(array(
                    'COM_DATE' => $_POST['date'],
                    'COM_AUTEUR' => $_POST['auteur'],
                    'COM_CONTENU' => $_POST['commBillet'],
                ));
     
            header('Location: "index.php?action=billet&id=' . $_POST['id']);
        }
    }
    Le message d'erreur que je recois et que la classe bddmanager n'est pas trouvé. Or, elle existe bien, dans le même dossier, tel que :
    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
     
    <?php
     
    class bddmanager
    {
        protected $bdd;
        private $host = "localhost";
        private $login = "root";
        private $password = "";
     
        public function __construct()
        {
            $bdd = new PDO('mysql:host=' . $this->host . ';dbname=monblog;charset=utf8', $this->login, $this->password);
            $this->bdd = $bdd;
     
        }
     
    }
    Je rajoute juste que dans ma classe commentaireManager, j'ai une autre fonction qui marche très bien, donc l'appel à la base est bien réalisé dans celle-ci:
    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
     
        public function getCommentaires($id = null)
        {
            $bdd = $this->bdd;
            $query = 'SELECT COM_ID AS id, COM_DATE AS date_b, COM_AUTEUR AS auteur, COM_CONTENU AS contenu FROM T_COMMENTAIRE';
            ($id == null) ? $where = '' : $where = ' WHERE BIL_ID= :id ';
            $query .= $where;
            $query .= ' ORDER BY COM_ID desc ';
            ($id == null) ? $limit = 'LIMIT 0,3' : $limit = '';
            $query .= $limit;
            // echo $query; exit;
            $req = $bdd->prepare($query);
            if ($id) $req->bindParam(':id', $id);
            $req->execute();
     
            if ($req->rowCount() > 0) {
                while ($row = $req->fetch(PDO::FETCH_ASSOC)) {
                    // instance of a commentaire object
                    $commentaire = new Commentaire();
                    // hydrate manualy from bdd datas
                    $commentaire->hydrate($row);
     
                    $commentaires[] = $row;
                }
                return $commentaires;
            }
        }


    Une idée ?

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Je ne suis pas sûre que ça ait un rapport avec ton problème, mais il y a une erreur dans ta fonction :

    Les indexes du tableau de la fonction execute doivent être les marqueurs de la requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $query ='INSERT INTO t_commentaire (COM_DATE, COM_AUTEUR, COM_CONTENU) VALUES (NOW(), :auteur, :contenu)';
    $req = $bdd->prepare($query);
    $req->execute(array(
       ':auteur' => $_POST['auteur'],
       ':contenu' => $_POST['commBillet'],
    ));
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2017
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2017
    Messages : 41
    Par défaut
    Ok ça marche !

    Visiblement, ce n'est pas ça, j'ai pensé à un problème de PDO, mais même en encadrant ma requête d'un PDO::FETCH_ASSOC, j'ai toujours le même retour...

  4. #4
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    Est-ce qu'on peut voir le code qui utilise la fonction et le message d'erreur exact ?
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  5. #5
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2017
    Messages
    41
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2017
    Messages : 41
    Par défaut
    Oui, alors voici le code complet :

    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
    <?php
     
    include_once('_config.php');
     
    if(isset($_GET['id']))
    {
        $billet_id = $_GET['id'];
        $manager = new billetManager();
        $billet = $manager->getBilletById($billet_id);
        $commentaireassocie = new commentaireManager;
        $commentaires = $commentaireassocie->getCommentaires($billet_id);
    }
    else {
        $billet = new Billet;
        $commentaires = new Commentaire;
    }
     
    if(isset($_POST['id']))
    {
        $comm_id = $_POST['id'];
        $ajoutcommentaire = new commentaireManager;
        $addCommentaire = $ajoutcommentaire->addCommentaire($comm_id);
    }
     
     
     
     
    include_once(PARTIAL . '_head.php');
    include_once(PARTIAL . '_nav.php');
     
    ?>
     
    <div id="contenu">
        <?php foreach ($billet as $billet_unique): ?>
        <article>
            <header>
                <h1 class="titreBillet">Billet numéro <?php echo $billet_unique->id; ?></h1>
                <time><?= $billet_unique->date; ?></time>
            </header>
            <p><?= $billet_unique->contenu; ?></p>
        </article>
        <hr />
        <?php endforeach ?>
        <header>
            <h3 id="titreReponses">Commentaires :</h3>
        </header>
     
     
     
    <?php if(isset($commentaires))
    foreach ($commentaires as $commentaire): ?>
        <p><strong><?= $commentaire['auteur'] ?><br /></strong><?= $commentaire['date_b'] ?></p>
        <p><?= $commentaire['contenu']?></p>
        <hr />
    <?php endforeach; ?>
        <p> Pour poster un commentaire, veuillez remplir ces champs :</p>
        <form id="commentaire_form" action='entity/commentaireManager.php' method="POST" enctype="multipart/form-data">
            <div class="row">
                <label for="auteur">Votre pseudo:</label><br />
                <input id="auteur" class="input" name="auteur" type="text" value="" size="30" /><br />
            </div>
            <div class="row">
                <label for="commBillet">Votre commentaire:</label><br />
                <textarea id="commBillet" class="input" name="commBillet" rows="7" cols="30"></textarea><br />
            </div>
            <input id="submit_button" type="submit" value="Envoyer" />
        </form>
    </div>
     
     
    <?php include_once(PARTIAL . '_footer.php'); ?>
    Donc tout est bien récupéré, les billets, les commentaires déjà présents, à partir des classes billetmanager et commentairemanager.

    Et voici donc le message d'erreur quand je clique sur "Envoyer" :

    Fatal error: Class 'bddmanager' not found in C:\Users\agaut\Desktop\P3\P3_V8\entity\commentaireManager.php on line 5

  6. #6
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    ...la classe bddmanager n'est pas trouvé. Or, elle existe bien,...
    OK, encore faudrait-il inclure le fichier...
    Où est-il inclus ?
    Dans _config.php ?

Discussions similaires

  1. Lien entre BDD
    Par laurent00 dans le forum Access
    Réponses: 3
    Dernier message: 16/03/2007, 14h36
  2. [MySQL] Lien image bdd
    Par pod1978 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 07/12/2006, 11h02
  3. [2.0][C#] Classe BDD Access
    Par Seth77 dans le forum Accès aux données
    Réponses: 7
    Dernier message: 15/11/2006, 11h33
  4. Insertion Lien ds BDD a partir d'un formulaire PHP
    Par johnkro dans le forum Langage
    Réponses: 5
    Dernier message: 25/07/2006, 08h30
  5. Liens entre BDD Access
    Par sufrine dans le forum Access
    Réponses: 1
    Dernier message: 12/06/2006, 13h22

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