Bonjour,
Je suis en train de refaire le tp (blog) de la formation POO de php de grapfikart.
Cela fait plusieurs heures que j'assaye de comprendre d'où vient une erreur que je rencontre.
Et j'arrive vraiment pas à comprendre
Jusqu'à là tous se passé bien
J'en suis la partie 20min43 de ce tutoriel.
https://www.grafikart.fr/formations/programmation-objet-php/tp-refactor
J'ai refais la fonction all() comme c'est dis dans le tuto.
J'ai refais plusieurs fois le tuto pour voir où j'ai fais l'erreur je n'arrive pas à trouver.
Php me renvoi toujours ce message d'erreur.
( ! ) Fatal error: in C:\wamp\www\Exo PHP\Tp Blog\Partie 11-En cours\core\Database\MysqlDatabase.php on line 40
( ! ) PDOException: in C:\wamp\www\Exo PHP\Tp Blog\Partie 11-En cours\core\Database\MysqlDatabase.php on line 40
J'ai beau chercher c'est quoi l'érreur, mais j'arrive vraiment pas à comprendre.
Si quelqu'un pouvais m'aider à resoudre ce problème ça serait génialle car je pourrai continuer.
Voici le code du fichier 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));
}
}
public function all(){
return $this->query('SELECT * FROM' . $this->table);
}
public function query($statement, $attibutes = null, $one = false){
if($attibutes){
return $this->db->prepare(
$statement,
$attibutes,
str_replace('Table', 'Entity', get_class($this)),
$one
);
}else{
return $this->db->query(
$statement,
str_replace('Table', 'Entity', get_class($this)),
$one
);
}
}
}
Voici le code fichier home.php
<div class="row">
<div class="col-sm-8">
<ul>
<?php
foreach (App::getInstance()->getTable('Post')->last() as $post): ?>
<h2>
<a href="<?= $post->url ?>"><?= $post->titre; ?>
</a>, <?= $post->categorie; ?>
</h2>
<p><?= $post->extrait; ?></p>
<?php endforeach; ?>
</ul>
<h1>Je suis la home</h1>
<p><a href="index.php?p=single">Aller à la page Single</a></p>
</div>
<div class="col-sm-4">
<ul>
</ul>
<?php foreach (App::getInstance()->getTable('Category')->all() as $categorie): ?>
<li><a href="<?= $categorie->url; ?>"><?= $categorie->titre; ?></a></li>
<?php endforeach ?>
</div>
</div>
Voici le code fichier index.php
<?php
define('ROOT', dirname(__DIR__));
require_once ROOT.'/app/App.php';
App::load();
if(isset($_GET['page'])){
$page = $_GET['page'];
}else{
$page = 'home';
}
ob_start();
if($page === 'home'){
require ROOT .'/pages/articles/home.php';
}
$content = ob_get_clean();
require ROOT. '/pages/templates/default.php';
Et enfin voici le code fichier 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 ='', $db_host ='localhost'){
$this->db_name = $db_name;
$this->db_user = $db_user;
$this->db_pass = $db_pass;
$this->db_host = $db_host;
}
private function getPDO(){
if ($this->pdo === null){
$pdo = new PDO('mysql:dbname=blog;host=localhost','root','');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$this->pdo = $pdo;
}
return $this->pdo;
}
public function query($statement, $class_name = null, $one = false){
$req = $this->getPDO()->query($statement);
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, $one = false){
$req = $this->getPDO()->prepare($statement);
$req->execute($attributes);
$req->setFetchMode(PDO::FETCH_CLASS, $class_name);
if ($one){
$datas = $req->fetch();
}else{
$datas = $req->fetchAll();
}
return $datas;
}
}
Je suis désolé pour tous ce code car je sais pénible à lire.
Si quelqu'un pouvait m'aider ne serait-ce qu'à comprendre pourquoi ça ne marche pas.
Même si il n'a pas la réponse, il me serait d'une très grande aide.
Bonjour.
Dans ta requête de ta fonction all, il manque un espace après l'argument FROM
, ce qui fait que tu te retrouves avec quelque chose du genre :
SELECT * FROMcategories
Au lieu de :
SELECT * FROM categories
Un grand merci ça fait des heures que je cherchais l'erreur.
Tu ne peux pas savoir le nombre de fois que j'ai annalyséle code.
Un grand merci, la prochaine je le saurai.
De rien, c'est souvent des fautes d'inattentions qui nous prennent le plus de temps à déceler, alors qu'elles sont sous nos yeux.
Et bien qu'elles nous glissent entre les yeux pendant plusieurs heures, il suffit qu'un regard externe consulte le code pour les trouver rapidement.