Valid XHTML     Valid CSS2    

Listing du fichier minifp_v1.php

 

00001     <?php
00002     
00003     error_reporting(
E_ALL E_NOTICE E_STRICT) ;
00004     
00005     # +-----------------------------------------------------+
00006     # +                                                     +
00007     # +  ATTENTION : ce programme s'exécute en ligne        +
00008     # +              de commandes et pas sur le Web !       +
00009     # +                                                     +
00010     # +-----------------------------------------------------+
00011     
00012     $gh 
1.07 ;
00013     
00014     # incomplet : . aucun test sur le type du champ, ainsi  minifp --model essai ages:integer
00015     #               est incorrect
00016     #             . le test si la table existe n'est pas "propre"
00017     #             . --model str n'est pas implémenté
00018     #             . il n'y a pas de fonction
00019     #             . le code pour SQL devrait etre factorisé
00020     #             etc.
00021     
00022     # -----------------------------------------------------
00023     
00024     function 
aide() {
00025     
00026       echo "\n Paramètres : --help | --model [optmodel | str ] --data optmodel \n\n" 
;
00027       echo "  - le paramètre --help affiche cette aide \n\n" 
;
00028       echo "  - les options du paramètre --model sont tbl [ chmp:typ [chmp:typ]* | str ]\n" 
;
00029       echo "      où tbl désigne la table,                                              \n" 
;
00030       echo "             chmp est un nom de champ,                                      \n" 
;
00031       echo "             typ est le type du champ (chaine ou entier)                    \n" 
;
00032       echo "             str affiche la structure de la table                           \n" 
;
00033     
00034     } # fin fonction aide() ;
00035     
00036     # -----------------------------------------------------
00037     
00038     # pas de paramètre, on affiche l'aide
00039     
00040     # -----------------------------------------------------
00041     
00042     $param 
"" ;
00043     if (isset($argv
[1])) { $param $argv[1] ; } ;
00044     
00045     if (($param 
== "") or ($param=="--help")) {
00046       aide
() ;
00047       echo "\n Rappel : ce programme n'est pas prévu pour une utilisation " 
;
00048       echo " dans une page Web.\n\n" 
;
00049       exit(-1
)  ;
00050     } ; # fin de si
00051     
00052     # -----------------------------------------------------
00053     
00054     # si le paramètre est --model on gère le modèle (= la table)
00055     
00056     # -----------------------------------------------------
00057     
00058     if (
$param == "--model") {
00059     
00060       $largs 
" ".join(" ",$argv)." " ;
00061       preg_match
("/--model (.*?) /",$largs,$res) ;
00062     
00063       if (!isset($res
[1])) {
00064     
00065         echo "Erreur : après --model il faut donner le nom de la table.\n" 
;
00066         exit(-2
)  ;
00067     
00068       } else {
00069     
00070         $table 
$res[1] ;
00071         $nt    
"--model $table;
00072         $largs 
substr($largs,strpos($largs,$nt)+strlen($nt)+1) ; # fin de la ligne
00073         preg_match_all
("/(.*?):(.*?) /",$largs,$res) ;
00074         if (!isset($res
[0])) {
00075           echo "Erreur : après --model TABLE il faut fournir CHAMP:TYPE ou str .\n" 
;
00076           exit(-32
)  ;
00077         } else {
00078     
00079             $tdc 
= Array() ;
00080             $tdc
["chaine"] = " varchar(20) " ;
00081             $tdc
["entier"] = " int(5) " ;
00082             $fn 
$table.".mysql" ;
00083             if (!file_exists
($fn))  {
00084                    $req  
"" ;
00085                    $req  
" USE  test ; \n" ;
00086                    $req 
.= " DROP TABLE IF EXISTS `$table` ; \n";
00087                    $req 
.= " CREATE TABLE `$table` ( \n" ;
00088                    $nbe  
count($res[1]) ;
00089                    for ($idt 
=0;$idt<$nbe;$idt++) {
00090                        $champ 
$res[1][$idt] ;
00091                        $type  
$tdc[$res[2][$idt]] ;
00092                        $virg  
" " ;
00093                        if ($idt
<$nbe-1) { $virg ", " ; } ;
00094                        $req 
.= "     $champ $type $virg \n" ;
00095                    } ; # fin pour idt
00096                    $req 
.= " ) ; \n" ;
00097                    $adj 
"créée " ;
00098                    $fh 
fopen($fn,"w") ;
00099                    fputs
($fh,$req) ;
00100                    fclose
($fh) ;
00101             } else {
00102                    $adj 
"mise à jour " ;
00103                    $req  
"" ;
00104                    $req  
" USE  test ; \n" ;
00105                    $nbe  
count($res[1]) ;
00106                    for ($idt 
=0;$idt<$nbe;$idt++) {
00107                        $champ 
$res[1][$idt] ;
00108                        $type  
$tdc[$res[2][$idt]] ;
00109                        $req 
.= " ALTER TABLE `$table` ADD $champ $type ; \n" ;
00110                    } ; # fin pour idt
00111                    $fh 
fopen($fn,"a") ;
00112                    fputs
($fh,$req) ;
00113                    fclose
($fh) ;
00114             } # fin si
00115         
# fin si
00116         echo 
"Table $table $adj via le code MySql suivant \n" ;
00117         echo "
$req \n" ;
00118         system
("sql < $fn ") ;
00119       } # fin si
00120       exit(
0) ;
00121     } ; # fin de si
00122     
00123     # -----------------------------------------------------
00124     
00125     # si le paramètre est --data on insère les données
00126     
00127     # -----------------------------------------------------
00128     
00129     if (
$param == "--data") {
00130     
00131       $largs 
" ".join(" ",$argv)." " ;
00132       preg_match
("/--data (.*?) /",$largs,$res) ;
00133     
00134       if (!isset($res
[1])) {
00135     
00136         echo "Erreur : après --data il faut donner le nom de la table.\n" 
;
00137         exit(-2
)  ;
00138     
00139       } else {
00140     
00141         $table 
$res[1] ;
00142         $nt    
"--data $table;
00143         $largs 
substr($largs,strpos($largs,$nt)+strlen($nt)+1) ;
00144         preg_match_all
("/(.*?):(.*?) /",$largs,$res) ;
00145         if (!isset($res
[0])) {
00146           echo "Erreur : après --data TABLE il faut fournir CHAMP:TYPE.\n" 
;
00147           exit(-32
)  ;
00148         } else {
00149     
00150             $tdc 
= Array() ;
00151             $tdc
["chaine"] = " varchar(20) " ;
00152             $tdc
["entier"] = " int(5) " ;
00153             $fn 
$table.".mysql" ;
00154             $req  
"" ;
00155             $req  
" USE  test ; \n" ;
00156             $req 
.= " INSERT INTO `$table` ( \n" ;
00157             $nbe  
count($res[1]) ;
00158             $lst  
"" # liste des champs
00159             for (
$idt =0;$idt<$nbe;$idt++) {
00160                 $champ 
$res[1][$idt] ;
00161                 $virg  
" " ;
00162                 if ($idt
<$nbe-1) { $virg ", " ; } ;
00163                 $req 
.= "     $champ $virg \n" ;
00164                 $lst 
.= "$champ$virg " ;
00165             } ; # fin pour idt
00166             $req 
.= " ) VALUES ( \n" ;
00167             for ($idt 
=0;$idt<$nbe;$idt++) {
00168                 $valeur 
$res[2][$idt] ;
00169                 if (substr
($valeur,0,1) == "_") {
00170                   $valeur 
"\"".substr($valeur,1)."\"" ;
00171                 } ; # finsi
00172                 $virg  
" " ;
00173                 if ($idt
<$nbe-1) { $virg ", " ; } ;
00174                 $req 
.= "     $valeur $virg \n" ;
00175             } ; # fin pour idt
00176             $req 
.= " )  ; \n" ;
00177             $fh 
fopen($fn,"w") ;
00178             fputs
($fh,$req) ;
00179             fclose
($fh) ;
00180         } # fin si
00181         echo 
"Valeurs $lst insérées dans la table $table via le code MySql suivant \n" ;
00182         echo "
$req \n" ;
00183         system
("sql < $fn ") ;
00184       } # fin si
00185       exit(
0) ;
00186     } ; # fin de si
00187     
00188     # si on arrive ici, c'est que le paramètre n'est pas compris
00189     
00190     echo 
"Paramètre $param invalide.\n" ;
00191     exit(-99
) ;
00192     
00193     ?>

Pour ne pas voir les numéros de ligne, ajoutez &nl=non à la suite du nom du fichier.

 

 

retour gH    Retour à la page principale de   (gH)