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 à la page principale de (gH)