Bonjour,

j'ai récupéré une application qui est vraiment trop bizarre, ou du moins, je n'avais jamais vu ce fonctionnement auparavant : quasiment tout le code de l'application est dans le JavaScript. Prenons par exemple la page d'accueil, qui est composée d'une frame, dont la source est un fichier HTML, qui contient uniquement 2 lignes :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
<script type="text/javascript" src="/Javascript/Global.js"></script>
<script type="text/javascript" src="/Init.js"></script>
Enfin, dans Init.js, j'ai ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
//Demande d'habilitation si l'utilisateur n'est pas identifié
if (F_Get("ID") != "" && F_Get("MP") != "") {
	if (F_Get("HA") != "") {
		var Requete = "SELECT ";
		Requete += "Code, Entite ";
		Requete += "FROM Habilitations ";
		Requete += "WHERE ";
		Requete += "Code = '" + F_Get("Code") + "' AND ";
		Requete += "Identifiant = '" + F_Get("ID") + "' AND ";
		Requete += "MotDePasse = '" + F_Get("MP") + "' ";
		var IdentifiantXml = F_Sjax(Requete);
		if (IdentifiantXml.getElementsByTagName("Data")[0].firstChild != null) {
			parent.Session.Identifiant.value = F_Get("ID");
			parent.Session.Entite.value = IdentifiantXml.getElementsByTagName("Entite")[0].firstChild.data;
			F_PageCharger("FO-SI-002",F_Get("Code"));
		}else{
			parent.Menu.window.location = "/Html/Menu.html";
		}//end if
	}else{
		var Requete = "SELECT ";
		Requete += "Code, Entite ";
		Requete += "FROM Habilitations ";
		Requete += "WHERE ";
		Requete += "Identifiant = '" + F_Get("ID") + "' AND ";
		Requete += "MotDePasse = '" + F_Get("MP") + "' ";
		var IdentifiantXml = F_Sjax(Requete);
		if (IdentifiantXml.getElementsByTagName("Data")[0].firstChild != null) {
			parent.Session.Identifiant.value = F_Get("ID");
			parent.Session.Entite.value = IdentifiantXml.getElementsByTagName("Entite")[0].firstChild.data;
			parent.Menu.window.location = "/Html/Menu.html";
		}else{
			parent.Menu.window.location = "/Html/Menu.html";
		}//end if
	}//end if
}else{
	parent.Menu.window.location = "/Html/Menu.html";
}//end if
Voici le code des différentes fonctions utilisées ci-dessus :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
function F_Get(Parametre) {
    // Suppression du point d'interrogation
    var ListeParametres = window.location.search.slice(1,window.location.search.length);
    // Séparation des parametres
    var Parametres = ListeParametres.split("&");
    var Valeur = "";
    for(i=0;i<Parametres.length;i++){
    	if (Parametres[i].split("=")[0] == Parametre) Valeur = Parametres[i].substr(Parametres[i].search(/=/)+1);
    }//end for
    return(Valeur);
}//end function
 
function F_Sjax(Requete,Domaine) {
	if (typeof Domaine == "undefined") var Domaine = document.domain;
	if (Domaine == "localhost") var Domaine = F_Ini("localhost");	
	if (Domaine == "Production") var Domaine = F_Ini("Production");
	if (Domaine == "PreProduction") var Domaine = F_Ini("PreProduction");
	var BoucleRequête = true;
	//Boucle pour absorber les erreurs 500
	while (BoucleRequête) {
		var xhr = new ActiveXObject("Microsoft.XMLHTTP");
		xhr.open("POST","http://" + Domaine + "/Php/Ajax.php",false);
		xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
		xhr.send("Requete=" + Requete);
		if (xhr.responseText.indexOf("Network Error (tcp_error)") > 0) {
			xhr.close;
		}else{
			BoucleRequête = false;
		}//end if
	}//end while
	return(xhr.responseXML);
}//end function
 
function F_PageCharger(Page,Parametre) {
	if (Page == null) {
		parent.Page.window.location = "/Html/Blanc.html";
	}else{
		switch (Page.substr(0,2)) {
			case "F_": F_Fonction(Page,Parametre);break;
			case "FO": F_Formulaire(Page,Parametre);break;
			case "ET": F_Etat(Page,Parametre);break;
			case "LI": F_Liste(Page,Parametre);break;
			case "PL": F_Planning(Page,Parametre);break;
			case "GR": F_Graphe(Page,Parametre);break;
			default : F_Script(Page,Parametre);break;
		}//end switch
	}//end if
}//end function
Le fichier Ajax.php, qui permet de construire un XML à partir des résultats d'une requête SQL :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
header ('Content-type: text/xml');
include_once ($_SERVER["DOCUMENT_ROOT"]."/Classes/ClasseMappingSGBD.php");
 
$Requete = html_entity_decode(utf8_decode(stripslashes($_POST["Requete"])));
 
$Bdd = new MappingSGBD();
$Bdd->Connexion();
$Resultat = $Bdd->TableauDonnees($Requete);
 
//************* CREATION DU FICHIER XML 
echo "<?xml version=\"1.0\" encoding=\"ISO-8859-1\" ?>\n";
if ($Resultat == "1") {
	echo "<ResultatOk></ResultatOk>\n";
}else{
	if ($Bdd->Erreur()) {
		echo "<Erreur>".$Bdd->Erreur()."</Erreur>\n";
	}else{
		echo "<Data>\n";
		foreach ($Resultat as $Enregistrement) {
			echo "<Item>\n";
			for($i=0 ; $i < $Enregistrement->NombreLignes() ; $i++){
				$Code =   $Enregistrement->GetNomChamp($i);
				if ($Enregistrement->GetDonnee($Code) != null) {
					$Valeur = "<![CDATA[".$Enregistrement->GetDonnee($Code)."]]>";
				}else{
					$Valeur = "";
				}//end if
//				echo "<".htmlspecialchars($Code).">".htmlspecialchars($Valeur)."</".$Code.">";
				//$logger->info($Valeur);
				echo "<".$Code.">".$Valeur."</".$Code.">";
			}//end for
			echo "</Item>\n";
		}//end foreach
		echo "</Data>\n";
	}//end if
}//end if
Donc quasiment toutes les requêtes SQL sont exécutées dans le code JavaScript ...Ce n'est pas normal non ? Qu'est-ce que vous en pensez ?