Forum de discussion
Forum « Programmation ASP » (archives)
Re: Blems avec le bouton actualiser.
Envoyé: 1er septembre 2004, 9h37 par Oznog
L'erreur n'a rien à voir avec le rafraîchissement. Ton code est correct à ce niveau. Par contre il y a plus d'une erreur, erreur fatales mais aussi de structure. Pour ces dernières erreurs, ça passe mais sache que tu peux optimiser ton code, tu pourrais lire sur le sujet si ça t'intéresse de programmer plus proprement.
Alors pour les erreurs fatales!
1. Je ne sais pas à quel point cette erreur est fatale mais c'est loing d'être propre. Il s'agit d'imvriquer du HTML dans une fonction. Hum, bien que ça puisse fonctionner, ça doit bien surprendre le moteur ASP.
C'Est effectivement une bonne pratique de d'imbriquer de la sorte HTML et ASP. Par exemple .
<p>Mon texte <%=varASP%> fin.</p>
Ou
<p>Texte </p>
<%
code ASP
%>
<p>Fin</p>
Mais directement dans une fonction?
<% function ASP... %>
HTML
<% ...fin Fonction ASP %>
Alors là c'est tordu.
Deux solution, ou convertire la fonction pour générer le HTML :
<%
Function afficher_L_U ()
...
do until recordset_affiche_L_U.EOF or ligne_ctr >= ligne_m%>
response.write "<BR><td align=""left"">"
response.write "<img border="0" src=""" & recordset_affiche_L_U("Image_liens") & """ name=""affichage"">"
...
End Function
%>
Ou tu ne cré pas de fonction, ce qui est la meilleurs solution parceque j'aimerais bien que tu me dise pourquoi utiliser une fonction pour exécuter son code une seule fois? Le rôle d'une fonction est de réutiliser un code plus d'une fois. Ce qui n'est pas le cas ici.
Donc, au lieu de l'appelle :
<font face="arial" size="2">
<div align="left">
<h4>Liens utiles</h4>
</div>
<%call afficher_L_U()%>
</font>
Faire directement l'imbrication :
<font face="arial" size="2">
<div align="left">
<h4>Liens utiles</h4>
</div>
requete_affiche_L_U = "SELECT Liens.* FROM Liens ORDER BY Liens.Num_liens"
Set recordset_affiche_L_U = Server.createObject("ADODB.Recordset")
recordset_affiche_L_U.cursorlocation = AdUseClient
recordset_affiche_L_U.cachesize = 16
recordset_affiche_L_U.Open requete_affiche_L_U, Connection_2
ligne_m = Cint(recordset_affiche_L_U.pagesize)
%>
<%do until recordset_affiche_L_U.EOF or ligne_ctr >= ligne_m%>
<BR><td align="left">
<Font face="Arial" size="1">
<img border="0" src="<%=recordset_affiche_L_U("Image_liens")%>" name="affichage">
<%=recordset_affiche_L_U("Nom_liens")%>
</a></font></td></tr>
<tr><td></td></tr>
<%
recordset_affiche_L_U.movenext
loop%>
<%
recordset_affiche_L_U.Close
set recordset_affiche_L_U = Nothing
%>
</font>
Je ne sais pas à quel point ça peut régler le problème mais c'est sûr que tu devra mieux structurer tes codes.
2. Tu compare la ligne affiché avec le nombre de record affichable par recordset. (ligne_ctr >= ligne_m). Bon, tu récupère bien le "pagesize" qui retrouvne le nombre de record récupérer. Mais tu ne met pas à jour la ligne affiché (ligne_ctr) et tu ne l'initialise même pas.
' Ajouter en haut pusique tu part au premier
ligne_ctr = 1
Et incrémente-le durent l'affichage :
ligne_ctr = ligne_ctr + 1
loop
C'est déjà ça. Note que pour l'optimisation, le "getRow" est une méthode parfaitement adapté pour cette situation.
3. Une erreur moins importante de structure, tu oublie l'hyperlien mais pourtant tu en ferme un!
On retrouve le "</a>" mais aucune balise "<a href..."!
4. Encore la structure, ton HTML est très mal formé, c'est quoi ça "<tr><td></td></tr>" absoluement rien! Attention ton tableau n'existe pas mais tu as des ligne et cellule! Sans parler de la police de caractères autour de tout ça (<font face="arial" size="2">) qui affecte le contenu d'un bloc pas le contenu de plusieurs bloc comme un tableau HTML, des DIV etc! Ça ne peut provoquer d,erreur ASP mais ça va assurément te poser des problème d'affichage un jour ou l'autre. Un bon truc, regarde la source du document une fois généré (via le navigateur) pour voir si ton HTML est bien généré.
Voilà, ça fait le tour, note que j'ai testé ton code, avec l'ajustement de structure comme je vient de proposer, avec l'ajour de l'incrémentation et que ton code fonctionne parfaitement, même avec refaraîchissement bien qu'il soit un peu lourd, mais ça c'est une autre histoire.
Ciao
Oznog
Réponses
|