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:52] – [Nouvelle méthode] dany | developpement_de_phpcompta [2014/03/22 16:53] – [La partie base de données] dany | ||
---|---|---|---|
Ligne 158: | Ligne 158: | ||
=====La partie base de données===== | =====La partie base de données===== | ||
- | ====Ancienne méthode (non recommandée)==== | + | [[developpement: |
- | On avait commencé ainsi, on générait le fichier php à une table grâce à un script (dans phpcompta/ | + | ===== Les mises à jour ===== |
- | + | Depuis 2005, dans phpcompta, on a une table version qui contient le numéro du dernier patch appliqué. Quand le fichier do.php est exécuté, il vérifie si le nombre DBVERSION contenu dans constant.php correspond à la version actuelle | |
- | Les colonnes de la table sont dans un tableau et déclaré comme variable privée. Ce point est important. Cela oblige | + | |
- | + | ||
- | Cependant, je préfère souvent utiliser les commandes SQL plutôt que de passer par les objets. D' | + | |
<code php> | <code php> | ||
- | class Todo_List | + | /* Ficher do.php */ |
+ | if (DBVERSION < dossier:: | ||
{ | { | ||
+ | echo '< | ||
+ | | ||
+ | | ||
+ | } | ||
+ | if (DBVERSION > dossier:: | ||
+ | { | ||
+ | echo '< | ||
+ | $a = _(" | ||
+ | $base = dirname($_SERVER[' | ||
+ | echo '<a hreF="' | ||
+ | } | ||
- | private static $variable=array( | ||
- | " | ||
- | " | ||
- | " | ||
- | " | ||
- | " | ||
- | private $cn; | ||
- | private | ||
- | |||
- | function __construct ($p_init) { | ||
- | $this-> | ||
- | $this-> | ||
- | $this-> | ||
- | $this-> | ||
- | |||
- | } | ||
</ | </ | ||
- | + | Dans le cas où DBVERSION n'est pas la valeur contenue dans la base de donnée, do.php vous propose d' | |
- | + | ||
- | + | ||
- | Ici voici, des setters / getters génériques, | + | |
- | + | ||
<code php> | <code php> | ||
+ | /* fichier setup.php */ | ||
+ | // | ||
+ | // Upgrade the folders | ||
+ | // | ||
- | public function get_parameter($p_string) { | + | for ($e=0;$e < $MaxDossier;$e++) { |
- | if ( array_key_exists($p_string, | + | |
- | $idx=self:: | + | |
- | return | + | |
- | } | + | |
- | else | + | |
- | exit (__FILE__.":" | + | |
- | } | + | |
- | public function set_parameter($p_string, | + | |
- | if ( array_key_exists($p_string, | + | |
- | $idx=self::$variable[$p_string]; | + | |
- | if ($this-> | + | |
- | } | + | |
- | else | + | |
- | exit (__FILE__.":".__LINE__.'Erreur attribut inexistant' | + | |
- | + | ||
- | } | + | |
- | </code> | + | |
- | 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'intégrités (foreign key, primary key) soit avec des procédures SQL embarquées de contrôle. | + | |
+ | $name=$cn-> | ||
- | <code php> | + | if ( $cn->exist_database($name)> |
+ | { | ||
+ | $db=new Database($db_row[' | ||
+ | $db-> | ||
+ | Dossier:: | ||
- | public function check($p_idx,& | + | |
- | if ( strcmp ($p_idx, ' | + | { |
- | if ( strcmp ($p_idx, ' | + | |
- | if ( strcmp | + | |
- | | + | |
- | return true; | + | |
- | } | + | |
- | if ( strcmp ($p_idx, ' | + | |
- | return true; | + | |
} | } | ||
- | </ | + | } |
- | Enfin la fonction save, qui permet soit d' | + | |
- | |||
- | <code php> | ||
- | 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 | + | La fonction qui applique le patch est Database:: |
- | + | ||
- | + | ||
- | <code php> | + | |
- | 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:: | + | |
- | } | + | |
- | + | ||
- | </code> | + | |
- | + | ||
- | + | ||
- | + | ||
- | + | ||
- | 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/test.php et j' | + | |
Ligne 379: | Ligne 286: | ||
</ | </ | ||
Si on change la structure d'une table, il ne faut presque rien changer : seulement quelques lignes. | Si on change la structure d'une table, il ne faut presque rien changer : seulement quelques lignes. | ||
+ | ===== Les tests unitaires ===== | ||
+ | Avant on utilisait dans chaque class , une fonction nommée [[developpemement:: | ||
+ | |||
+ | A partir de NOALYSS (version 6.7.2.0), et pour les plugins nous utiliserons PHPUnit.Ces tests sont heureusement appelables directement depuis NetBeans (version 7.4 et supérieure). | ||
+ | Il faut tout d' | ||
+ | |||