Bonjour, j'ai un probleme dans la minute 49:47, lastInsertId() return 0

la page add.php

<?php
$postTable = App::getInstance()->getTable('Post');

if(!empty($_POST)){
   $result = $postTable->create([
      'titre' => $_POST['titre'],
      'contenu' => $_POST['contenu'],
      'category_id' => $_POST['category_id']
   ]);
   if($result){  
      header('Location: admin.php?p=posts.edit&id='.App::getInstance()->getDb()->lastInsertId());
   }   
}

$categories = App::getInstance()->getTable('Category')->extract('id', 'titre');
$form = new \Core\HTML\BootstrapForm($_POST);

?>

<form method="post">
   <?= $form->input('titre', 'Titre de l\'article'); ?>
   <?= $form->input('contenu', 'Contenu', ['type' => 'textarea']); ?>
   <?= $form->select('category_id', 'Catégorie', $categories); ?>
   <button class="btn btn-primary">Sauvgarder</button>
</form>

ici la page MysqlDatabase.php

<?php 
namespace Core\Database;
use \PDO;

class MysqlDatabase extends Database{
   private $db_name;
   private $db_user;
   private $db_pass;
   private $db_host;
   private $pdo;

   public function __construct($db_name, $db_user = 'root', $db_pass = 'root', $db_host = 'localhost'){
      $this->db_name = $db_name;
      $this->db_user = $db_user;
      $this->db_pass = $db_pass;
      $this->db_host = $db_host;

   }

   public function getPDO(){
     if($this->pdo === null){
        $pdo = new PDO('mysql:dbname=blog;host=localhost', 'root', 'root');
        $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        $this->pdo = $pdo; 
        //var_dump('getPDO initialise');
      }
      //var_dump('getPDO called');
      return $this->pdo;      
   }

   public function query($statement, $class_name = null, $one = false){
      $req = $this->getPDO()->query($statement);
      if(strpos($statement, 'UPDATE') === 0 || strpos($statement, 'INSERT') === 0 || strpos($statement, 'DELETE') === 0){
          return $req;
      }
      if($class_name === null){
         $req->setFetchMode(PDO::FETCH_OBJ);
      } else {
         $req->setFetchMode(PDO::FETCH_CLASS, $class_name);
      }

      if($one){
        $datas = $req->fetch();
      } else {
        $datas = $req->fetchAll();
      }
      return $datas;
   }

   public function prepare($statement, $attributes, $class_name = null, $one = false){
      $req = $this->getPDO()->prepare($statement);
      $res = $req->execute($attributes);
      if(strpos($statement, 'UPDATE') === 0 || strpos($statement, 'INSERT') === 0 || strpos($statement, 'DELETE') === 0){
          return $res;
      }
      if($class_name === null){
         $req->setFetchMode(PDO::FETCH_OBJ);
      } else {
         $req->setFetchMode(PDO::FETCH_CLASS, $class_name);
      }

      if($one){
        $datas = $req->fetch();
      } else {
        $datas = $req->fetchAll();
      }
      return $datas;
   }

   public function lastInsertId(){
      return $this->getPDO()->lastInsertId();
   }

}

?>

Ici la page App.php

<?php 
use Core\Config;
use Core\Database\MysqlDatabase;

class APP{

     public $title = "Mon super site";   
     private $db_instance;
     private static $_instance;

     public static function getInstance(){
        if(is_null(self::$_instance)){
           self::$_instance = new APP();
        }
        return self::$_instance;
     }

     public function load(){
      session_start();
      require ROOT.'/app/Autoloader.php';
      App\Autoloader::register();
      require ROOT.'/core/Autoloader.php';
      Core\Autoloader::register();
    }

     public function getTable($name){
       $class_name = '\\App\\Table\\'.ucfirst($name).'Table';
        return new $class_name($this->getDb());
     }

     public function getDb(){
        $config = Config::getInstance(ROOT.'/config/config.php');
        if(is_null($db_instance)){
           $this->db_instance = new MysqlDatabase($config->get('db_name'), $config->get('db_user'), $config->get('db_pass'), $config->get('db_host'));

        }
        return $this->db_instance;
     }

     public function forbidden(){
        header('HTTP/1.0 403 Forbidden');
        die('Acces interdit');
     }

     public function notFound(){
        header('HTTP/1.0 404 Not Found');
        die('Page introuvable');
     }

}    
?>

Ici la page Table.php

<?php 
namespace Core\Table;
use Core\Database\Database;

class Table{

protected $table;
protected $db;

    public function __construct(Database $db){
      $this->db = $db;

      if(is_null($this->table)){
          $parts = explode('\\', get_class($this));   
          $class_name = end($parts);
          $this->table = strtolower(str_replace('Table', '', $class_name)).'s';
       }      
    }

    public function all(){
      return $this->query('SELECT * FROM '.$this->table);
    }

    public function find($id){
       return $this->query("SELECT * FROM {$this->table} WHERE id = ?", [$id], true);
    }

    public function update($id, $fields){
       $sql_parts = [];
       $attributes = [];
      foreach($fields as $k => $v){
          $sql_parts[] = "$k = ?";
          $attributes[] = $v;
       }
       $attributes[] = $id;
       $sql_part = implode(', ', $sql_parts);          
       return $this->query("UPDATE {$this->table} SET $sql_part WHERE id = ?", $attributes, true);
    }

    public function create($fields){
       $sql_parts = [];
       $attributes = [];
      foreach($fields as $k => $v){
          $sql_parts[] = "$k = ?";
          $attributes[] = $v;        
       }

       $sql_part = implode(', ', $sql_parts);      
       return $this->query("INSERT INTO {$this->table} SET $sql_part", $attributes, true);
    }   

    public function extract($key, $value){
       $records = $this->all();
       $return = [];
       foreach($records as $v){
          $return[$v->$key] = $v->$value;
       }
       return $return;
    }   

    public function query($statement, $attributes = null, $one = false){
        if($attributes){
             return $this->db->prepare($statement, $attributes, str_replace('Table', 'Entity', get_class($this)), $one);
        } else {
             return $this->db->query($statement, str_replace('Table', 'Entity', get_class($this)), $one);       
        }    
    }

}

?>

Aucune réponse