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);
}
}
}
?>