begin process at 2010 03 16 21:38:58
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Trucs & Astuces

 > GÉNÉRER UNE REQUETE SQL AVEC JAVASCRIPT

GÉNÉRER UNE REQUETE SQL AVEC JAVASCRIPT


 Information sur la source

Note :
5 / 10 - par 7 personnes
5,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Trucs & Astuces Niveau :Débutant Date de création :18/07/2005 Vu / téléchargé :28 218 / 689

Auteur : rahou

Ecrire un message privé
Site perso
Commentaire sur cette source (11)
Ajouter un commentaire et/ou une note

 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

  • <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>
<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.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Sources du même auteur

VÉRIFIER DES CHAMPS DE SAISIES 'UN FORMULAIRE

 Sources de la même categorie

ACCÈS À LA MÉTHODE SETATTRIBUTE('STYLE','') SOUS IE6 par masternico
OUTIL DE SÉLECTION par jdmcreator
Source avec Zip SIMPLIFIER LA CREATION DYNAMIQUE D'ELEMENT HTML par kazma
DÉTECTER SI CSS EST ACTIVÉ par jdmcreator
RETROUVER LE NUMÉROS DE TELEPHONE DE VOTRE EMPLOYER RAPIDEME... par rappise

Commentaires et avis

Commentaire de floflotz le 19/07/2005 00:06:51

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).

Commentaire de rahou le 19/07/2005 10:00:20

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)

Commentaire de floflotz le 19/07/2005 12:05:20

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  !

Commentaire de coucou747 le 19/07/2005 13:08:29

ou en telnet...

sur le net, c'est pas sécurisé, mais en local, ça peut être interessant...

Commentaire de rahou le 19/07/2005 16:50:36

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.

Commentaire de coucou747 le 19/07/2005 20:28:24

poste pas ta source en double non plus !

Commentaire de nicovmd le 11/08/2005 16:18:16

Avis à tous : n'utilisez JAMAIS un code comme celui-ci.
La génération de requête SQL est à faire coté serveur. Dans une architecture web, le client ne doit jamais manipuler de requête SQL! Il faut bien comprendre ce qui se passe du coté client et du coté serveur.
Bref, ce code est une abbération, une faille de sécurité énorme, à ne JAMAIS utiliser.

(désolé pour l'auteur)

Commentaire de decaPeter le 24/01/2006 17:11:17

et bien moi je trouve ton code merveilleux et il va m'etre tres utile car cest exactement ce que je cherchais a faire. bon ok moi je rajoute un script qui sert de compteur de réponse en temps réel... si vous voulez vous inspirer:

<script>
function calcul () {
var val1=0;
var val2=0;
var val3=0;
if(document.caddie.select1.value != "Composantes"){
val1=document.caddie.select1.value;
caddie.Total.value=val1;
}
if(document.caddie.select2.value != "Légumes"){
val2=document.caddie.select2.value;
caddie.Total2.value=val2;
}
var totaux = val1 - val2 - val3;
caddie.totaux.value = totaux;
}
</script><body onload="calcul(this)">
<FORM name="caddie">
<SELECT name="select1" onchange="calcul(this)">
<OPTION SELECTED>Composantes
<OPTION VALUE="Potages">Potages
<OPTION VALUE="Entrée froides">Entrées froides
<OPTION VALUE="Entrées chaudes">Entrées chaudes
</SELECT>
<br>
<SELECT name="select2" onchange="calcul(this)">
<OPTION SELECTED>Légumes
<OPTION VALUE=1>Artichaud
<OPTION VALUE=2>Asperge
<OPTION VALUE=3>Auberge
</SELECT>
<br>
<br>Total:
<input type="text" name="totaux" value="1000" size="8" readonly>
<br>
<input type="submit" name="chercher" value="Rechercher">
</FORM>
</body>


cest ptet pas tres propre mais ca marche...

bon codage a tous :)

Commentaire de Mirtador le 19/08/2007 16:51:58

Bon je crain de devoir dire comme mes confrère plus haut. Ton site ce fait cracker extraimemant aisémant pour vue que tu connaisse un peut le code du site..., J'ai pas trop eu le temp de lire ton code, mais il n'y intervien aucune page PHP... Donc tu fait un appelle plus ou moin directe à ta BD... Le java script s'execute coter client, il est donc influenssable par l'utilisateur.

pour le post un java script de 2 ligne casse ça avec l'objet de XMLHttpRequest ca prend pas de temp

La bonne chose a faire c'est faire une page PHP qui elle parle avec la BD et ton client l'intéroge pour avoir les information qui t'intéresse. Sur la page PHP tu fait la sécurité en controlant toute entré malsaine.


En aucun cas il faut donner un accet au client de la BD

en espérent t'avoir donner des idée pour ta prochaine version ;)

Commentaire de omny le 10/11/2009 14:36:21

c'est bien de vouloir fait tout avec javascript, mais si il y a un risque il faut le dire sans gène, ce n'est pas parcequ'on est sur www.javascript qu'on va accepté des codes bidons, alors dit moi comment crée une requête java-script sécurisante, seulement avec java script et SQL  coté serveur ?  merci

Commentaire de decaPeter le 10/11/2009 18:47:13

merci Mirtador pour tes remarques.
Je ne me souviens plus comment j'ai mis en place ce script (qui n'est qu'un extrait ici car la version complete est plus complexe) mais il est en place depuis plus de 3ans et il n'y a jamais eu le moindre probleme de sécurité.

ps: merci omny pour ta remarque fort constructive, j'apprécie tout particulièrement le "code bidon" et tes qualités de rédacteur

 Ajouter un commentaire




Nos sponsors


Sondage...

Comparez les prix

CalendriCode

Mars 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728
293031    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,796 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales