bonjour, j'ai commencé récemment le tutoriel "création d'un site web de A à Z" mais au jour 5, j'ai un probleme avec mon Form.php.
voila mon code:

<?php 
class Form{
    public $controller;
    public function __construct($controller){
        $this->controller = $controller;
    }
    public function input($name,$label,$options = array()){
    if($label == 'hidden'){
        return '<input type="hidden" name="'.$name.'" value="'.$this->controller->request->data->$name.'">';
    }   

    $html = '<div class="clearfix"> 
                <label for="input'.$name.'">'.$label.'</label>
                <div class="input">';
    $attr = ' ';
    foreach ($options as $k => $v){ 
        if($k!='type'){
            $attr .= "$k=\"$v\"";
        }
    }
    if(!isset($options'type'])){
        $html .= '<input type="text" id="input'.$name.'" name="'.$name.'" value="'.$this->controller->request->data->$name.'" '.$attr.'>';
    }elseif($options'type'] == 'textarea'){
        $html .= '<textarea id="input'.$name.'" name="'.$name.'" '.$attr.'>'.$this->controller->request->data->$name.'</textarea>';
    }elseif($options'type'] == 'checkbox'){
        $html .= '<input type="hidden" name="'.$name.'" value="0"><input type="checkbox" name="'.$name.'" value="1">';
    }
    $html .= '</div></div>';
    return $html;
    }
}

et voici l'erreur que j'ai:
Notice: Trying to get property of non-object in C:\Users\Danny\Documents\siteweb local\EasyPHP-5.3.8.1\www\site_ppo\core\Form.php on line 13, 26 et 28(là où il y a ma variable"$this->controller->request->data->$name").

j'aimerais savoir pourquoi cela s'affiche et comment le corrigé.

Merci

5 réponses


blackdanboy
Auteur
Réponse acceptée

Ok j'ai trouvé le problème: c'est que dans l'URL, c'était suposé être marquer ".../cockpit/posts/edit/(id)" mais à la place il y avais cela: ".../cockpit/posts/edit/". Donc, il ne reconnaissait pas l.id, donc il ne pouvais pas aller chercher les informations dans la bdd.

Hello, essaye de virer le $ sur le $name.

Dans les objets, les propriétés ne prennent pas de $

ex :

$this->controller->nom = $nom;

Essaye de trouver pour caser quelque part :

$this->controller->request->data->name = $name;

ça t'aidera surement ;)

j'ai essayé mais ça ne marche pas non plus. Aurait tu une autre idée??

OK.... bon, j'ai un peu plus attentivement regardé le code... faut que je regarde la vidéo car j'ai pas envie de dire de connerie ;)

Mais à la suite de :

public $controller;

tu pourrais mettre :

public $controller;
public $request;
public $data;

j'ai essayé mais cela ne marche toujours pas. Je crois que cela est du au fait qu'il ne reconnait pas "$this->controller->request->data->$name", ou bien qu'il n'y en a pas d'entrée. Aurais-tu une autre solution à me proposer??