Bonjour, à tous j'essaye de couplet les deux tutoriels "POO et Création de models" et "Créations de helpers" afin de géré les inputs plus facilement pour l'envoie des champs dans ma base de donnée.

Mais j'ai du me tromper sur une petite partit du code, si vous pouvez m'orienté svp, je vous remercie d'avance à tous ceux et celle qui pourront m'orienté sur mon erreur.

Code dans mon fichier index.php

<div id="conteneur">
      <h1>PHP Objet</h1>
      <ul>
      <?php
    $cat = $Category->find(array(
      "fields" => "*",
      //"limit" => 3,
      "order" => "name ASC"
    ));
    foreach($cat as $c){
    ?>
      <li>
        <a href="index.php?id=<?php echo $c"id"]; ?>"><?php echo $c"name"]; ?></a> -
        <?php echo $c"position"]; ?> - 
        <a href="index.php?suppr=<?php echo $c"id"]; ?>">[x]</a>
      </li>
    <?php 
    }
      ?>
      <li><a href="index.php">Ajouter une catégorie</a></li>
      </ul>

      <form method="post" action="index.php">
      <?php
        if(isset($_GET"id"])){
        $id = $_GET"id"];
        $Category->id=$id;
        $Category->read();  
        $name = $Category->name; 
        $position = $Category->position;
        }
        else{
        $id= $name ="";
        $id= $position ="";
        }
      ?>
      <?php echo $form->input('name','Votre nom',array('value'=>"$name"));?>
      <input type="hidden" name="id" value="<?php echo $id; ?>"/>
      <label for="position">Position</label><input type="text" name="position" value="<?php echo $position; ?>"/>
      <input type="submit" value="envoyer"/>
      </form>
    </div>

code au dessus de mon doctype de mon fichier index.php

<?php
require "core.php";
//Formulaires --------------------------------------*/
require "model/form.php";
$form = new form();
$d =array(
    'name'=> ''
);
$form->set($d);
if(isset($_POST'data'])){
        $errors = array(
            'name' => 'Merci de rentrer un nom'
        );
        $form->setErrors($errors);
    }

/*-------------------------------------------------*/

$Category = Model::load("category");
?>
<?php
if(!empty($_POST)){
    $Category->save($_POST);
    $_GET"id"] = $Category->id;
}
if(isset($_GET"suppr"])){
    $Category->del($_GET"suppr"]);
}
?>

Voilà, j'essaye de me lancer dans le PHP Objet, pareil si vous avez de bon livre à me conseiller, des tutoriels déjà ceux de Grafikart excellent, n'hésitez pas.

Merci beaucoup.

4 réponses


Quelle est ton erreur et montre nous la classe de form?

barbas
Auteur

bonjour, voici la class form: c'est celle du tuto grafikart.

<?php
/**
 * Helper Form,
 * Permet de générer simplement un formulaire
 */
class Form{
    public $data; // Contient les données à insérer dans le formulaire
    public $errors; // Contient les erreurs si il y en a 
    function set($data){
        $this->data = $data;
    }
    /**
     * Permet d'initialiser des erreurs
     */
    function setErrors($errors){
        $this->errors = $errors;
    }
    /**
     * Affiche une erreur
     */
     function getError($field){
        if(isset($this->errors$field])){
            return '<span class="error-msg">'.$this->errors$field].'</span>';
        }
        else{
            return '';
        }
     }
    /**
     * Crée un input de type texte
     * @param string $field Nom du champ en base de donnée
     * @param string $label Nom du label (optionel)
     * @param array $attributs Attributs supplémentaire au input
     * @return string
     */
    function input($field,$label=null,$attributs = array()){
        if($label == null){ $label = ucfirst($field).' :'; }
        $r = '<label class="desc">'.$label.'</label>';
        $value = (isset($this->data$field])) ? $this->data$field] : '';
        $attr = '';
        foreach($attributs as $k=>$v){ //parcours un tableau renseigner pour les attributs $k=index(class)=>$v=(valeur) ex: class="valeur"
            $attr .= ' '.$k.'="'.$v.'"';
        }
        $r .='<input type="text" id="input'.$field.'" name="data'.$field.']" class="field text medium"'.$attr.'/>';
        $r .= $this->getError($field);
        return $r; 
    }
    /**
     * Crée un input Hidden
     * @param string $field
     * @return string
     */
    function hidden($field,$value=''){
        $value = (isset($this->data$field])) ? $this->data$field] : $value;
        $r .='<input type="hidden" value="'.$value.'" name="data'.$field.']" class="field text medium"/>';
        return $r;
    }
    /**
     * Crée un input FILE
     * @param string $field
     * @param string $label
     * @return string
     */
    function file($field,$label){
        $r = '<label class="desc">'.$label.'</label>';
        $value = (isset($this->data$field])) ? $this->data$field] : '';
        $r .='<input type="file" name="'.$field.'"/>';
        $r .= $this->getError($field);
        return $r;
    }
    /**
     * Crée un SELECT
     * @param string $field Champ en base
     * @param string $label Label à afficher
     * @param array $option Options du selec valeur=>nom associé
     * @return string
     */
    function select($field,$label,$option){
        $r = '<label class="desc">'.$label.'</label>';
        $value = (isset($this->data$field])) ? $this->data$field] : '';
        $r .='<select name="data'.$field.']"/>';
        foreach($option as $k=>$v){
            if($k==$this->data$field]){
                $r .= '<option value="'.$k.'" selected="selected">'.$v.'</option>';
            }else{
                $r .= '<option value="'.$k.'">'.$v.'</option>';
            }
        }
        $r.= '</select>';
        $r .= $this->getError($field);
        return $r;
    }
    /**
     * Crée une liste de checkbox
     * @param <type> $field Nom du champ en base
     * @param <type> $label
     * @param <type> $option Liste des checkbox valeur => nom associé
     * @return string
     */
    function checkbox($field,$label,$option){
        $r = '<label class="desc">'.$label.'</label>';
        $value = (isset($this->data$field])) ? $this->data$field] : '';
        if(!is_array($this->data$field])){
            $ids = explode(',',$this->data$field]);
        }
        else{
            $ids = $this->data$field];
        }
        foreach($option as $k=>$v){
            if(in_array($k,$ids)){
                $r .= '<input type="checkbox" name="data'.$field.']]" value="'.$k.'" checked="checked"/> '.$v;
            }else{
                $r .='<input type="checkbox" name="data'.$field.']]" value="'.$k.'"/> '.$v;
            }
            $r.='<br/>'; 
        }
        $r .= $this->getError($field);
        return $r;
    }
}
$form = new Form();

