Bonjour à tous,

Voila, suite au tutoriel POO où l'on créer un blog, je rencontre un petit problème avec mon code.
J'ajoute la fonctionalité de commentaire.

Ce que je fais

Dans ma BDD, les commentaire et les "commentateur" sont dans 2 tables séparés, lié par l'id_commentateur.
Lorsque j'envois mon formulaire, je parviens bien a écrire mon commentaire et le comentateur dans les 2 table.

Ce que je veux

Je souhaites ajouter un test pour vérifier si le couple pseudo / email existe déjà pour ne pas recréer le commentateur (pour le moment je ne teste que le pseudo et n'ai pas ajouté le if pour la création du commentateur le temps d'avoir un code fonctionnel).

namespace App\Controller;
use Core\Controller\Controller;
use Core\Database\Database;
use \App;

        $commentateur = $this->db->prepare('SELECT * FROM commentateur WHERE pseudo_commentateur ="'.$_POST['pseudo_commentateur'].'"', null , true);
             if($commentateur){
                return true;
                var_dump($commentateur);
             }

            $resultCommentator = $this->Commentator->create($_GET['id'],[
                    'pseudo_commentateur'=>$_POST['pseudo_commentateur'],
                    'email_commentateur'=>$_POST['email_commentateur']

                ]);
            $result = $this->Comment->create($_GET['id'],[
                    'contenu_commentaire'=>$_POST['contenu_commentaire'],
                    'id_commentateur'=>'1', // A remplacer,
                    'id_article'=>$_POST['id_article'],
                    'niveau_commentaire' =>$niveau_commentaire,
                    'id_commentaire_parent'=>$_POST['parent_id']

                ]);

Ce que j'obtiens

Fatal error: Uncaught Error: Call to a member function prepare() on null in /app/Controller/CommentsController.php:34 Stack trace: #0 /public/index.php(29): App\Controller\CommentsController->add() #1 {main} thrown in *****/app/Controller/CommentsController.php on line 34

La ligne 34 correspondant à $commentateur = $this->db->prepare('SELECT * FROM commentateur WHERE pseudo_commentateur ="'.$_POST['pseudo_commentateur'].'"', null , true);

Et n'arrivant pas à le faire moi même, ce code est un copier coller de la fonction login qui elle fonctionne

Si quelqu'un aurait une idée je suis preneur...

4 réponses


Gnia
Auteur
Réponse acceptée

Sa y est j'ai compris, je tentait de faire une requête préparer dans mon controller, alors qu'une fonction est déjà prévu pour cel, il suffit donc de faire : $commentateur = $this->Commentator->query('SELECT * FROM commentateur WHERE pseudo_commentateur ="'.$_POST['pseudo_commentateur'].'"', null , true);

Merci yanis-git pour ton temps

ton attribut db n'est pas initialisé, il faudrait que tu regardes comment on ajoute PDO à ta class pour qu'on puisse t'aider.

Gnia
Auteur

J'ai tester en modifiant mon constructeur de la sorte :
''''
namespace App\Controller;
use Core\Controller\Controller;
use Core\Database\Database;

public function construct(Database $db){
parent::
construct(); // sert a appeler le constructeur parent
$this->loadModel('Post');
$this->loadModel('Category');
$this->loadModel('Comment');
$this->loadModel('Commentator');

    $this->db = $db;
}

''''

Et mon erreur deviens la suivante :
Fatal error: Uncaught TypeError: Argument 1 passed to App\Controller\CommentsController::__construct() must be an instance of Core\Database\Database

alors que dans les autre classes où sont appeler $db tout fonctionne parfaitement :S

La question est maintenant de savoir ou tu fais ton :

$ctrl = new CommentsController();

Car il doit recevoir un objet de type Core\Database\Databaseen paramètre.