• Aucun résultat trouvé

Au coeur du web participatif : AJAX

N/A
N/A
Protected

Academic year: 2022

Partager "Au coeur du web participatif : AJAX"

Copied!
8
0
0

Texte intégral

(1)

Annexe 2 : annexe.pdf

Annexe au travail de diplôme

Haute École de Gestion de Genève (HEG-GE)

Filière Informatique de Gestion

(2)

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

<!--- ---- Fichier: commune.html ---- Auteur: Alain PELLAUX ---- Dernière modification: 16/10/2007 --->

<html>

<head>

<title>Communes Romandes</title>

<script type="text/javascript" src="fonctions_js.js"></script>

<link rel="stylesheet" type="text/css" href="style.css">

</head>

<body onload="init_page()">

<noscript><center>Attention, JavaScript est d&eacute;sactiv&eacute; et la page ne peut fonctionner correctement!</center></noscript>

<p align="center"><span class="titre">Communes Romandes</span></p>

<center>

<script>document.onmousedown = clic_droit;</script>

<form name="formulaire" id="formulaire">

<input type="text" name="saisie" id="saisie" onKeyUp='javascript:go(encodeURIComponent(document.getElementById("saisie").value));'>

<div id="traitement"></div><br />

<br />

<br />

<div id="resultat"></div>

</form>

</center>

</body>

</html>

commune.html 16.11.2007 11:03

(3)

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

/***********************************

** Fichier: fonctions_js.js

** Auteur: Alain PELLAUX

** Dernière modification: 02/11/2007

***********************************/

/* fonction retournant une instance de l'objet XHRHttpRequest

** compatible avec les différents navigateurs supportant l'objet XHR*/

function get_xhr(){

var xhr = null;

// Pour Internet Explorer if (window.ActiveXObject){

try{

xhr = new ActiveXObject("Microsoft.XMLHTTP");

}

catch (e){

xhr = new ActiveXObject("Msxml2.XMLHTTP");

}

// Autres navigateurs

} else if(window.XMLHttpRequest){

xhr = new XMLHttpRequest();

// ajoute un en-tête XML if(xhr.overrideMimeType){

xhr.overrideMimeType("text/xml");

}

// Navigateur incompatible } else {

alert("Navigateur incompatible avec AJAX");

}

return xhr;

} // get_xhr

// initialise les différents paramètres au chargement de la page function init_page(){

// désactive l'auto-complétion automatique du navigateur

document.getElementById('saisie').setAttribute("autocomplete","off");

} // init_page

// mets en page le document XML reçu en paramètre et retourne la réponse mise en page function traite_docXML(docXML){

var reponse = "";

if (docXML.getElementsByTagName("commune").length == 0) {

reponse = "<span class=\"aucune_commune\">Aucune commune ne correspond &agrave; la recherche.</span>";

} else{

reponse += "<table><tr>";

for (i=0;i < docXML.getElementsByTagName("commune").length; i++){

if (i%5 ==0 && i>0){

reponse += "</tr><tr width=\"200px\">";

}

fonctions_js.js 16.11.2007 11:05

Page 1 of 2

(4)

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

reponse += "<td><center><table class=\"commune\"><tr><th colspan=2 class=\"nom_commune\">";

reponse += docXML.getElementsByTagName("nom")[i].childNodes[0].data + "</th></tr>";

reponse += "<tr><td class=\"image_canton\"><img width=60 height=75 src=\"";

reponse += docXML.getElementsByTagName("image")[i].childNodes[0].data + "\"></td>";

reponse += "<td class=\"infos_canton\">" + docXML.getElementsByTagName("npa")[i].childNodes[0].data;

reponse += "<br />" + docXML.getElementsByTagName("localite")[i].childNodes[0].data + "</td></tr></table></center></td>";

}

reponse += "</tr></table>";

}

return reponse;

} // traite_docXML

/* crée un objet XMLHttpRequest à l'aide de la méthode get_xhr() et appelle la function() lorsqu'onreadystatechange se produit.

** Affiche les résultats mis en page lorsque tout c'est bien passé (readyState==4 et status==200) et que saisie n'est pas nulle,

** n'affiche rien sinon. Si les données sont en train d'être reçues (readyState==3), affiche un message */

