1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238
|
/*Nom: PhpboitesListeLiees.cpp */
/*Auteur: Pierre-Jean Tuloup */
/*Date Modif: 24 Mai 2008 */
/*Objet : Ce programme écrit en fonction des données entrées par l'utili- */
/* sateur un fichier Index.php contenant tout le code php et */
/* Javascript nécessaire pour générer une page html dans laquelle */
/* figurent des boîtes de liste déroulante dont le contenu est */
/* tiré de champs de tables d'une base Mysql, boîtes liées entre */
/* elles de telle sorte que si l'on change la sélection d'une */
/* boîte maître exposant des catégories, la boîte asservie exposant*/
/* des sous-catégories change ses items en conséquence (en limitant*/
/* ceux-ci à la catégorie choisie dans la boîte maître). */
/*Principe : Au départ, les boites de listes sont chargées à partir des tab- */
/* les Mysql avec tous les éléments possibles. Seulement, le tag */
/* <option value> est rempli de plusieurs éléments séparés par un */
/* point. Ces éléments sont l'index de l'élément figurant dans l'af*/
/* fichage du tag option tel qu'il provient de la table Mysql, puis*/
/* l'indice de la catégorie à laquelle il appartient dans la boîte */
/* maître (champ qui sert de liaison entre les deux tables Mysql). */
/* Lors d'une sélection dans une boîte maître, le contenu de la */
/* boîte asservie est automatiquement redéfini en fonction, par */
/* comparaison pour tous les éléments de la liste initiale de la */
/* boîte asservie entre ses Items de liaison et l'item sélectionné */
/* dans la boîte maître. */
#include <iostream>
#include <fstream.h>
#include <string.h>
int main()
{ char Host[20+1];
char User[20+1];
char Pwd[20+1];
char Base[20+1];
int NbBoites;
int i;
std::cout<<"Nom du serveur Mysql ? ";
std::cin.getline(Host,sizeof(Host));
std::cout<<"User sur le serveur Mysql ? ";
std::cin.getline(User,sizeof(User));
std::cout<<"Pwd sur le serveur Mysql ? ";
std::cin.getline(Pwd,sizeof(Pwd));
std::cout<<"Nom de la base ? ";
std::cin.getline(Base,sizeof(Base));
std::cout<<"Nombre de boîtes ? ";
std::cin>>NbBoites;
std::cin.clear();
std::cin.ignore( std::numeric_limits<std::streamsize>::max(), '\n' );
//Récupération des Eléments dans un tableau de chaînes
char (*Elts)[20+1]= new char[NbBoites*3][20+1];
for(i=0;i<NbBoites;i++)
{
std::cout<<"Boîte de Liste "<<i+1<<" : Nom de Table liée ? ";
std::cin>>Elts[(4*i)-4+0];
std::cout<<"Boîte de Liste "<<i+1<<": Nom du champ de sélection ? ";
std::cin>>Elts[(4*i)-4+1];
std::cout<<"Boîte de Liste "<<i+1<<": Nom du champ de liaison ? ";
std::cin>>Elts[(4*i)-4+2];
std::cout<<"Boîte de Liste "<<i+1<<": Nom du champ à afficher comme valeur ? ";
std::cin>>Elts[(4*i)-4+3];
}
//Ecriture de la page php
std::cout << "Ecriture du fichier..." << std::endl;
ofstream FichierSortie("Index.php");
if(!FichierSortie)
{
std::cout<<"Problème d'écriture";
return 1;
}
FichierSortie<<"<?\n\r";
FichierSortie<<"echo\"<HTML lang=fr>\\n\";\n\r";
FichierSortie<<"echo\"<!DOCTYPE HTML PUBLIC \'-//W3C//DTD HTML 4.0//EN\'>\\n\";\n\r";
FichierSortie<<"echo\"<HEAD>\\n\";\n\r";
FichierSortie<<"echo\"<TITLE>Mettez votre titre ici</TITLE>\\n\";\n\r";
FichierSortie<<"echo\"<meta name=\'Description\' content=\'Mettez votre description ici\'>\\n\";\n\r";
FichierSortie<<"echo\"<meta name=\'Keywords\' content=\'Mettez vos mots clefs ici\'>\\n\";\n\r";
FichierSortie<<"echo\"<meta name=\'Distribution\' content=\'Global\'>\\n\";\n\r";
FichierSortie<<"echo\"<meta name=\'Rating\' content=\'General\'>\\n\";\n\r";
FichierSortie<<"echo\"<meta name=\'Publisher\' content=\'Mettez votre nom ici\'>\\n\";\n\r";
FichierSortie<<"echo\"<meta name=\'Author\' Lang=\'fr\' content=\'Pierre-Jean Tuloup\'>\\n\";\n\r";
FichierSortie<<"echo\"<meta name=\'Last Modified\' content='Mettez la date ici'>\\n\";\n\r";
FichierSortie<<"echo\"<meta name=\'Generator\' content=\'PhpGenerator de Pierre-Jean Tuloup (c)2008!\'>\\n\";\n\r";
FichierSortie<<"echo\"<meta http-equiv=\'Content-entryfield\' content=\'text/html; charset=windows-1252\'>\\n\";\n\r";
FichierSortie<<"echo\"<meta http-equiv=\'Content-language\' content=\'fr\'>\\n\";\n\r";
FichierSortie<<"echo\"<meta http-equiv=\'Reply-to\' content=\'Mettez votre adresse mail ici\'>\\n\";\n\r";
//Ecriture du code Javascript (Fonctions diverses)
//Initialisation variables globales
FichierSortie<<"echo\"<script language='Javascript1.1'>\\n\";\n\r";
for(i=0;i<NbBoites;i++)
{FichierSortie<<"echo \"var NbEltsListe"<<i+1<<"=0;\\n\";\n\r";}
//Fonction RecupListes
FichierSortie<<"echo \"function RecupListes()\\n\";\n\r";
FichierSortie<<"echo \"\t{\\n\";\n\r";
for(i=0;i<NbBoites;i++)
{FichierSortie<<"echo \"\tRecupListe"<<i+1<<"();\\n\";\n\r";}
FichierSortie<<"echo \"\t}\\n\";\n\r";
//Fonctions de récupération des listes
for(i=0;i<NbBoites;i++)
{
FichierSortie<<"echo \"function RecupListe"<<i+1<<"()\\n\";\n\r";
FichierSortie<<"echo \"{\\n\";\n\r";
FichierSortie<<"echo \"NbEltsListe"<<i+1<<"=document.Param.Sel"<<i+1<<".length;\\n\";\n\r";
FichierSortie<<"echo \"NoSel"<<i+1<<"=new Array(NbEltsListe"<<i+1<<"-1);\\n\";\n\r";
FichierSortie<<"echo \"NoLnk"<<i+1<<"=new Array(NbEltsListe"<<i+1<<"-1);\\n\";\n\r";
FichierSortie<<"echo \"LibAff"<<i+1<<"=new Array(NbEltsListe"<<i+1<<"-1);\\n\";\n\r";
FichierSortie<<"echo \"for(var i=0;i<NbEltsListe"<<i+1<<";i++)\\n\";\n\r";
FichierSortie<<"echo \"\t{\\n\";\n\r";
FichierSortie<<"echo \"\tvar valeur=document.Param.Sel"<<i+1<<".options[i].value;\\n\";\n\r";
FichierSortie<<"echo \"\tvar pospt=valeur.indexOf('.');\\n\";\n\r";
FichierSortie<<"echo \"\tNoSel"<<i+1<<"[i]=valeur.substring(0,pospt);\\n\";\n\r";
FichierSortie<<"echo \"\tNoLnk"<<i+1<<"[i]=valeur.substring(pospt+1,(valeur.length));\\n\";\n\r";
FichierSortie<<"echo \"\tLibAff"<<i+1<<"[i]=document.Param.Sel"<<i+1<<".options[i].text;\\n\";\n\r";
FichierSortie<<"echo \"\t}\\n\";\n\r";
FichierSortie<<"echo \"}\\n\";\n\r";
}
//Fonctions de changement de contenu
//Nota: la denière boîte n'en modofie aucune: pas besoin de fonction change() pour elle
for(i=0;i<NbBoites-1;i++)
{
FichierSortie<<"echo \"function Change"<<i+1<<"()\\n\";\n\r";
FichierSortie<<"echo \"{\\n\";\n\r";
FichierSortie<<"echo \"var NoIndexSel=document.Param.Sel"<<i+1<<".selectedIndex;\\n\";\n\r";
FichierSortie<<"echo \"var NoItemSel=document.Param.Sel"<<i+1<<".options[NoIndexSel].value;\\n\";\n\r";
FichierSortie<<"echo \"var LibItemSel=document.Param.Sel"<<i+1<<".options[NoIndexSel].text;\\n\";\n\r";
FichierSortie<<"echo \"var pospt=NoItemSel.indexOf('.');\\n\";\n\r";
FichierSortie<<"/*Si point existe: liste originale; sinon, liste redéfinie par sélection dans la boîte précédente*/\n\r";
FichierSortie<<"echo \"if(pospt>-1)\\n\";\n\r";
FichierSortie<<"echo \"\t{\\n\";\n\r";
FichierSortie<<"echo \"\tNoItemSel=NoItemSel.substring(pospt+1,(NoItemSel.length));\\n\";\n\r";
FichierSortie<<"echo \"\t}\\n\";\n\r";
FichierSortie<<"echo \"for(var i=0;i<NbEltsListe"<<i+1<<";i++)\\n\";\n\r";
FichierSortie<<"echo \"var j=0;\\n\";\n\r";
FichierSortie<<"/*Mise à jour de la boîte de Liste Sélection +1*/\n\r";
FichierSortie<<"/*Si pas d'élément choisi*/\n\r";
FichierSortie<<"echo \"if(NoItemSel==0)\\n\";\n\r";
FichierSortie<<"/*Restauration de la boîte de Liste +1 dans tous ses éléments*/\n\r";
FichierSortie<<"echo \"\tfor(var i=0;i<NbEltsListe"<<i+2<<";i++)\\n\";\n\r";
FichierSortie<<"echo \"\t\t{\\n\";\n\r";
FichierSortie<<"echo \"\t\tdocument.Param.Sel"<<i+2<<".length=j+1;\\n\";\n\r";
FichierSortie<<"echo \"\t\tdocument.Param.Sel"<<i+2<<".options[j].value=NoSel"<<i+2<<"[i];\\n\";\n\r";
FichierSortie<<"echo \"\t\tdocument.Param.Sel"<<i+2<<".options[j++].text=LibAff"<<i+2<<"[i];\\n\";\n\r";
FichierSortie<<"echo \"\t\t}\\n\";\n\r";
FichierSortie<<"/*Si un élément a été choisi*/\n\r";
FichierSortie<<"echo \"else\\n\";\n\r";
FichierSortie<<"echo \"\t{\\n\";\n\r";
FichierSortie<<"echo \"\tdocument.Param.Sel"<<i+2<<".length=j+1;\\n\";\n\r";
FichierSortie<<"echo \"\tdocument.Param.Sel"<<i+2<<".options[j].value=NoSel"<<i+2<<"[0];\\n\";\n\r";
FichierSortie<<"echo \"\tdocument.Param.Sel"<<i+2<<".options[j++].text=LibAff"<<i+2<<"[0];\\n\";\n\r";
FichierSortie<<"/*Passer en revue tous les éléments originels de la boîte +1*/\n\r";
FichierSortie<<"echo \"\tfor(var i=0;i<NbEltsListe"<<i+2<<";i++)\\n\";\n\r";
FichierSortie<<"echo \"\t\t{\\n\";\n\r";
FichierSortie<<"/*Si l'Item sélectionné dans la boîte 1 est l'élément de liaison[i] de la boîte +1*/\n\r";
FichierSortie<<"echo \"\t\tif(NoItemSel==NoLnk"<<i+2<<"[i])\\n\";\n\r";
FichierSortie<<"echo \"\t\t\t{\\n\";\n\r";
FichierSortie<<"echo \"\t\t\tdocument.Param.Sel"<<i+2<<".length=j+1;\\n\";\n\r";
FichierSortie<<"echo \"\t\t\tdocument.Param.Sel"<<i+2<<".options[j].value=NoSel"<<i+2<<"[i];\\n\";\n\r";
FichierSortie<<"echo \"\t\t\tdocument.Param.Sel"<<i+2<<".options[j++].text=LibAff"<<i+2<<"[i];\\n\";\n\r";
FichierSortie<<"echo \"\t\t\t}\\n\";\n\r";
FichierSortie<<"echo \"\t\t}\\n\";\n\r";
FichierSortie<<"echo \"\t}\\n\";\n\r";
FichierSortie<<"echo \"}\\n\";\n\r";
}
FichierSortie<<"echo \"</script>\\n\";\n\r";
FichierSortie<<"echo\"</HEAD>\\n\";\n\r";
FichierSortie<<"echo\"<BODY onLoad='RecupListes();'>\\n\";\n\r";
FichierSortie<<"if(!$hdle=mysql_connect(" << Host << "," << User << "," << Pwd << "))\n\r";
FichierSortie<<"\t{\n\r";
FichierSortie<<"\techo \"<SCRIPT LANGUAGE='Javascript1.1'>\\n\";\n\r";
FichierSortie<<"\techo \"window.alert('Erreur dans la connexion au Serveur SGBD.\\nOpération annulée.');\\n\";\n\r";
FichierSortie<<"\techo \"</SCRIPT>\\n\";\n\r";
FichierSortie<<"\texit;\n\r";
FichierSortie<<"\t}\n\r";
//Récupération dans la Base des éléments de chaque boîte
for(i=0;i<NbBoites;i++)
{
FichierSortie<<"/*Requête pour la boîte "<<i+1<<"*/\n\r";
if(i==0)
FichierSortie<<"$sql=\"SELECT "<< Elts[(4*i)-4+1] << "," << Elts[(4*i)-4+1] << "," << Elts[(4*i)-4+3] << " FROM "<< Elts[(4*i)-4+0] << " Order by " << Elts[(4*i)-4+3] << "\";\n\r";
else
FichierSortie<<"$sql=\"SELECT "<< Elts[(4*i)-4+1] << "," << Elts[(4*i)-4+2] << "," << Elts[(4*i)-4+3] << " FROM "<< Elts[(4*i)-4+0] << " Order by " << Elts[(4*i)-4+3] << "\";\n\r";
FichierSortie<<"if(!$result=mysql_db_query(" << Base << ",$sql,$hdle))\n\r";
FichierSortie<<"\t{\n\r";
FichierSortie<<"\techo \"<SCRIPT LANGUAGE='Javascript1.1'>\\n\";\n\r";
FichierSortie<<"\techo \"window.alert('Erreur dans la liaison boîte "<<i+1<<" avec le Serveur SGBD.\\nOpération annulée.');\\n\";\n\r";
FichierSortie<<"\techo \"</SCRIPT>\\n\";\n\r";
FichierSortie<<"\texit;\n\r";
FichierSortie<<"\t}\n\r";
FichierSortie<<"else\n\r";
FichierSortie<<"\t{\n\r";
FichierSortie<<"\t$i=0;\n\r";
FichierSortie<<"\twhile ($ligne=mysql_fetch_array($result))\n\r";
FichierSortie<<"\t\t{\n\r";
FichierSortie<<"\t\t$No"<<i+1<<"[$i]=$ligne[0];\n\r";
FichierSortie<<"\t\t$Lnk"<<i+1<<"[$i]=$ligne[1];\n\r";
FichierSortie<<"\t\t$Lib"<<i+1<<"[$i++]=$ligne[2];\n\r";
FichierSortie<<"\t\t}\n\r";
FichierSortie<<"\t$NbElts"<<i+1<<"=--$i;\n\r";
FichierSortie<<"\t}\n\r";
}
//Ecriture de la page
FichierSortie<<"echo \"<form name='Param' Action='PageResultat.php' Method='post'>\\n\";\n\r";
FichierSortie<<"echo \"<table border='0'>\\n\";\n\r";
FichierSortie<<"echo \"<tr>\\n\";\n\r";
for(i=1;i<=NbBoites;i++)
{
FichierSortie<<"/*Boîte de Liste "<<i<<"*/\n\r";
FichierSortie<<"echo \"<td><select name='Sel"<<i<<"' onChange='Change"<<i<<"();'>\\n\";\n\r";
FichierSortie<<"/*Alimentation de la Boite*/\n\r";
FichierSortie<<"echo \"<option value=0>(Aucun)</option>\\n\";\n\r";
FichierSortie<<"for($i=0;$i<=$NbElts"<<i<<";$i++)\n\r";
FichierSortie<<"\techo \"<option value=$No"<<i<<"[$i].$Lnk"<<i<<"[$i]>$Lib"<<i<<"[$i]</option>\\n\";\n\r";
FichierSortie<<"echo \"</select></td>\\n\";\n\r";
}
FichierSortie<<"echo \"<td><input type='submit' name='ChoixValider' value='Lancer'></input></td>\\n\";\n\r";
FichierSortie<<"echo \"</tr>\\n\";\n\r";
FichierSortie<<"echo \"</table>\\n\";\n\r";
FichierSortie<<"echo \"</form>\\n\";\n\r";
FichierSortie<<"?>\n\r";
FichierSortie.close();
return 0;
} |
Partager