|
Publicité ' | ||||||||||||||||||||||||
|
|
#1 | ||||||
|
Expert Confirmé Sénior
![]() ![]() ![]() Inscription : mars 2004 Messages : 6 387 ![]() |
Salut,
Comme souvent on a de bonnes idées pour se faciliter la vie pourquoi ne pas en faire profiter tout le monde? ![]() Ajouter tout ce qui peux aider à la suite de ce message. Merci ![]() ---------------------------------------------------------------------------- ---------------------------------------------------------------------------- Salut à tous (débutants comme confirmés), Voici un retour sur experience qui peut se résumer ainsi: UTILISEZ DES CLASSES!!! Je m'explique (et ça n'engage que moi). L'informatique c'est pour les fainéants (j'en suis un gros). Je ne rechigne pas à la tâche, mais quand mon PC peut bosser à ma place, je suis content. En conséquence cherchez toujours à vous économisez vous bosserez moins et vous gagnerez plus (de temps...). Comment? En ecrivant le moins de code possible pardi!! Je vois souvent des kilomètres de codes linéaires! A mort! Ne répétez jamais deux fois le même code. FACTORISEZ. Et en pratique? Comme dit le post précédent allez voir le tuto sur les classes. Si vous ne comprennez pas (j'avoue que j'ai eu du mal la première fois) voici un exemple sur lequel méditer: 1 - Créez une page "cls_Parent.asp" 2 - Collez ce code dedans. Sauvegardez. Code :
4 - Collez ce code dedans. Sauvegardez. Code :
6 - Collez ce code dedans. Sauvegardez. Code :
8 - Méditez 9 - Poses vos question si vous en avez. Vous aurez une approche objet de l'ASP. Très utile pour passer au .NET par la suite. A+ |
||||||
|
00
|
|
|
#2 | ||||||
|
Expert Confirmé Sénior
![]() ![]() ![]() Inscription : mars 2004 Messages : 6 387 ![]() |
Re,
Sympa ces histoires de familles, mais comment pouvez-vous transposer cet exemple à quelque chose d'utile pour vous? Et bien c'est super simple. Je vois souvent des chaines de connections dans chacune de vos pages. Du code qui ressemble à ceci: Code :
![]() Cette façon de faire pose un énorme problème. Le jour où vous déplacez, renommez ou migrez la base vers du SQL, il faut retrouver toutes les occurences de la chaine de connection et les modifier. Voici comment faire mieux. Principe: on va créer une classe qui va se charger de nous fournir la connection dont on a besoin. Code :
Code :
A+ |
||||||
|
00
|
|
|
#3 | ||||||
|
Expert Confirmé Sénior
![]() ![]() ![]() Inscription : mars 2004 Messages : 6 387 ![]() |
Re,
Bon, continuons sur notre lancée sur la question de l'organisation d'une page. Ici encore, il y a plusieurs façons mais grosso modo, je dirais:
) d'intérêts à l'utiliser. Ah si, cela permet à votre EDI préféré de renvoyer un rendu de votre page quand vous passez en mode "design".Au contraire, la méthode modulaire permet de découper le code et d'en executer tout ou partie selon le résultat qu'on souhaite obtenir. On a tout à gagner à isoler des bouts de codes. Principal avantage: la possibiliter de les réutiliser dans d'autres pages, de ne pas avoir à réécrire deux fois la même chose donc de diminuer la maintenance, du même coup, diminuer le risque d'erreurs, moins de plantages, des utilisateurs et un patron heureux. Bon, évidement c'est moins joli en mode "design" mais ça fait très pro. Dans le meilleur des cas (à mon sens), une page "modulaire" ne contient que des procédures, fonctions ou classes. Dans tous les cas PAS de code HTML en dehors. En voici un plan:
Code :
Code :
Code :
De plus, la procédure "Main" indique clairement le déroulement de la page. A+ |
||||||
|
00
|
|
|
#4 | ||||
|
Expert Confirmé Sénior
![]() ![]() ![]() Inscription : mars 2004 Messages : 6 387 ![]() |
Re,
Si on faisait un page comme en .NET, c'est à dire une page que ne serait qu'une classe? Pour ceux qui font un peu de .NET, on sait que les pages aspx sont des classes et que lorsque qu'elles sont lancée il se produit un évènement "Page_Load". Cet évènement se produit toujours. En ASP3 on pourrait faire la similitude avec la méthode Class_Initialize. On peut transformer le code de mon précédent post en une classe. Tout d'abords, voici la dernière version de la classe DBFactory. J'ai ajouté deux méthodes l'une permet à partir d'un recordset de générer le code HTML d'un tableau, l'autre de créer une liste déroulante: Code :
Code :
N'hésitez pas à me dire si j'ai laissé un bug ou à faire des suggestion. A+ |
||||
|
00
|
|
|
#5 | ||||
|
Expert Confirmé Sénior
![]() ![]() ![]() Inscription : mars 2004 Messages : 6 387 ![]() |
Salut,
Voici une classe pour récupérer les principales informations d'une page ASP
Qu'en pensez-vous? Code :
Code :
|
||||
|
00
|
|
|
#6 | ||
|
Expert Confirmé Sénior
![]() ![]() ![]() Inscription : mars 2004 Messages : 6 387 ![]() |
Code :
|
||
|
00
|
|
|
#7 | ||
|
Expert Confirmé Sénior
![]() ![]() ![]() Inscription : mars 2004 Messages : 6 387 ![]() |
OWC10: http://www.microsoft.com/downloads/d...displaylang=en
OWC11: http://www.microsoft.com/downloads/d...displaylang=en A mettre dans la DBFactory? Code :
|
||
|
00
|
|
|
#8 | ||||||||
|
Expert Confirmé Sénior
![]() ![]() ![]() Inscription : mars 2004 Messages : 6 387 ![]() |
Voici le script pour générer la table:
Code :
Code :
Code :
Code :
|
||||||||
|
00
|
|
|
#9 | ||||||
|
Expert Confirmé Sénior
![]() ![]() ![]() Inscription : mars 2004 Messages : 6 387 ![]() |
Voici une classe caisse à outils:
Code :
Code :
Code :
A+ FW réalisé avec l'aimable participation de agrotic |
||||||
|
00
|
|
|
#10 | ||||
|
Expert Confirmé Sénior
![]() ![]() ![]() Inscription : mars 2004 Messages : 6 387 ![]() |
Me revoilà,
Y'a une question qui revient souvent: "comment faire des listes liées?" Une solution est d'utiliser le javascript comme sur ce tuto. C'est une solution qui peut être coûteuse en terme de poids de la page car toutes les combinaisons sont chargées dans la page. On peut aussi utiliser de l'AJAX, euh, j'ai pas d'exemple sous le coude et de toutes façons, j'aime pas trop l'AJAX. Il reste une solution simple mais assez efficace de faire varier le contenu de la liste en fonction de données soumises à l'aide d'un formulaire. Problematique: on souhaite avoir un jeux de listes de tous les pays, toutes les regions, tous les departements, toutes les villes. Ca fait beaucoup.
La solution consiste donc à soumettre une première fois le pays puis de faire une requete en base pour obtenir la liste des regions de ce pays. Ensuite, on soumet la region et on demande à la base la liste des département qui dépendent de la région et ainsi de suite. Comment faire en pratique:
Si vous avez des question n'hésitez pas. Ce code ne verifie pas les données et de ce fait ne présente aucune sécurité face à des injections SQL!! A+ |
||||
|
00
|
|
|
#11 |
|
Expert Confirmé Sénior
![]() ![]() ![]() Inscription : mars 2004 Messages : 6 387 ![]() |
Salut,
Les recordset ont au moins deux emplois la lecture et l'ecriture. Pour pouvoir utiliser l'une ou l'autre des capacités, il est interessant de savoir un peu comment ils fonctionnent. Pour ouvrir un recordset il faut faire ainsi: Code :
recordset.Open Source, ActiveConnection, CursorType, LockType, Options
La page web est le resultat d'un test, un peu empirique car il faudrait le faire plusieurs fois dans des conditions strictement identiques, que j'ai fait pour passer sur toutes les combinaisons possibles des options d'ouverture du recordset. Toutefois les chiffres ont des écarts tellements significatifs qu'il y a peu de chances que plusieurs essais fassent une grosse différence. Il y a aussi cette discussion. Interprétation du resultat:
Un information n'est pas mise en évidence ici, il s'agit des perturbations engendrées par des accès concurents. En effet, lors de la lecture ou de la mise à jour, une requete à la base de données peut poser un verrou. Ce dernier va retarder les autres requetes envoyées par d'autres client tant que le verrou n'est pas levé. Mieux vaut donc choisir un curseur qui aura le moins d'impacts sur les temps de latence. Choisissez donc bien votre curseur. N'hésitez pas si vous avez des questions. |
|
00
|
|
|
#12 | ||
|
Expert Confirmé Sénior
![]() ![]() ![]() Inscription : mars 2004 Messages : 6 387 ![]() |
Salut,
Pas mal de codes trainent sur internet à propos de la pagination. Voici un code simple que vous pouvez copié coller. Vous n'avez qu'à changer la requête SQL et la chaine de connexion. Code :
Vous pouvez améliorer la navigation en ajoutant les numéros des pages intermédiaires. Si vous voulez trier selon l'ordre des champs des enregistrements, il faudra porter les paramètres de tri dans l'url de la "barre" de navigation pour ainsi faire varier la requete SQL. A+ PS, comme d'hab si vous avez des questions... |
||
|
00
|
|
|
#13 |
|
Membre régulier
![]() Inscription : janvier 2009 Messages : 107 ![]() |
Je sais pas trop si c'est le bon endroit pour poster ce message, mais c'était juste pour te remercier d'avoir partager ces très bonnes infos !
Je vais d'ailleurs de ce pas m'essayer à la class permettant de créer une connexion, surtout que je souhaite pouvoir en ouvrir une et la refermer aussitôt que je n'en ai plus besoin ! En effet, certains de mes sites ont encore le problème du nombre de connexion trop élevées ouvertes en même temps (généralement 30 maxi) et pour les sites particulièrement visités, je suis obligé d'alourdir mon code avec les fermetures. Par la suite je vais travailler à créer une fonction ou une class je ne sais pas encore qui va me permettre d'une part de retourner le résultat d'une requête dans un tableau (peut-être un scripting dictionary) libérant ainsi le oRs et me permettant donc de fermer immédiatement ma connexion. Je ferais passer mon code si j'arrive à quelque chose de vraiment "propre" (genre un joli tableau associatif ?) A++ et encore merci (content de ne plus être seul dans le vieil univers des ASP |
|
|
00
|
|
|
#14 | ||||||||
|
Membre régulier
![]() Inscription : janvier 2009 Messages : 107 ![]() |
Histoire de participer un peu :
Contre les injections SQL Code :
Code :
Code :
Code :
|
||||||||
|
|
00
|
|
|
#15 | ||||
|
Membre régulier
![]() Inscription : janvier 2009 Messages : 107 ![]() |
Voilà je viens de réussir tout ce que je voulais !
Alors je travail avec une librairie (fct_array.asp) spécial pour les tableaux. J'y ai placé ma fonction, "a_data()", qui reçoit une chaine SQL et retourne un tableau de tableau. Pour chaque élément du 1er tableau je place un dico avec le résultat de la première ligne du RS correspondant. Code :
Du coup, sur la page principale on peut appeler par exemple : Code :
++ EDIT : Ben voilà je l'ai mon tableau associatif ! |
||||
|
|
00
|
|
|
#16 | ||||||||||
|
Membre régulier
![]() Inscription : janvier 2009 Messages : 107 ![]() |
Salut,
Ces deux fonctions permettent d'alléger votre page principale ou vos fonctions. Note : gérez vos connexions différemment (cf : http://www.developpez.net/forums/d67...ier-recordset/) d_value() Celle-ci récupère une valeur, résultat d'une requête (l'id d'un membre, le prix d'un produit etc.) Code :
Code :
a_ereg() Enfin, celle-ci permet de récupérer un enregistrement complet : Code :
Code :
ecrire() Et juste parce que j'ai la flemme de taper response.write à chaque fois : Code :
|
||||||||||
|
|
00
|
|
|
#17 |
|
Membre régulier
![]() Inscription : janvier 2009 Messages : 107 ![]() |
Hello,
Ici "mon" gestionnaire de formulaire (les fichiers nécessaires dans l'archive) "mon" parce qu'il est basé sur la classe CForm d'Immo, que j'ai modifié donc. Le principe : - Il génère les champs désirés - Il vérifie lors de l'envoi le caractère obligatoire du champ (si demandé) ainsi que le format de la chaine envoyée (email, CP, entier, tel etc.). - Il compte le nombre d'erreurs rencontrées. - Il affiche un message spécifique à l'erreur rencontrée (erreur de formatage ou erreur "obligatoire") - Il place le message par défaut de chaque champ à l'intérieur de celui-ci. Lorsque ce dernier gagne le focus, le message disparait et laisse place à un champ vide. - Il sait repérer les messages par défaut et gère les éventuelles erreur en conséquence. En pratique. Assurez-vous d'avoir inclus : - le fichier des fonctions nécessaires : "fct_est_un.asp" (inclus dans l'archive) - le fichier de la classe CForm : "cls.form.asp" (inclus dans l'archive) Attention, j'ai laissé mes constantes trainer ça et là (NOM_CONSTANTE), n'oubliez pas de faire le ménage... Enfin, testez le formulaire grâce à "form.asp" (inclus dans l'archive). Je pense n'avoir rien oublié. ++ Mise à jour 1.1 : - ajout de "InputChckBx()" qui permet donc de gérer les checkbox. On configure le nombre de box, leur label, leur value, le nombre de réponses obligatoires (sinon erreur de caractère obligatoire) et enfin si on les souhaite en ligne ou en colonne. - ajout de "InputRadio()" qui permet de gérer les boutons radio. On configure le nom du champ, les labels, les values, obligatoire, en ligne ou colonne. TO DO : gérer l'envoi des images (je vais voir si je peux faire qque chose) |
|
|
00
|
|
|
#18 |
|
Membre régulier
![]() Inscription : janvier 2009 Messages : 107 ![]() |
Salut,
Modification de la class d'Immo (cXml). Voici un petit module de lecture d'un fichier XML. Il lit un fichier xml en extrait soit une chaine de caractères, soit un CDATA. Il peut aussi imprimer à l'écran le contenu complet du fichier (string + CDATA) lisez-moi.txt pour plus d'infos. ++ |
|
|
00
|
|
|
#19 | ||||||||
|
Membre régulier
![]() Inscription : janvier 2009 Messages : 107 ![]() |
Salut,
Voici le gestionnaire de formulaire pour les données binaires d'un encodage de type "form-data". Code :
Grosso modo, c'est la même chose que l'autre gestionnaire sauf qu'il fonctionne exclusivement avec ASPSmartUpload. On retrouve les mêmes fonctionnalités globales (vérification des champs, caractère obligatoires, tailles des champs etc.) Code :
Code :
Donc dans votre fonction de traitement de données il vous suffit d'appeler : Code :
++ EDITE : suppression de quelques "request.form" + gestion plus explicite des erreurs d'upload |
||||||||
|
|
00
|
|
|
#20 | ||||||||||||||
|
Membre régulier
![]() Inscription : janvier 2009 Messages : 107 ![]() |
Salut,
Une petite fonction qui découpe une URL et la retourne prête pour l'URL Rewrite. -1- passez l'URL que vous voulez, avec autant de param que souhaité, autant de répertoires : Code :
mais vous pouvez tout à fait ajouter un param dans la fonction aussi pourquoi pas, par exemple : Code :
Code :
++ Et la fonction : Code :
Et bien le client envoit la chaine formatée, puis en fonction de la version de ton serveur IIS : -1- IIS 5+ jusqu'à IIS 6 : -> tu dois alors installer un filtre ISAPI (i.e : ISAPI_Rewrite) dans IIS, ne pas oublier de vérifier que l'extension .asp soit bien liée à ton filtre sous IIS. -> puis configurer le httpd.ini (avec tes jolies Regex justement) par exemple : Code :
Code :
Alors attention quand même, autant lorsqu'on formate la chaine (cf ma fonction UrlRewrite) on passe autant de rep + para que l'on souhaite, autant quand on récupère (les regex) on est obligé d'en connaitre le nombre exacte. Par exemple : Code :
Sinon, autant de Regex que de forme d'URL à "traduire" dans le header. ++ |
||||||||||||||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com