voilà toute la class Form.

et pour la class Model: (idem celui du tuto)

<?php
/**
 * Objet Model
 * Permet les intéractions avec la base de donnée
 * */
class Model{

    public $table;
    public $id;

    /**
     * Lit une ligne dans la base de donnée par rapport à l'ID de l'objet
     * @param $fields Liste des champs à récupérer
     * */
    public function read($fields=null){
        if($fields==null){ $fields = "*"; }
        $sql = "SELECT $fields FROM ".$this->table." WHERE id=".$this->id ;
        $req = mysql_query($sql) or die(mysql_error()."<br/> => ".mysql_query());
        $data = mysql_fetch_assoc($req);
        foreach($data as $k=>$v){
            $this->$k = $v;
        }
    }

    /**
     * Sauvegarde les donnée passé en paramètre dans la base de donnée
     * @param $data Donnée à sauvegarder
     * */
    public function save($data){
        if(isset($data"id"]) && !empty($data"id"])){
            $sql = "UPDATE ".$this->table." SET ";
            foreach($data as $k=>$v){
                if($k!="id"){
                    $sql .= "$k='$v',";
                }
            }
            $sql = substr($sql,0,-1);
            $sql .= "WHERE id=".$data"id"];
        }
        else{
            $sql = "INSERT INTO ".$this->table."(";
            unset($data"id"]);
            foreach($data as $k=>$v){
                    $sql .= "$k,";
            }
            $sql = substr($sql,0,-1);
            $sql .=") VALUES (";
            foreach($data as $v){
                    $sql .= "'$v',";
            }
            $sql = substr($sql,0,-1);
            $sql .= ")";
        }
        mysql_query($sql) or die(mysql_error()."<br/> => ".mysql_query());
        if(!isset($data"id"])){
            $this->id=mysql_insert_id();
        }
        else{
            $this->id = $data"id"];
        }
    }

    /**
     * Permet de récupérer plusieurs ligne dans la BDD
     * @param $data conditions de récupérations
     * */
    public function find($data=array()){
            $conditions = "1=1";
            $fields = "*";
            $limit = "";
            $order = "id DESC";
            extract($data);
            if(isset($data"limit"])){ $limit = "LIMIT ".$data"limit"]; }
            $sql = "SELECT $fields FROM ".$this->table." WHERE $conditions ORDER BY $order $limit";
            $req = mysql_query($sql) or die(mysql_error()."<br/> => ".$sql);
            $d = array();
            while($data = mysql_fetch_assoc($req)){
                $d] = $data;
            }
            return $d;
    }

    /**
     * Permet de supprimer une ligne dans la base de donnée
     * @param $id ID de la ligne à supprimer
     * */
    public function del($id=null){
        if($id==null){ $id = $this->id; }
        $sql = "DELETE FROM ".$this->table." WHERE id=$id";
        mysql_query($sql) or die(mysql_error()."<br/> => ".mysql_query());
    }

    /**
     * Permet de faire une requête complexe
     * @param $sql Requête a effectué
     * */
        public function query($sql){
            $req = mysql_query($sql) or die(mysql_error()."<br/> => ".$sql);
            $d = array();
            while($data = mysql_fetch_assoc($req)){
                $d] = $data;
            }
            return $d; 
        }

    /**
     * Permet de charger un model
     * @param $name Nom du model à charger
     * */
    static function load($name){
        require("$name.php");
        return new $name();
    }

}
?>

Voilà je me met vraiment au php objet et j'essaye de comprendre ce code, mais quand je les joint tout les 2 je suis un peu perdu hélas.
Merci encore pour tout ceux et celle qui me donne un coup de pouce.

barbas
Auteur

MOn erreur quand j'ajoute dans ma base de donnee:
Unknown column 'data' in 'field list'
=>

Warning: mysql_query() expects at least 1 parameter, 0 given in C:\wamp\www\POO\model\model.php on line 54

barbas
Auteur

Bonjour, je peine toujours sur mon problème d'insérée dans ma base de donnée.
Les 2 tutoriels séparément je comprend un peu, mais des que j'essaie de les couplets c'est plus trop clair.