Bonjours, j'ai un petit soucis avec ma page view.php, celle ci ne s'affiche pas et en lieu et place j'ai deux call stack.
( ! ) Notice: Trying to get property of non-object in C:\wamp\www\site\view\pages\view.php on line 1
Call Stack
# Time Memory Function Location
1 0.0004 370992 {main}( ) ..\index.php:0
2 0.0034 434440 Dispatcher->__CONSTRUCT( ) ..\index.php:9
3 0.0069 450360 Controller->render( ) ..\Dispatcher.php:15
4 0.0072 493816 require( 'C:\wamp\www\site\view\pages\view.php' ) ..\Controller.php:25
( ! ) Notice: Trying to get property of non-object in C:\wamp\www\site\view\pages\view.php on line 4
Call Stack
# Time Memory Function Location
1 0.0004 370992 {main}( ) ..\index.php:0
2 0.0034 434440 Dispatcher->__CONSTRUCT( ) ..\index.php:9
3 0.0069 450360 Controller->render( ) ..\Dispatcher.php:15
4 0.0072 493816 require( 'C:\wamp\www\site\view\pages\view.php' ) ..\Controller.php:25
sur ma page view je n'ai que deux echo
<h1> <?php echo $post->name; ?></h1>
<?php echo $post->content; ?>
je présume que l'erreur ne doit pas être très grave mais malgré plusieurs vérifications basées sur les vidéo jour 2 et 3, je ne trouve pas où j'ai bien pu faire une erreur.
Déjà un élément de réponse : d'après l'erreur "Trying to get property of non-object", c'est parce que tu fais $post-> pour PHP ce n'est pas un objet, essaye de faire debug($post) pour voir le résultat, si ce n'est pas défini, c'est que tu as oublié de le définir dans ton PostsController.php
Si tu as un autre résultat et que tu ne le comprends pas, copie le sur le forum ;-)
$post n'est pas définit ou n'est pas l'objet que tu attend. Tu es sûr de bien avoir envoyer la variable ? un print_r de $post donne quoi ?
alors en placant le debug($spost) dans le fichier pagesController.php comme ceci
<?php
class pagesController extends Controller{
function view($id){
$this->loadModel('Post');
$post = $this->Post->findFirst(array(
'conditions' => 'id=1'
));
$this->set('post',$post);
debug($post);
}
}
?>
j'obtiens une erreur fatale :
( ! ) Fatal error: Call to undefined function debug() in C:\wamp\www\site\controller\pagesController.php on line 11
Call Stack
# Time Memory Function Location
1 0.0009 370992 {main}( ) ..\index.php:0
2 0.0047 434440 Dispatcher->__CONSTRUCT( ) ..\index.php:9
3 0.0053 442176 call_user_func_array ( ) ..\Dispatcher.php:14
4 0.0053 442360 pagesController->view( ) ..\Dispatcher.php:0
quand je fais un print_r à la place du debug, je n'ai rien qui s'affiche, je pense aussi que c'est la variable qui ne passe pas, pourtant jusque là tout passait correctement le problème vient vraiment à partir du moment où il faut transmettre la variable post au fichier view.php.
Bonjour,
Je suis actuellement en train de suivre cette série de tuto, et je suis confronté a la même erreur avec ma page view. J'ai beau suivre le tuto, je n'arrive a comprendre pourquoi ça ne passe pas. Une solution a t'elle été trouvée?
Sinon au passage, je tenais à remercier l'auteur de ce site, que j'ai découvert il n'y a pas longtemps, et qui m'aide tout les jours a m'améliorer en php.
Active l'affichage des erreurs au niveau des requêtes SQL pour voir si ça ne vient pas de là ?
Merci pour l'aide, mais je me suis décidé a retourner bosser les bases PHP, le tuto étant acutellement trop complexe pour moi je pense.
Salut je suis dans le meme cas, sauf que dans je fait un print_r de($post) sa me retourne Array()
Pareil je suis a la 25 min, et mon array() ne m'affiche rien lorsque je fais print_r($posts);
<?php
class pagesController extends controller{
function view($id){
$this->loadModel('post');
$posts = $this->post->find(array(
'conditions' => 'id=1'
));
print_r($posts);
}
}
?>
bon j'ai trouvé c'est tout con mais faut bien respecter les espaces dans $sql...
$sql = 'SELECT * FROM '.$this->table.'as'.get_class($this).'';
je vais les remplacer par des underscores pour bien les faire voir :
$sql = 'SELECT * FROM_'.$this->table.'_as_'.get_class($this).'';
et c'est bon problème résolu...
je vien de verifier c pas ma command sql le probleme.
PagesController
<?php
class PagesController extends Controller{
function view($id){
$this->loadModel('Post');
$post = $this->Post->findFirst(array(
'conditions' => 'id=1'
));
$this->set('post',$post);
print_r($post);
}
}
Model
<?php
class Model{
static $connections = array();
public $conf = 'default';
public $table = false;
public $db;
public function __construct(){
// Je me connecte à la base
$conf = Conf::$databases$this->conf];
if(isset(Model::$connections$this->conf])){
$this->db = Model::$connections$this->conf];
return true;
}
try{
$pdo = new PDO(
'mysql:host='.$conf'host'].';dbname='.$conf'database'].';',
$conf'login'],
$conf'password'],
array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8')
);
Model::$connections$this->conf] = $pdo;
$this->db = $pdo;
}catch(PDOException $e){
if(Conf::$debug >= 1){
die($e->getMessage());
}else{
die('Impossible de se connecter à la base de donnée');
}
}
// J'initialise quelque variable
if($this->table === false){
$this->table = strtolower(get_class($this)).'s';
}
}
public function find($req){
$sql = 'SELECT * FROM '.$this->table.' as '.get_class($this).'';
if(isset($req'conditions'])){
$sql .= 'WHERE '.$req'conditions'];
}
$pre = $this->db->prepare($sql);
$pre->execute();
return $pre->fetchAll(PDO::FETCH_OBJ);
}
public function findFirst($req){
return current($this->find($req));
}
}
Déjà une petite erreur que j'ai pu voir, je sais pas si sa va aidé
public function find($req){
$sql = 'SELECT * FROM '.$this->table.' as '.get_class($this).'';
if(isset($req'conditions'])){
$sql .= 'WHERE '.$req'conditions'];
}
$pre = $this->db->prepare($sql);
$pre->execute();
return $pre->fetchAll(PDO::FETCH_OBJ);
}
Tu n'as pas d'espace entre ton ' as '.get_class($this) et ton 'WHERE '
Essaye comme çà
public function find($req){
$sql = 'SELECT * FROM '.$this->table.' as '.get_class($this).' ';
if(isset($req'conditions'])){
$sql .= 'WHERE '.$req'conditions'];
}
$pre = $this->db->prepare($sql);
$pre->execute();
return $pre->fetchAll(PDO::FETCH_OBJ);
}
J'ai juste rajouté un espace après ' as '.get_class($this).'
pour donné ' as '.get_class($this).' '
Effectivement Typhon a raison, si tu n'as pas l'espace à la fin de de '_as_'.get_class($this).'_';
met le au début de '_WHERE_'
je remplace "_ par espace"
visiblement la requete sql est super sensible aux espaces..