Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente Prochaine révisionLes deux révisions suivantes | ||
developpement_de_phpcompta [2013/03/23 15:44] – [Vue] dany | developpement_de_phpcompta [2014/03/22 16:14] – [Les tests unitaires] dany | ||
---|---|---|---|
Ligne 101: | Ligne 101: | ||
Il est vraiment mais vraiment fastidieux de construire une chaîne de caractère contenant tout le code html, surtout quand on emploie aussi du javascript et des tableaux. La solution que j'ai trouvé, je l'ai trouvé en m' | Il est vraiment mais vraiment fastidieux de construire une chaîne de caractère contenant tout le code html, surtout quand on emploie aussi du javascript et des tableaux. La solution que j'ai trouvé, je l'ai trouvé en m' | ||
- | **Function** | + | <code php> |
+ | function | ||
ob_start(); | ob_start(); | ||
Ligne 116: | Ligne 117: | ||
} | } | ||
+ | </ | ||
exemple | exemple | ||
Ligne 156: | Ligne 158: | ||
=====La partie base de données===== | =====La partie base de données===== | ||
- | ====Ancienne méthode (non recommandée)==== | + | [[developpement:base_de_donnée_ancienne_méthode]] |
- | + | ||
- | On avait commencé ainsi, on générait le fichier php à une table grâce à un script (dans phpcompta/ | + | |
- | + | ||
- | Les colonnes de la table sont dans un tableau et déclaré comme variable privée. Ce point est important. Cela oblige à utiliser les setters/ | + | |
- | + | ||
- | Cependant, je préfère souvent utiliser les commandes SQL plutôt que de passer par les objets. D' | + | |
- | + | ||
- | **class** Todo_List | + | |
- | { | + | |
- | + | ||
- | **private** static $variable=array( | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | " | + | |
- | **private** $cn; | + | |
- | **private** | + | |
- | + | ||
- | **function** %%__%%construct ($p_init) { | + | |
- | $this-> | + | |
- | $this-> | + | |
- | $this-> | + | |
- | $this-> | + | |
- | + | ||
- | } | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | Ici voici, des setters / getters génériques, | + | |
- | + | ||
- | + | ||
- | + | ||
- | **public** **function** get_parameter($p_string) { | + | |
- | if ( array_key_exists($p_string, | + | |
- | $idx=**self**:: | + | |
- | return $this-> | + | |
- | } | + | |
- | else | + | |
- | exit (**%%__%%FILE%%__%%**." | + | |
- | } | + | |
- | + | ||
- | **public** **function** set_parameter($p_string, | + | |
- | if ( array_key_exists($p_string, | + | |
- | $idx=**self**:: | + | |
- | if ($this-> | + | |
- | } | + | |
- | else | + | |
- | exit (**%%__%%FILE%%__%%**.":" | + | |
- | + | ||
- | } | + | |
- | + | ||
- | Ceci est la fonction qui contrôle que les données sont valides. Cela pourrait aussi être fait dans la base de données, soit avec des contrôles d' | + | |
- | + | ||
- | + | ||
- | + | ||
- | **public** **function** check($p_idx,& | + | |
- | if ( strcmp ($p_idx, ' | + | |
- | if ( strcmp ($p_idx, ' | + | |
- | if ( strcmp ($p_idx, ' | + | |
- | $p_value=substr($p_value, | + | |
- | return **true**; | + | |
- | } | + | |
- | if ( strcmp ($p_idx, ' | + | |
- | return **true**; | + | |
- | } | + | |
- | + | ||
- | Enfin la fonction save, qui permet soit d' | + | |
- | + | ||
- | + | ||
- | + | ||
- | **public** **function** save() { | + | |
- | if ( $this-> | + | |
- | $this-> | + | |
- | else | + | |
- | $this-> | + | |
- | } | + | |
- | + | ||
- | **public** **function** insert() { | + | |
- | if ( $this-> | + | |
- | + | ||
- | $sql=" | + | |
- | " values (to_date($1,' | + | |
- | $res=ExecSqlParam($this-> | + | |
- | $sql, | + | |
- | array($this-> | + | |
- | | + | |
- | | + | |
- | | + | |
- | ); | + | |
- | $this-> | + | |
- | + | ||
- | } | + | |
- | + | ||
- | **public** **function** update() { | + | |
- | if ( $this-> | + | |
- | + | ||
- | $sql=" | + | |
- | " where tl_id = $4"; | + | |
- | $res=ExecSqlParam($this-> | + | |
- | $sql, | + | |
- | array($this-> | + | |
- | | + | |
- | | + | |
- | | + | |
- | ); | + | |
- | + | ||
- | } | + | |
- | + | ||
- | Comme cette partie est vraiment répétitive et change peu, j'ai mis au point un script (dev/ | + | |
- | + | ||
- | + | ||
- | + | ||
- | static **function** test_me() { | + | |
- | $cn=DbConnect(dossier:: | + | |
- | $r=**new** Todo_List($cn); | + | |
- | $r-> | + | |
- | $r-> | + | |
- | $r-> | + | |
- | $r-> | + | |
- | $r-> | + | |
- | $r-> | + | |
- | print_r($r); | + | |
- | $r-> | + | |
- | $r-> | + | |
- | print_r($r); | + | |
- | $r-> | + | |
- | $r-> | + | |
- | } | + | |
- | **public** **function** get_info() { | + | |
- | + | ||
- | return var_export(**self**:: | + | |
- | + | ||
- | } | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | Et finalement, les fonctions info et test_me qui sont très utiles lors des phases de déboggages. Je crée une simple page html/ | + | |
- | + | ||
- | + | ||
- | + | ||
====Nouvelle méthode==== | ====Nouvelle méthode==== | ||
Ligne 327: | Ligne 183: | ||
Voici tout le code à taper par table, exemple pour la table stock_change | Voici tout le code à taper par table, exemple pour la table stock_change | ||
- | + | <code php> | |
- | **class** Stock_Change_Sql | + | class Stock_Change_Sql extends PhpCompta_Sql |
{ | { | ||
- | //%%// | + | // Le contructeur obligatoire |
- | //**function**// %%__%%construct// | + | function |
- | //{ | + | { |
+ | // Façon dont les dates sont utilisées | ||
+ | $this-> | ||
+ | // Nom de la table | ||
+ | $this-> | ||
+ | // nom de la clef primaire | ||
+ | $this-> | ||
- | //%%//%% Façon dont les dates sont utilisées | + | // Structure de la table, à gauche le nom logique utilisable |
- | // | + | // avec les getters/ |
+ | // colonne | ||
+ | $this->name = array( | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ); | ||
+ | // Type de données | ||
+ | $this-> | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | " | ||
+ | ); | ||
+ | // Les colonnes qui ne peuvent pas être changée ni par insert ni par | ||
+ | // update parce leurs valeurs sont données automatiquement | ||
+ | // exemple : la clef primaire qui est un numéro de séquence | ||
+ | // | ||
+ | $this-> | ||
+ | "c_id" | ||
+ | " | ||
+ | ); | ||
+ | global $cn; | ||
- | //%%//%% Nom de la table | + | parent:: |
- | //$this->//table //=// //" | + | } |
+ | } | ||
+ | </code> | ||
+ | Si on change la structure d' | ||
+ | ===== Les tests unitaires ===== | ||
+ | Avant on utilisait dans chaque class , une fonction nommée [[developpemement:: | ||
- | //%%//%% nom de la clef primaire | + | A partir |
- | // | + | |
- | // | + | |
- | + | ||
- | //%%//%% Structure de la table, à gauche le nom logique utilisable | + | |
- | %%//%% avec les getters/ | + | |
- | %%//%% colonne | + | |
- | // | + | |
- | //" | + | |
- | //" | + | |
- | //" | + | |
- | //" | + | |
- | //" | + | |
- | //" | + | |
- | //);// | + | |
- | %%//%% Type de données | + | |
- | // | + | |
- | //" | + | |
- | //" | + | |
- | //" | + | |
- | //" | + | |
- | //" | + | |
- | //" | + | |
- | //);// | + | |
- | %%//%% Les colonnes qui ne peuvent pas être changée ni par insert ni par | + | |
- | // | + | |
- | // | + | |
- | // | + | |
- | // | + | |
- | //" | + | |
- | //" | + | |
- | //);// | + | |
- | // | + | |
- | + | ||
- | parent//::// | + | |
- | //}// | + | |
- | //} | + | |
- | + | ||
- | Si on change la structure d'une table, il ne faut presque rien changer : seulement quelques lignes. | + | |
+ | Il faut tout d' | ||
+ | |||