Bonjour à tous,

J'ai suivi le tutoriel développez un site en PHP et j'ai un petit problème à chaque fois que je veux créer une page ou un article l'id est à 1 dans le champ hidden et il load le post 1. Si je l’envoie, il crée un nouveau post.

Merci pour vos solutions

PS Je cherche toujours une solution à mysql_real_escape_String si vous avez des idées.

4 réponses


nanouke
Auteur
Réponse acceptée

J'ai trouvé le problème, il manquait un s à conditions dans la class model. Maintenant ça fonctionne merci quand même.

Regardes si ton champs 'id' est à 'auto increment' (AI). :-)

nanouke
Auteur

Je dirais que le problème viens plus tôt du code puisque l'id dans le champ hidden n'est pas bon, mais le celui qui est dans l’action du formulaire est bon, alors il affiche toujours le premier élément dans ma base de données.

nanouke
Auteur

Voici ce que je crois être le problème.
Request->data:

stdClass Object
(
    [id] => 2
    etc..
}

À chaque fois que je clique sur ajouter une page, il récupère le premier dans la base de données. Alors, je n’ai aucun moyen d'ajouter une page.
J'ai vérifié les sources avec ceux du tutoriel et je ne vois pas ou mon erreur peut être.

Je vais mettre les sources de request et form l'endroit où je crois qu’il pourrait y avoir l’erreur:
Request:

<?php
    /**
    * 
    */
    class Request
    {
        //==================================
        //Variable d'instance
        //==================================
        public $url; //URL appelle par l'utilisateur
        public $page = 1; //Pour la pagination
        public $prefix = false; //Prefix des urls
        public $data = false; //Donnee envoyer dans les formulaire

        function __construct()
        {
            $this->url = isset($_SERVER'PATH_INFO'])?$_SERVER'PATH_INFO']:'/';
            if(isset($_GET'page'])){
                if(is_numeric($_GET'page'])){
                    if($_GET'page'] > 0){
                        $this->page = round($_GET'page']);
                    }
                }
            }

            //Si des donnees ont ete postees on les entre dans data
            if(!empty($_POST)){
                $this->data = new stdClass();
                foreach ($_POST as $k=>$v) {
                    $this->data->$k=$v;
                }
            }
        }
    }

?>

Form:

<?php
/**
* Genere les formulaires
*/
class Form
{
    public $controller;
    public $errors;
    public function __construct($controller){
        $this->controller = $controller;
    }

    public function input($name,$label,$options = array()){
        $error = false;
        $classError = '';
        $msg = '';
        if(isset($this->errors$name])){
            $error = $this->errors$name];
            $classError = 'error';
        }
        if(!isset($this->controller->request->data->$name)){
            $value = '';
        }else{
            debug($this->controller->request->data);
            $value = $this->controller->request->data->$name;
        }
        if($label == 'hidden'){
            return '<input type="hidden" name="'.$name.'" value="'.$value.'"/>';
        }
        $html = '<label class="'.$classError.'" for="input'.$name.'">'.$label;
        $attr = ' ';
        foreach ($options as $k=>$v) {
            if($k != 'type' && $k != 'selectOptions' && $k != 'default')
                $attr .= " $k=\"$v\"";
        }
        if(!isset($options'type'])){
            $html .= '<input type="text" id="input'.$name.'" name="'.$name.'" value="'.$value.'"'.$attr.' />';
        }else if($options'type'] == 'textarea'){
            $html .= '<textarea name="'.$name.'" id="input'.$name.'" '.$attr.'>'.$value.'</textarea>';
        }else if($options'type'] == 'checkbox'){
            $html = '<input type="hidden" name="'.$name.'" value="0"/><input type="checkbox" name="'.$name.'" value="1" '.(empty($value) ? '':'checked').'/><label class="'.$classError.'" for="input'.$name.'">'.$label;
        }else if($options'type'] == 'file'){
            $html .= '<input type="file" name="'.$name.'" id="input'.$name.'"/>';
        }else if($options'type'] == 'password'){
            $html .= '<input type="password" name="'.$name.'" id="input'.$name.'" value="'.$value.'"/>';
        }else if($options'type'] == 'select'){
            $html .= '<select name="'.$name.'" id="input'.$name.'">';
                if(isset($options'default'])){
                    $html .= '<option value="'.$options'default']'value'].'">'.$options'default']'name'].'</option>';
                }
                foreach ($options'selectOptions'] as $k=> $v) {
                    $html .= '<option value="'.$v->id.'" '.(!empty($value) && $value == $v->id ? 'checked':'' ).' >'.$v->title.'</option>';
                }
            $html .= '</select>';
        }

        $html .= '</label>';
        if($error){
            $html .= '<small class="error">'.$error.'</small>';
        }
        return $html;
    }
}