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)