function go(saisie){

var xhr = get_xhr();

if (xhr != null){

xhr.onreadystatechange = function(){

if (xhr.readyState==3){

document.getElementById('traitement').innerHTML = "<span class=\"traitement\">En cours de traitement...</span>";

} else if (xhr.readyState==4 && xhr.status==200){

if (saisie != ""){

var communes = xhr.responseXML;

document.getElementById('resultat').innerHTML = traite_docXML(communes);

document.getElementById('traitement').innerHTML = "Ok!";

}else {

document.getElementById('resultat').innerHTML = "";

document.getElementById('traitement').innerHTML = "";

} }

} // function }

xhr.open("GET", "serveur.php?saisie="+saisie, true);

xhr.send(null);

} // go

/* sert a contrer le copier/coller avec la souris, lors d'un clic droit la fonction setTimeout

** déclenche la fonction go() après 2 secondes */

function clic_droit(e){

if ((!document.all && e.which == 3) || (document.all && event.button==2)){

window.setTimeout("go(encodeURIComponent(document.getElementById(\"saisie\").value))", 2000);

}

return true;

}

fonctions_js.js 16.11.2007 11:05

(5)

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

<?php

/*******************************************************************

** Fichier: serveur.php

** Auteur: Alain PELLAUX

** Dernière modification: 11/10/2007

** utf8_encode(): encode la chaine au format utf8

** utf8_decode(): convertit une chaine utf8 en une chaine ISO-8859-1

*******************************************************************/

// indique que c'est un document XML et impose le charset UTF-8 header('Content-Type: text/xml; charset=utf-8');

// connexion à la bdd

$db = mysql_connect('.', 'login', 'mot de passe');

mysql_select_db('asap',$db) or die ("Impossible de se connecter à la bdd");

// enregistrement de la saisie

$saisie_test = $_GET['saisie'];

$req_saisie="INSERT INTO saisies (saisie) VALUES ('$saisie_test')";

$res_req = mysql_query($req_saisie);

// récupération de la saisie de l'utilisateur

$saisie = isset($_GET['saisie'])?utf8_decode($_GET['saisie']):'';

// construction de la requête

$req_sql='SELECT com_nom AS nom, com_canton AS canton, com_npa AS npa, com_localite AS localite, com_image AS image FROM communes';

$req_sql .= ' WHERE com_nom LIKE \''.$saisie. '%\'';

$req_sql .= ' ORDER BY com_nom';

// prologue du fichier XML

echo (utf8_encode("<?xml version='1.0' encoding='utf-8' ?>"));

// ouverture de la balise racine echo ("<communes>");

// exécution de la requête ou message d'erreur en cas d'échec

$res_req = mysql_query($req_sql) or die ("<b>Erreur SQL:</b><br />".mysql_error());

// traitement des résultats, construction des balises XML avec les résultats while($donnee = mysql_fetch_assoc($res_req)):

echo ("<commune>");

echo utf8_encode("<nom>".$donnee['nom']."</nom>");

echo utf8_encode("<canton>".$donnee['canton']."</canton>");

echo utf8_encode("<npa>".$donnee['npa']."</npa>");

echo utf8_encode("<localite>".$donnee['localite']."</localite>");

echo utf8_encode("<image>".$donnee['image']."</image>");

echo ("</commune>");

endwhile;

// fermeture de la balise racine echo ("</communes>");

// fermeture de la connexion à la bdd mysql_close($db);

?>

serveur.php 26.11.2007 11:53

Page 1 of 1

(6)

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

/***********************************

** Fichier: style.css

** Auteur: Alain PELLAUX

** Dernière modification: 23/10/2007

***********************************/

.titre{

color:#000000;

font-size: 2em;

}

.aucune_commune{

color:#FF0000;

font-style: italic;

}

.traitement{

color:#FF0000;

font-style: italic;

}

.commune{

width:200px;

}

.image_canton{

width:100px;

}

.infos_canton{

width:100px;

} table{

border-spacing: 10px;

} td{

background-color:#00FFFF;

}

noscript{

color:#FF0000;

font-size: 1.2em;

}

style.css 16.11.2007 11:04

(7)

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

<?php

/****************************************************************************************************************************************

**

** Fichier: conv_csv.php

** Auteur: Alain PELLAUX

** D'après une modification du code de l'article:

http://www.journaldunet.com/developpeur/tutoriel/php/041214-php-fichier-csv-tableau.shtml

** Dernière modification: 01/11/2007

*****************************************************************************************************************************************

*/

/* pour le fichier csv

** fopen() ouvre le fichier en lecture seule */

$fichier = "liste_cantons.csv";

$fic = fopen($fichier, 'rb');

/* pour le fichier destination

** fopen() ouvre le fichier en écriture seule, s'il n'existe pas on le créé */

$fichier_dest = fopen("liste_commune.sql","a");

//"entete" du fichier sql, détermine le script de création de la BDD

$sql = "DROP DATABASE IF EXISTS `communes`;"."\n";

$sql .= "CREATE DATABASE `communes` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;"."\n";

$sql .= "USE `communes`;"."\n";

$sql .= "CREATE TABLE `communes` (`com_id` INTEGER NOT NULL AUTO_INCREMENT,`com_nom` VARCHAR(25),`com_canton` VARCHAR(25), `com_npa`

INTEGER, `com_localite` VARCHAR(25), `com_image` VARCHAR(25), CONSTRAINT `pk_communes` PRIMARY KEY (`com_id`));"."\n";

