Générer une requete sql avec javascript

Soyez le premier à donner votre avis sur cette source.

Vue 43 302 fois - Téléchargée 1 102 fois

Description

Il vous peut être arrivé de vouloir envoyer des informations à partir d'un formulaire dont tous les champs de saisie sont optionnels. Et par la suite de vous afficher sur une autre page le résultat d'une requête dont les critères de recherche proviennent de la page précédente.
Vous devez avant tout vérifier la saisie correcte des données et ensuite générer la requête adéquate qui sera exécuter dans la page suivante.
C'est ce que j'ai essayé de faire et que vous pourrez tester sur l'adresse suivante: www.ibs.sn/annuaire/.
Le code javascript de saisie vérification de la saisie du formulaire et de génération de la requête sql est le suivant:

Source / Exemple :


<script language="javascript">
function EnregistrerFiche()
{
	var saisie=0;
	var requete;
	if (document.form1.Nom.value!='')
	{	
		saisie++;
		requete="Nom='"+document.form1.Nom.value+"'";
	}
	
	if (document.form1.Prenom.value!='')
	{
		if (saisie>0)
		{	
			saisie++;
			requete=requete + " AND Prenom='"+document.form1.Prenom.value+"'";
		}
		else
		{	
			saisie++;
			requete="Prenom='"+document.form1.Prenom.value+"'";
		}
	}
	
	if (document.form1.Profession.value!='')
	{
		if (saisie>0)
			{
				saisie++;
				requete=requete+ " AND Profession='"+document.form1.Profession.value+"'";
			}
		else
			{
				saisie++;
				requete="Profession='"+document.form1.Profession.value+"'";
			}
	}
	
	if (document.form1.AnneeEntree.value!='Choisir une Annee')
	{
		if (saisie>0)
			{
				saisie++;
				requete=requete+ " AND AnneeEntree='"+document.form1.AnneeEntree.value+"'";
			}
		else
			{
				saisie++;
				requete="AnneeEntree='"+document.form1.AnneeEntree.value+"'";
			}
	}
	
	if (document.form1.SecteurActivite.value!='--Chosir un secteur--')
	{
		if (saisie>0)
			{
				saisie++;
				requete=requete+ " AND SecteurActivite='"+document.form1.SecteurActivite.value+"'";
			}
		else
			{
				saisie++;
				requete="SecteurActivite='"+document.form1.SecteurActivite.value+"'";
			}
	}
	
	if (saisie>0)
	{
		document.form1.UneRequete.value="SELECT * FROM annuaireibs WHERE "+requete;
		document.form1.submit();
	}
	else
		alert("Champs non saisis"); 
}
</script>

Conclusion :


En cliquant sur le bouton "Envoyer" du Formulaire de saisie dont le code est le suivant.
<input name="Bouton" type="button" id="Envoyer" onClick="EnregistrerFiche();" value="Recherche">,
la fonction "EnregistrerFiche()" est appelée, cette fonction teste l'ensemble des champs de saisie et dispose du compteur "saisie" qui permet de savoir si un champ a été saisi oui non. Et au fur et à mesure que les champs sont marqués comme contenant des valeurs, une requête sql est générée et stockée dans le champs texte caché et nommé "UneRequete".
Le formulaire est ensuite envoyé avec la méthode POST.
La valeur contenue dans le paramétre "UneRequete" est récupérée par la page d'affichage des résultats, qui à son tour l'exécute.

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

floflotz
Messages postés
241
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
6 janvier 2006
-
Je ne vois pas du tout l'intérêt de construire ta reqête côté client alors que tu peux le faire côté serveur !!!

En plus, il y a un gros problème de sécurité car on peut envoyer la requete que l'on veut à ton serveur (comme un 'delete *' par exemple).
cs_rahou
Messages postés
12
Date d'inscription
mercredi 10 décembre 2003
Statut
Membre
Dernière intervention
28 octobre 2006
-
la méthode d'envoie est POST, ce qui veut dire que la requête n'est pas visible côté client et ne peut en aucun cas être envoyé par une autre personne.
L'intérêt vient du fait que tous les champs de saisie sont optionnels et il faut bien construire la requête qu'il faut avant de l'envoyer vers la page d'exécution, bioensur, tout cela peut être fait côté serveur, mais une application javascript est quand même intéressante à voir. (On est sur www.javascriptfr.com quand même, toutes les folies sont permises)
floflotz
Messages postés
241
Date d'inscription
lundi 16 décembre 2002
Statut
Membre
Dernière intervention
6 janvier 2006
-
Certes toutes les folies sont permises mais ce code n'est pas un bon exemple pour la simple et bonne raison qu'elle est vraiment dangereuse !

Bien que tu utilise la méthode POST, on peut envoyer à ta page ce que l'on veut par deux moyens :
- utiliser un petit code indépendant en Javascript qui ferait uniquement le travail de validation par exemple 'document.form1.UneRequete.value="delete * FROM annuaireibs"; document.form1.submit();'
- faire un petit programme exécutable qui envoie une requête en POST à ta page et qui serait "delete * FROM annuairebis" !

Dans les 2 cas le code qui exécute ta requête coté serveur croirait que l'utilisateur a correctement remplit ses champs ! Ce serait désastreux pour ton site qui tomberait en 5 minutes.

Alors je suis d'accord que toutes les folies sont permises mais dans ce cas, précise que ce code est dangereux donc à éviter. C'est surtout dans l'intérêt des débutants qui pourrait voir ici une mauvaise méthode !
coucou747
Messages postés
12336
Date d'inscription
mardi 10 février 2004
Statut
Modérateur
Dernière intervention
30 juillet 2012
29 -
ou en telnet...

sur le net, c'est pas sécurisé, mais en local, ça peut être interessant...
cs_rahou
Messages postés
12
Date d'inscription
mercredi 10 décembre 2003
Statut
Membre
Dernière intervention
28 octobre 2006
-
Pour vous faire plaisir, je vais déposer une seconde version de ce code pour vous faire plaisir. Et cette version sera plus sécurisée.
Rendez-vous peut être sur les codes sources PHP.

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.