Gestion de numéro de téléphone simple dans firefox7

Contenu du snippet

Exemple simple en une seule page Html de gestion de table de base de données SQL Sqlite intégrée à firefox 7. La page, unique est sans ressource d'image mais il est possible d'en ajouter. Je souhaiterai la publier dans everyoneweb.fr mais je ne sais pas comment me passer du privège UniversalXPconnect indispensable à son fonctionnement (un peu comme l'activeX dans Internet Explorer). Ce que je pense ajouter de nouveau, c'est d'avoir une gestion complète en une seule page qui n'utilise pas une base de données externe mais présente dans le navigateur. Si il existe un moyen plus universel de procéder, merci de me le communiquer.

Source / Exemple :


<html>
<head>
<SCRIPT type="text/javascript">
function openDB(){
	netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
	Components.utils.import("resource://gre/modules/Services.jsm");
	Components.utils.import("resource://gre/modules/FileUtils.jsm");
	try{
		var file=FileUtils.getFile("ProfD", ["client.db"]);
	}
	catch(e){w(e);}
	try{
		var myDB=Services.storage.openDatabase(file);
	}
	catch(e){w(e);}
	try{
		myDB.executeSimpleSQL("CREATE TABLE memo(key TEXT,value TEXT)");
		alert("La Table de mémorisation est créée");
	}
	catch(e){}
	return (myDB);
}
function w(txt){
	document.writeln(txt);
}
function memForm(key){
	setMemo(key,document.forms.myForm[key].value);
}
function getMemo(key){
	netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
	var myDB=openDB();
	var result="";
	try{
		var s=myDB.createStatement('SELECT value FROM memo WHERE key="'+key+'"');
		if(s.executeStep()){
			result=s.row.value;
		}
		s.reset();
		return result;
	}
	catch(e){
		return("");
	}		
}
function razMemo(key){
	setMemo(key,"");
}
function delMemo(key){
	netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
	var myDB=openDB();
	try{
		myDB.executeSimpleSQL('DELETE FROM memo WHERE key="'+key+'"');
	}
	catch(e){}
}
function setMemo(key,value){
	netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
	var myDB=openDB();
	var flag=false;
	try{
		var s=myDB.createStatement('SELECT key FROM memo WHERE key="'+key+'"');
		if (s.executeStep()){
			flag=true;
		}
		s.reset();
	}
	catch(e){alert(e);}		
	if(flag){
		try{
			myDB.executeSimpleSQL("UPDATE memo SET value=\""+value+"\" WHERE key=\""+key+"\"");
		}
		catch(e){}
	}else{
		try{		
			myDB.executeSimpleSQL("INSERT INTO memo(key,value) VALUES (\""+key+"\",\""+value+"\")");
		}
		catch(e){}
	}
}
function dURL(){
	return document.URL;
}
function refresh(){
	document.location=dURL();
}
function miseAJour(memoChamp, baseChamp){
	netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
	var myDB=openDB();
	var cmd="UPDATE customer SET "+baseChamp+"=\""+getMemo(memoChamp)+"\" WHERE id="+getMemo("Numéro de client");
	try{
		myDB.executeSimpleSQL(cmd);
	}
	catch(e){w(e);}
}
</script>
</head>

<body>
<form id="myForm">
<SCRIPT type="text/javascript">
	netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
	var myDB=openDB();
	w("<p><a onclick=\"javascript:setMemo('Action','Aide');\" href=\""+dURL()+"\">Aide</a></p>");
	w("<p><a onclick=\"javascript:setMemo('Action','Gestion technique');\" href=\""+dURL()+"\">Gestion technique</a></p>");
	w("<p><a onclick=\"javascript:setMemo('Action','Gestion fonctionnelle');\" href=\""+dURL()+"\">Gestion fonctionnelle</a></p>");
	if(getMemo("Action")=="Aide"){
		w("<p><b>"+getMemo("Action")+"</b></p>");
		delMemo("Action");
		w("<p>Dans la gestion technique sont rassemblés les actions liées au fonctionnement de la page. ");
		w("Cette page pour fonctionner correctement doit utiliser le renard de feu 6 ou ultérieure et ");
		w("faire un usage continue au moteur de base de données de petit langage de commande de base de ");
		w("données intégré au navigateur, auquel elle accède à travers des commandes du langage SQL. ");
		w("Au démarrage de la page, sa programmation vérifie si elle peut se connecter la base de données ");
		w("clients, locale au bureau. Si elle n'y parvient pas, elle crée cette base de données et elle ");
		w("crée la table de mémorisation dont elle se sert pour stocker des paramètres de navigation à la ");
		w("manière des biscuits selon le terme anglais de même nom. Ces paramètres de navigation sont par ");
		w("exemple, l'enregistrement du lien de navigation sélectionné en vue de rafraîchir la page et ensuite, ");
		w("afficher les informations relatives au lien sélectionné. Cette page est un agenda téléphonique ");
		w("simple, proposant la mémorisation du nom d'un client, son prénom et son numéro de téléphone. ");
		w("Les différents éléments de la page s'articulent selon une gestion technique : Fonction de base ");
		w("au fonctionnement de la page et une gestion fonctionnelle ou métier qui oriente son choix vers ");
		w("des données physiques. Dans la gestion fonctionnelle vous trouverez des liens aux tables gérées, ");
		w("en l'occurrence ici il y en a qu'une seule, les clients. Ensuite quand la table des clients est ");
		w("choisie, d'autres choix sont offerts. Parmi ces choix vous trouverez, la création de la table, ");
		w("ce qui efface complètement la table des clients. Ce choix a besoin d'être confirmé une seconde ");
		w("fois par sécurité. D'autres choix comme : Créer un client, le rechercher. Créer un client attribut ");
		w("un numéro de client automatiquement, attribué selon le dernier numéro créé, plus un. La recherche ");
		w("d'un client se fait selon sont numéro de client, les autres critères de recherche restent à développer. ");
		w("Une fois le client trouvé, si il existe avec ce numéro client, il est affiché dans un tableau. Il ");
		w("est affiché dans un tableau au cas où d'autres modes de recherches sont développés alors plusieurs ");
		w("prénoms de clients peuvent être semblables et sont donc affichés dans le tableau sous la forme de ");
		w("plusieurs lignes dans le tableau. Le lien de navigation au niveau du numéro de client permet d'accéder ");
		w("à un formulaire de modification des informations relatives au client, sauf son numéro de client qui ");
		w("est définitif et ne peut être modifié. La modification de la valeur d'un champ du formulaire, suivie ");
		w("de l'appuie de la touche de tabulation, met à jour la valeur du champ dans la base de données. Il en ");
		w("est de même lors d'un click sur un autre champ du formulaire ou d'un lien navigation présent sur la ");
		w("page. L'indexation permet d'accélérer la recherche d'information, elle est indispensable lorsque le ");
		w("volume d'information est important. Elle se fait avec l'aide d'une clef ou un ensemble de clées qui ");
		w("sont triées dans une table séparée, table spéciale ou d'index. Quand l'index relatif à la clef de ");
		w("l'information recherchée n'est pas présente, la table où se trouve toutes les données, est parcourue ");
		w("intégralement. Ce qui prend beaucoup de temps si la table est volumineuse. Un index doit de temps en temps ");
		w("être recréé. Car au cours des insertions ou suppressions d'enregistrements, les données sont ajoutées ");
		w("ou supprimées de l'index et celui-ci qui est un arbre binaire, se complète jusqu'à saturation et devient ");
		w("moins efficace et donc moins rapide.</p>");
	}
	if(getMemo("Action")=="Gestion technique"){
		w("<p><b>"+getMemo("Action")+"</b></p>");
		delMemo("Action");
		w("<p><a onclick=\"javascript:setMemo('Action','Créer la table des mémorisations');\" href=\""+dURL()+"\">Créer la table des mémorisations</a></p>");
	}
	if(getMemo("Action")=="Créer la table des mémorisations"){
		w("<p><b>"+getMemo("Action")+"</b></p>");
		delMemo("Action");
		w("<p><a onclick=\"javascript:setMemo('Action','Validation de la création de la table des mémorisations');\" href=\""+dURL()+"\">Validation de la création de la table des mémorisation</a></p>");
	}
	if(getMemo("Action")=="Validation de la création de la table des mémorisations"){
		w("<p><b>"+getMemo("Action")+"</b></p>");
		delMemo("Action");
		try{
			myDB.executeSimpleSQL("DROP TABLE memo");
			w("<p>Table des mémorisations supprimée<p>");
		}
		catch(e){
			w("<p>La table des mémorisations n'existe pas</p>");
		}
		try{
			myDB.executeSimpleSQL("CREATE TABLE memo(key TEXT,value TEXT)");
			w("<p>La Table des mémorisations est créée</p>");
		}
		catch(e){
			w("<p>Impossible de créer la table des mémorisations</p>");
		}
		try{
			myDB.executeSimpleSQL("CREATE UNIQUE INDEX ind_memo ON memo(key)");
			w("<p>L'index sur la clée de la table des mémorisation est créé</p>");
		}
		catch(e){
			w("<p>Impossible de créer l'index sur la clée de la table des mémorisations</p>");
		}
	}
	if(getMemo("Action")=="Gestion fonctionnelle"){
		w("<p><b>"+getMemo("Action")+"</b></p>");
		delMemo("Action");
		w("<p><a onclick=\"javascript:setMemo('Action','Gestion des clients');\" href=\""+dURL()+"\">Gestion des clients</a></p>");
	}
	if(getMemo("Action")=="Gestion des clients"){
		w("<p><b>"+getMemo("Action")+"</b></p>");
		delMemo("Action");
		w("<p><a onclick=\"javascript:setMemo('Action','Créer et indexer la table des clients');\" href=\""+dURL()+"\">Créer et indexer la table des clients</a></p>");
		w("<p><a onclick=\"javascript:setMemo('Action','Indexer la table des clients');\" href=\""+dURL()+"\">Indexer la table des clients</a></p>");
		w("<p><a onclick=\"javascript:setMemo('Action','Créer un client');\" href=\""+dURL()+"\">Créer un client</a></p>");
		w("<p><a onclick=\"javascript:setMemo('Action','Rechercher un client');\" href=\""+dURL()+"\">Rechercher un client</a></p>");
	}
	if(getMemo("Action")=="Créer et indexer la table des clients"){
		w("<p><b>"+getMemo("Action")+"</b></p>");
		delMemo("Action");
		w("<p><a onclick=\"javascript:setMemo('Action','Validation de la création et indexation de la table des clients');\" href=\""+dURL()+"\">Validation de la création de la table des clients</a></p>");
	}
	if(getMemo("Action")=="Validation de la création et indexation de la table des clients"){
		w("<p><b>"+getMemo("Action")+"</b></p>");
		delMemo("Action");
		try{
			myDB.executeSimpleSQL("DROP TABLE customer");
			w("<p>Table des clients supprimée<p>");
		}
		catch(e){
			w("<p>La table des clients n'existe pas</p>");
		}
		try{
			myDB.executeSimpleSQL("CREATE TABLE customer(id INT,name TEXT,firstname TEXT,phone_number TEXT)");
			w("<p>La Table des clients est créée</p>");
		}
		catch(e){
			w("<p>Impossible de créer la table des clients</p>");
		}
		try{
			myDB.executeSimpleSQL("CREATE UNIQUE INDEX ind_custom ON customer(id)");
			w("<p>L'index sur le numéro de ligne de la table des clients est créé</p>");
		}
		catch(e){
			w("<p>Impossible de créer l'index sur le numéro de ligne de la table des clients</p>");
		}
	}
	if(getMemo("Action")=="Indexer la table des clients"){
		w("<p><b>"+getMemo("Action")+"</b></p>");
		delMemo("Action");
		w("<p>L'indexation permet d'accélérer la recherche en créant une table secondaire où une clef d'accès est triée et fait référence à la table principale. Evite ainsi de parcourir la table entièrement en accédant directement à l'information en utilisant l'index.</p>");
		w("<p><a onclick=\"javascript:setMemo('Action','Validation pour indexer la table des clients');\" href=\""+dURL()+"\">Validation de l'indexation de la table des clients</a></p>");
	}
	if(getMemo("Action")=="Validation pour indexer la table des clients"){
		w("<p><b>"+getMemo("Action")+"</b></p>");
		delMemo("Action");
		try{
			myDB.executeSimpleSQL("DROP INDEX ind_custom");
			w("<p>L'index unique sur le numéro de client de la table des clients est supprimé<p>");
		}
		catch(e){
			w("<p>L'index unique sur le numéro de client de la table des clients n'existe pas</p>");
		}
		try{
			myDB.executeSimpleSQL("CREATE UNIQUE INDEX ind_custom ON customer(id)");
			w("<p>L'index unique sur le numéro de client de la table des clients est créé</p>");
		}
		catch(e){
			w("<p>Impossible de créer l'index unique sur le numéro de client de la table des clients</p>");
		}
	}
	if(getMemo("Action")=="Créer un client"){
		w("<p><b>"+getMemo("Action")+"</b></p>");
		delMemo("Action");
		w("<table border=1>");
		w("<tr><td>Champ</td><td>Valeur</td></tr>");
		delMemo("Nom du client");
		w("<tr><td>Nom du client</td><td><input name=\"Nom du client\" type=\"text\" size=30 onchange=\"javascript:memForm('Nom du client');\"></input></td></tr>");
		delMemo("Prénom du client");
		w("<tr><td>Prénom du client</td><td><input name=\"Prénom du client\" type=\"text\" size=30 onchange=\"javascript:memForm('Prénom du client');\"></input></td></tr>");
		delMemo("Numéro de téléphone du client");
		w("<tr><td>Numéro de téléphone du client</td><td><input name=\"Numéro de téléphone du client\" type=\"text\" size=30 onchange=\"javascript:memForm('Numéro de téléphone du client');\"></input></td></tr>");
		w("</table>");
		w("<p><a onclick=\"javascript:setMemo('Action','Validation de la création du nouveau client');\" href=\""+dURL()+"\">Validation de la création du nouveau client</a></p>");
	}
	if(getMemo("Action")=="Validation de la création du nouveau client"){
		w("<p><b>"+getMemo("Action")+"</b></p>");
		delMemo("Action");
		var id=0;
		try{
			var s=myDB.createStatement('SELECT id FROM customer ORDER BY id DESC');
			if(s.executeStep()){
				id=s.row.id;
				id++;
			}else{
				id=1;
			}
			s.reset();
		}
		catch(e){
			w("<p>Impossible de d'estimer le numéro attribué au client<p>");
		}
		if(id){
			try{
				var cmd="INSERT INTO customer(id,name,firstname,phone_number) VALUES ("+id+",\""+getMemo("Nom du client")+"\",\""+getMemo("Prénom du client")+"\",\""+getMemo("Numéro de téléphone du client")+"\")";
				myDB.executeSimpleSQL(cmd);
				w("<p>Client créé avec le numéro "+id+"</p>");
				w("<p><a onclick=\"javascript:setMemo('Numéro de client',"+id+");setMemo('Action','Modification du client');\" href=\""+dURL()+"\">Modification du client</a></p>");
			}
			catch(e){w("<p>"+e+"</p>");}
		}
			
	}
	if(getMemo("Action")=="Rechercher un client"){
		w("<p><b>"+getMemo("Action")+"</b></p>");
		delMemo("Action");
		w("<table border=1>");
		w("<tr><td>Champ</td><td>Valeur</td></tr>");
		delMemo("Numéro de client");
		w("<tr><td>Numéro de client</td><td><input name=\"Numéro de client\" type=\"text\" size=10 onchange=\"javascript:memForm('Numéro de client');\"></input></td></tr>");
		delMemo("Nom du client");
		w("<tr><td>Nom du client</td><td><input name=\"Nom du client\" type=\"text\" size=30 onchange=\"javascript:memForm('Nom du client');\"></input></td></tr>");
		delMemo("Prénom du client");
		w("<tr><td>Prénom du client</td><td><input name=\"Prénom du client\" type=\"text\" size=30 onchange=\"javascript:memForm('Prénom du client');\"></input></td></tr>");
		delMemo("Numéro de téléphone du client");
		w("<tr><td>Numéro de téléphone du client</td><td><input name=\"Numéro de téléphone du client\" type=\"text\" size=30 onchange=\"javascript:memForm('Numéro de téléphone du client');\"></input></td></tr>");
		w("</table>");
		w("<p><a onclick=\"javascript:setMemo('Action','Validation de la recherche du client');\" href=\""+dURL()+"\">Validation de la recherche du client</a></p>");
	}
	if(getMemo("Action")=="Validation de la recherche du client"){
		w("<p><b>"+getMemo("Action")+"</b></p>");
		delMemo("Action");
		
		try{
			var cmd="SELECT * FROM customer WHERE id="+getMemo("Numéro de client");
			var s=myDB.createStatement(cmd);
			var count=0;
			if(s.executeStep()){
				count++;
				if(count==1){
					w("<table border=1>");
					w("<tr><td>ID</td><td>NOM</td><td>PRENOM</td><td>NUMERO DE TELEPHONE</td></tr>");
				}
				w("<tr><td><a href=\""+dURL()+"\" onclick=\"javascript:setMemo('Action','Modification du client');setMemo('Numéro de client',"+s.row.id+");\">"+s.row.id+"</a></td>");
				w("<td>"+s.row.name+"</td>");
				w("<td>"+s.row.firstname+"</td>");
				w("<td>"+s.row.phone_number+"</td></tr>");
			}
			s.reset();
			if(count){
				w("</table>");
				w("<p>"+count+" client(s) répond(ent) à la sélection</p>");
			}else{
				w("<p>Pas de client avec ce numéro</p>");
			}
		}
		catch(e){
			w(e);
		}
	}
	if(getMemo("Action")=="Modification du client"){
		w("<p><b>"+getMemo("Action")+"</b></p>");
		delMemo("Action");
		try{
			var cmd="SELECT * FROM customer WHERE id="+getMemo("Numéro de client");
			var s=myDB.createStatement(cmd);
			if(s.executeStep()){
				w("<table border=1>");
				w("<tr><td>Numéro de client</td><td aline=right>"+getMemo("Numéro de client")+"</td></tr>");
				w("<tr><td>Nom du client</td><td><input name=\"Nom du client\" type=\"text\" size=30 value=\""+s.row.name+"\" onchange=\"javascript:memForm('Nom du client');miseAJour('Nom du client','name');\"></input></td></tr>");
				w("<tr><td>Prénom du client</td><td><input name=\"Prénom du client\" type=\"text\" size=30 value=\""+s.row.firstname+"\" onchange=\"javascript:memForm('Prénom du client');miseAJour('Prénom du client','firstname');\"></input></td></tr>");
				w("<tr><td>Numéro de téléphone du client</td><td><input name=\"Numéro de téléphone du client\" type=\"text\" size=30 value=\""+s.row.phone_number+"\" onchange=\"javascript:memForm('Numéro de téléphone du client');miseAJour('Numéro de téléphone du client','phone_number');\"></input></td></tr>");
				w("</table>");
				w("<p><a href=\""+dURL()+"\">Mettre à jour ce client</a></p>");
				w("<p><a onclick=\"javascript:setMemo('Action','Supprimer ce client');\" href=\""+dURL()+"\">Supprimer ce client</a></p>");

			}
			s.reset();
		}
		catch(e){
			w(e);
		}
	}
	if(getMemo("Action")=="Supprimer ce client"){
		w("<p><b>"+getMemo("Action")+"</b></p>");
		delMemo("Action");
		w("<p><a onclick=\"javascript:setMemo('Action','Validation de la suppression de ce client');\" href=\""+dURL()+"\">Validation de la suppression du client numéro "+getMemo("Numéro de client")+"</a></p>");
	}
	if(getMemo("Action")=="Validation de la suppression de ce client"){
		w("<p><b>"+getMemo("Action")+"</b></p>");
		delMemo("Action");
		try{
			myDB.executeSimpleSQL('DELETE FROM customer WHERE id='+getMemo("Numéro de client"));
			w("<p>Client supprimé</p>");
		}
		catch(e){
			w("<p>"+e+"</p>");
		}
	}
	w("<p>fin de la page</p>");
</script>
</form>
</body>
</html>

Conclusion :


J'aimerai faire d'autres exemples selon la même base de travail et surtout pouvoir les publier sur un site gratuis de présentation de contenu. Mes recherches ne m'ont pas encore permis de trouver la solution idéale.

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.