//écrit $sql dans le fichier de destination et va à la ligne fputs($fichier_dest,$sql."\n");

/* fgetcsv() Renvoie la ligne courante et cherche les champs CSV

** feof() Teste la fin du fichier

** sizeof() Compte le nombre d'éléments d'un tableau ou le nombre de propriétés d'un objet

** explode() Coupe une chaîne en segments

** addslashes Ajoute des anti-slash dans une chaîne */

for ($ligne = fgetcsv($fic, 1024); !feof($fic); $ligne = fgetcsv($fic, 1024)):

$j = sizeof($ligne);

for ($i = 0; $i < $j; $i++):

$la_ligne = explode(";", $ligne[$i]);

$nom = addslashes($la_ligne[0]);

switch($la_ligne[1]):

case 'Fribourg':

$a_inserer = "INSERT INTO `communes` (`com_nom`, `com_canton`, `com_npa`, `com_localite`, `com_image`) VALUES ('$nom', '$la_ligne[1]', '$la_ligne[2]', '$la_ligne[3]', 'images/fribourg.gif');";

break;

case 'Genève':

$a_inserer = "INSERT INTO `communes` (`com_nom`, `com_canton`, `com_npa`, `com_localite`, `com_image`) VALUES ('$nom', '$la_ligne[1]', '$la_ligne[2]', '$la_ligne[3]', 'images/geneve.gif');";

break;

case 'Jura':

conv_csv.php 16.11.2007 11:07

Page 1 of 2

(8)

45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64

$a_inserer = "INSERT INTO `communes` (`com_nom`, `com_canton`, `com_npa`, `com_localite`, `com_image`) VALUES ('$nom', '$la_ligne[1]', '$la_ligne[2]', '$la_ligne[3]', 'images/jura.gif');";

break;

case 'Neuchâtel':

$a_inserer = "INSERT INTO `communes` (`com_nom`, `com_canton`, `com_npa`, `com_localite`, `com_image`) VALUES ('$nom', '$la_ligne[1]', '$la_ligne[2]', '$la_ligne[3]', 'images/neuchatel.gif');";

break;

case 'Valais':

$a_inserer = "INSERT INTO `communes` (`com_nom`, `com_canton`, `com_npa`, `com_localite`, `com_image`) VALUES ('$nom', '$la_ligne[1]', '$la_ligne[2]', '$la_ligne[3]', 'images/valais.gif');";

break;

case 'Vaud':

$a_inserer = "INSERT INTO `communes` (`com_nom`, `com_canton`, `com_npa`, `com_localite`, `com_image`) VALUES ('$nom', '$la_ligne[1]', '$la_ligne[2]', '$la_ligne[3]', 'images/vaud.gif');";

break;

endswitch;

fputs($fichier_dest,$a_inserer."\n");

endfor;

endfor;

//fermeture du fichier de destination fclose($fichier_dest);

?>

conv_csv.php 16.11.2007 11:07

Références

Documents relatifs

Dès la rentrée de septembre 2021, La Haute école de santé de Genève (HEdS-Genève) va accueillir deux nouvelles Responsables pour ses filières Nutrition et diététique

occidentale, la HES-SO Genève se compose de: la Haute école du paysage, d'ingénierie et d'architecture - HEPIA, la Haute école de gestion - HEG, la Haute école d’art et de design

occidentale, la HES-SO Genève est composée de : la Haute école du paysage, d'ingénierie et d'architecture -HEPIA, la Haute école de gestion – HEG, la Haute école d’art et

Ajax n’est pourtant pas exempt de défauts, à commencer par le fait qu’il ne peut fonctionner qu’avec les navigateurs dont l’utilisateur n’a pas désactivé JavaScript, de

Or, il n’existe pas à ma connaissance de norme ni de best practice à l’heure actuelle décrivant la bonne manière de mettre en place un système de management de la qualité dans

Orchestre et solistes de la Haute école de musique de Genève et du Conservatoire de musique neuchâtelois. ENTRÉE LIBRE

La politique documentaire 57 que nous avons rédigée définit les orientations générales du bouquet de liens : les missions et le public de l'Infothèque, le type de documents et

Cliquez ici pour telecharger le