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 :

Fatal error: Uncaught Error: Call to a member function prepare() on null.. [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Nouveau membre du Club Avatar de Elztx
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 72
    Points : 28
    Points
    28
    Par défaut Fatal error: Uncaught Error: Call to a member function prepare() on null..
    Bonjour,

    J'ai un souci avec mon code et je n'arrive pas à voir où je me suis plantée.. ça fait plus d'une heure que j'ai la tête dedans, je crois que je ne vois plus rien..
    Voici le message d'erreur : Nom : Capture d’écran 2019-09-23 à 16.08.48.png
Affichages : 553
Taille : 33,8 Ko

    Le code concerné côté view :
    Code php : 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
    <article>
        <div class="container">
            <div class="row">
                <div class="col-lg-8 col-md-10 mx-auto">
                    <h3><?= htmlspecialchars($post['title']) ?></h3>
                    <p>
                        <div id="testarticle">
                            <p><?= nl2br(htmlspecialchars($post['content'])) ?></p></div>
                        <br />
                        <h2>Commentaires</h2>
                        <form action="XXX" method="post">
                            <div>
                                <label for="name">Auteur</label>
                                <br />
                                <input type="text" id="name" name="name" />
                            </div>
                            <div>
                                <label for="content">Commentaire</label>
                                <br />
                                <textarea id="content" name="content"></textarea>
                            </div>
                            <div>
                                <input type="submit" />
                            </div>
                        </form>
                    </p>
                </div>
            </div>
        </div>
    </article>
    <article>
        <div class="container">
            <div class="row">
                <div class="col-lg-8 col-md-10 mx-auto">
                     <?php
                     while ($comment = $comments->fetch())
                     {
                     ?>
     
                    <h5><?= htmlspecialchars($comment['author']) ?></strong> le <?= $comment['comment_date'] ?></h5>
     
                    <p>
                        <?= nl2br(htmlspecialchars($comment['comment'])) ?>
                        <br />
                    </p>
     
                    <div>
                        <a href="ajouter php pour signaler"><img src="/img/signaler.png" class="signaler" alt="signaler"/>Signaler</a>
                    </div>
     
                    <?php
                    }
                    ?>
                    <br />
                </div>
            </div>
        </div>
    </article>

    Côté model :
    Code php : 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
    <?php
     
    function getPosts()
    {
        $db = dbConnect();
        $req = $db->query('SELECT id, title, content, DATE_FORMAT(date, \'%d/%m/%Y\') AS date FROM article ORDER BY date DESC LIMIT 0, 5');
     
        return $req;
    }
     
    function getPost($postId)
    {
        $db = dbConnect();
        $req = $db->prepare('SELECT id, title, content, DATE_FORMAT(date, \'%d/%m/%Y\') AS date FROM article WHERE id = ?');
        $req->execute(array($postId));
        $post = $posts->fetch();
     
        return $post;
    }
     
    function getComments($postId)
    {
        $db = dbConnect();
        $comments = $db->prepare('SELECT id, author, content, DATE_FORMAT(comment_date, \'%d/%m/%Y\') AS comment_date FROM comment WHERE FK_post = ? ORDER BY comment_date DESC');
        $comments->execute(array($postId));
     
        return $comments;
    }
     
     
     
    // Connexion à la BDD
    function dbConnect()
    {
     
    $servername = "localhost";
    $username = "XusernameX";
    $password = "XmdpX";
    $database = "XdbnomX";
     
        try
        {
            $db = new PDO("mysql:host=$servername;dbname=$database", $username, $password);
        }
        catch(Exception $e)
        {
            die('Erreur : '.$e->getMessage());
        }
     
    }

    Côté controller :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    require('../modeles/articlemodel.php');
     
    if (isset($_GET['id']) && $_GET['id'] > 0) {
        $post = getPost($_GET['id']);
        $comments = getComments($_GET['id']);
        require('../vues/articleview.php');
    }
    else {
        echo 'Erreur : aucun identifiant de billet envoyé';
    }

    Du côté de ma BDD, j'ai dans ma table article :
    Nom : Capture d’écran 2019-09-23 à 16.12.34.png
Affichages : 539
Taille : 22,4 Ko

    Et côté commentaire :
    Nom : Capture d’écran 2019-09-23 à 16.12.49.png
Affichages : 542
Taille : 21,5 Ko

    Si quelqu'un peut prendre le temps de m'aider, ce serait top

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

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    ...DATE_FORMAT(date, \'%d/%m/%Y\') AS date...
    Il faut changer le nom de l'alias :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    ...DATE_FORMAT(date, \'%d/%m/%Y\') AS date_dmY...

    Sinon, mets des try/catch autour des requêtes, pour afficher les messages d'erreur SQL.

  3. #3
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Points : 15 059
    Points
    15 059
    Par défaut
    Bonjour,

    Dans la fonction dbConnect
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    return new PDO("mysql:host=$servername;dbname=$database", $username, $password);
    A+.

  4. #4
    Nouveau membre du Club Avatar de Elztx
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 72
    Points : 28
    Points
    28
    Par défaut
    Bonjour,

    Merci pour vos réponses !

    EDIT :
    J'ai trouvé une autre erreur, je reviens après aha
    Images attachées Images attachées  

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

    fais plus attention :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    function getPost($postId)
    {
        $db = dbConnect();
        $req = $db->prepare('SELECT id, title, content, DATE_FORMAT(date, \'%d/%m/%Y\') AS date FROM article WHERE id = ?');
        $req->execute(array($postId));
        $post = $req->fetch();
     
        return $post;
    }

  6. #6
    Nouveau membre du Club Avatar de Elztx
    Femme Profil pro
    Étudiant
    Inscrit en
    Mars 2019
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2019
    Messages : 72
    Points : 28
    Points
    28
    Par défaut
    Hello,

    Pardon, j'ai édité mon message mais je n'avais pas vu que la capture d'écran était toujours présente ! Je voulais dire que finalement j'avais trouvé pour les erreurs suivantes et que j'avais répondu trop vite !

    Merci pour votre aide, ça fonctionne à présent

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [PDO] erreur : Fatal error: Call to a member function prepare() on a non-object
    Par destigul dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 28/04/2015, 14h25
  2. [PDO] Fatal error: Call to a member function prepare() on a non-object
    Par nu_tango dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 20/12/2012, 08h33
  3. [PHP 5.2] Fatal error: Call to a member function bindValue() on a non-object
    Par TeraD dans le forum Langage
    Réponses: 4
    Dernier message: 23/06/2009, 00h20
  4. Fatal error: Call to a member function on a non-object
    Par alemat13 dans le forum Langage
    Réponses: 6
    Dernier message: 31/12/2007, 17h22
  5. Fatal error: Call to a member function fetchAll()
    Par misterniark dans le forum Zend_Db
    Réponses: 2
    Dernier message: 15/06/2006, 17h29

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