[ASP] passage de variable d'une page à l'autre

passage de variable d'une page à l'autre [ASP] - ASP - Programmation

Marsh Posté le 12-08-2008 à 10:08:39    

Bonjour,
 
Je suis loin d'être un pro en ASP (c'est pour cela que je sollicite votre aide...)
 
Sur une base de données, je voudrai faire une recherche par mot clé, et afficher le tout avec 5 résultats par pages.
 
La première page, ça fonctionne, mais les suivantes, ca bug c'est normal, car en rechargeant la page il fait la relecture du formulaire qui du coup est vide...
 
Comment faire S.V.P.
 
Merci
la page en question (le serveur est Down à l'heure ou j'écris mais cela ne devrait pas durer)http://www.ac-nancy-metz.fr/pres-e [...] /liste.asp
le code
 

Code :
  1. <!-- #include file="_connexion.asp"-->
  2. <html>
  3. <head>
  4. ...
  5. </head>
  6. ... bla bla
  7. <html>
  8. <body topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0" marginwidth="0" marginheight="0">
  9.  <form method="POST" name="FrontPage_Form1" onsubmit="return FrontPage_Form1_Validator(this)" language="JavaScript" action="listeR.asp">
  10.   <b>Trier par : <a href="listeN.asp">nom</a>, <a href="listeS.asp">section</a>,
  11.   <a href="listeA.asp">année</a>&nbsp;</b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;
  12.   <!--webbot bot="Validation" b-value-required="TRUE" i-minimum-length="2" -->
  13.   <input type="text" name="recherche" size="20">&nbsp;&nbsp;
  14.         <input type="submit" value="Rechercher" name="B1"></form>
  15. <%mot1=Request.Form("recherche" )
  16. mot=Replace(mot1,"'","''" )
  17. mot=Replace(mot,"<","&lt" )
  18. mot=Replace(mot,">","&gt" )%>
  19. <%if mot="" or mot=" " then%>
  20.  <b>
  21.  Vous n'avez rien saisi !<BR>Merci d'écrire le nom à trouver sur
  22.  cet annuaire, puis de valider en cliquant sur "Rechercher"!<BR>&nbsp;
  23. </b>
  24. <%else%>
  25. <%Nmax = 5 ' nombre par page
  26. Ndeb = Cint(request.queryString("num" ))
  27. ' nombre total de fiches
  28. SQL="SELECT count(*) FROM histo"
  29. RS2 = conn.execute(SQL)
  30. Ntotal = RS2(0) - 1 ' commence à 0
  31. ' sélectionne les fiches de la table
  32. Set RS = server.createobject("ADODB.Recordset" )
  33. SQL="SELECT TOP " & (Ndeb+Nmax) & " * FROM histo where nom like '%"&mot&"%' or prenom like '%"&mot&"%' or classe like '%"&mot&"%' or annee like '%"&mot&"%' order by nom"
  34. RS.Open SQL,Conn , 3, 3%>
  35. Il y a <%=ntotal%> enregistrements d'anciens élèves :
  36.  <div align="center">
  37.   <table border="4" cellspacing="1" cellpadding="5" id="table12">
  38. <%' Avance à la 1ère
  39. RS.Move(Ndeb)
  40. ' tant qu'il reste des fiches
  41. while not RS.eof
  42.    ' affiche le champ%>
  43.        <tr>
  44.     <td valign="top" align="center"><a>
  45.     <p style="margin-top: 0; margin-bottom: 0"><%=response.write(Server.HTMLEncode(rs.Fields("prenom" ).Value))%></p>
  46.     <p style="margin-top: 0; margin-bottom: 0"><b><%=response.write(Server.HTMLEncode(rs.Fields("nom" ).Value))%></b></p>
  47.     </td>
  48.     <td align="center" valign="top"><a>
  49.     <p style="margin-top: 0; margin-bottom: 0"><%=response.write(Server.HTMLEncode(rs.Fields("classe" ).Value))%></p>&nbsp;</a><%=response.write(Server.HTMLEncode(rs.Fields("annee" ).Value))%></td>
  50.     <td align="center" valign="middle"><a>
  51.     <p style="margin-top: 0; margin-bottom: 0">
  52. <% email = Server.HTMLEncode(rs.Fields("email" ))%>
  53. <% if email = "pas de mail" then%>
  54.     <img border="0" src="../images/Noemail.gif" width="28" height="31">
  55. <% else%>
  56. <a href="mailto:<%=response.write(Server.HTMLEncode(rs.Fields("email" ).Value))%>?subject=Anciens élèves du lycée Loritz">
  57.     <img border="0" src="../images/email.gif" width="28" height="31"></a></td>
  58. <% end if%>   
  59.           <td><a>
  60.     <p style="margin-top: 0; margin-bottom: 0"><%=response.write(Server.HTMLEncode(rs.Fields("commentaire" ).Value))%></a> &nbsp;</tr>
  61.  <%RS.MOVENEXT
  62. wend%>
  63.  
  64.   </table></div>
  65. </BODY></HTML>
  66. </center>
  67. </td>
  68. </tr>
  69. </table>
  70. </body>
  71. <div align="center">
  72. &nbsp;<table cellpadding=0 id="table13" border="0" cellspacing="0">
  73. <tr>
  74. <% ' NAVIGATION
  75. ' Des fiches avant ?
  76. if Ndeb > 0 then%>
  77.      <td><b><A href="?num=0"><span style="text-decoration: none">
  78.  <img border="0" src="../images/test.a1.gif"></span></A> </b>&nbsp;<b><A href="?num=<%=Ndeb-Nmax%>"><span style="text-decoration: none"><img border="0" src="../images/test.a2.gif"></span></A>&nbsp;
  79.  </b>&nbsp;</td>
  80. <%end if%>
  81.      <td>
  82. <% ' Page courante
  83. Npag = int(Ndeb/Nmax)+1 : Npag2 = Npag-1
  84. tmp = "<b>" & Npag & "</b>"
  85. ' Max 3 pages avant
  86. while Npag2>0 AND Npag2>Npag-4
  87.    tmp = "<A href='?num=" & ((Npag2-1)*Nmax)_
  88.       & "'>" & Npag2 & "</A> " & tmp
  89.    Npag2 = Npag2-1
  90. wend
  91. ' Max 9 pages après
  92. Npag2 = Npag
  93. while Npag2*Nmax<=Ntotal AND Npag2<Npag+3
  94.    Npag2 = Npag2+1
  95.    tmp = tmp & " <A href='?num=" & ((Npag2-1)*Nmax)_
  96.       & "'>" & Npag2 & "</A>"
  97. wend
  98. response.write tmp
  99. %>
  100.    </td>
  101. <% ' Des fiches après ?
  102. if Ntotal>Ndeb+Nmax then%>
  103.      <td><b>&nbsp; <A href="?num=<%=Ndeb+Nmax%>">
  104.  <span style="text-decoration: none">
  105.  <img border="0" src="../images/test.a3.gif"></span></A></b> <b>
  106.  <A href="?num=<%=int(Ntotal/10)*10%>">
  107.  <span style="text-decoration: none">
  108.  <img border="0" src="../images/test.a4.gif"></span></A></b> </td>
  109. <%end if
  110. end if
  111. RS.close : set RS=nothing%>
  112. </html>
  113. &nbsp;</div>
  114.   <p>&nbsp;</div>
  115. </BODY></HTML>
  116. </div>
  117. <% conn.close : Set conn=nothing %>


Reply

Marsh Posté le 12-08-2008 à 10:08:39   

Reply

Marsh Posté le 12-08-2008 à 16:22:52    

Le plus simple est que tu passe ton formulaire en GET (au lieu de POST) et que dans le liens vers la seconde page (la suite des resultats) tu reimprime les arguments GET que tu as recu et un element GET en plus que tu redetectera pour connaitre la suite.
Par exemple :
Premiere requete    connexion.asp?recherche=prout
Cette page imprime un lien vers  connexion.asp?recherche=prout&start=5
Il ne re restera plus qu'a detecter le start et d'incrementer a chaque fois.


Message édité par h4rold le 12-08-2008 à 16:23:43
Reply

Marsh Posté le 14-08-2008 à 09:59:23    

le plus simple c'est de faire une pagination !  :o  
 
http://www.asp-php.net/tutorial/asp-php/pagination.php

Reply

Marsh Posté le 17-08-2008 à 10:38:14    

Bonjour,
 
flyman30 c'est le script que j'utilise....
 
H4rold j'y arrive pas je vais mettre nombre de résultats = 100 ou plus et je laisserai comme cela.
 
Merci à vous

Reply

Marsh Posté le 17-08-2008 à 21:16:47    

extra a écrit :

Bonjour,
 
flyman30 c'est le script que j'utilise....
 
H4rold j'y arrive pas je vais mettre nombre de résultats = 100 ou plus et je laisserai comme cela.
 
Merci à vous


Ce code fonctionne très bien, tu as forcément fait une erreur de copié/collé je regarderais demain..
 
Bizarre je viens d'aller sur ton lien et la pagination fonctionne !?  :whistle:


Message édité par Flyman30 le 17-08-2008 à 21:21:31
Reply

Marsh Posté le 18-08-2008 à 10:51:48    

Bonjour,
 
La pagination fonctionne avec un tri fixe.
C'est a dire trier l'historique par nom ou année
 

Code :
  1. SQL="SELECT TOP " & (Ndeb+Nmax) & " * FROM histo where nom order by nom "


 
Pour la fonction rechercher :
Par contre pour trier avec le résultat du formulaire à la deuxième pas pagination il retombe sur :
 

Code :
  1. <%mot1=Request.Form("recherche" )
  2. mot=Replace(mot1,"'","''" )


et comme le formulaire a déjà été lu il n'y a plu rien et erreur "vous n'avez rien entré....
 
Il faudrait passer me paramètre mot1 d'une page à l'autre...
j'ai essayé avec GET, mais d'entée plus aucune page ne fonctionne il y a surement une syntaxe à changer et comme j'ai je suis pas doué pour cela  :sweat:  

Reply

Marsh Posté le 19-08-2008 à 18:04:53    

Passe mot1 en session ...
session("mot1" ) = mot1

Reply

Marsh Posté le 19-08-2008 à 20:13:35    

salut flyman30,
 
si tu peux être un peu plus explicite :)
je le mets ou session("mot1" ) = mot1
 
merci

Reply

Marsh Posté le 20-08-2008 à 09:26:49    

Tu as dans ton code  

Code :
  1. <%mot1=Request.Form("recherche" )
  2. mot=Replace(mot1,"'","''" )
  3. mot=Replace(mot,"<","&lt" )
  4. mot=Replace(mot,">","&gt" )%>
  5. <%if mot="" or mot=" " then%>


 
Fait :
 

Code :
  1. <%mot1=Request.Form("recherche" )
  2. mot=Replace(mot1,"'","''" )
  3. mot=Replace(mot,"<","&lt" )
  4. mot=Replace(mot,">","&gt" )%>
  5. session("mot" ) = mot
  6. <%if mot="" or mot=" " then%>


 
Il te suffit de faire la recherche sur session("mot" ) puisque c'est en mémoire tant que la session est valide.
 

Reply

Marsh Posté le 20-08-2008 à 11:52:27    

désolé flyman30, ca ne fonctionne pas....

Reply

Marsh Posté le 20-08-2008 à 11:52:27   

Reply

Marsh Posté le 20-08-2008 à 12:27:02    

tu m'as donné une idée, mais ça ne garde toujours pas la variable "mot"
 
Le formulaire de recherche appelle : listR.asp
 

Code :
  1. <%mot1=Request.Form("recherche" )
  2. mot=Replace(mot1,"'","''" )
  3. mot=Replace(mot,"<","&lt" )
  4. mot=Replace(mot,">","&gt" )
  5. session("mot" ) = mot
  6. if mot="" or mot=" " then%>
  7.   <b>
  8.   Vous n'avez rien saisi !<BR>Merci d'écrire le nom à trouver sur
  9.   cet annuaire, puis de valider en cliquant sur "Rechercher"!<BR>&nbsp;
  10. </b>
  11. <%else
  12. Response.Redirect "res_recherche.asp"
  13. end if%>


 
Dans le fichier res_recherche.asp, je fais l'affichage paginé avec le critère de recherche "mot" sauf que "mot" est vide...
 

Reply

Marsh Posté le 20-08-2008 à 15:08:27    

j'ai trouvé :  :D  
 
dans la récupération du formulaire comme tu disais
 

Code :
  1. Session.Contents("mot" ) = mot


 
et dans le fichier d'affichage,
 

Code :
  1. <%mot=(Session("mot" ))%>


 
Par contre j'ai encore un bug
dans le cas ou on trouve rien j'ai une erreur...


Message édité par extra le 20-08-2008 à 15:10:08
Reply

Marsh Posté le 20-08-2008 à 19:05:51    

Il suffit de faire un if error then et tu affiche que rien n'a été trouvé

Reply

Marsh Posté le 14-12-2008 à 20:41:53    

Il existe une méthod beaucoup plus simple pour cela, il te faut le fichier ADOVBS.inc que tu peu trouver ici http://www.academyx.com/resources/documents/adovbs.txt
 
tu renome le ficher en adovbs.inc et tu le met sur ton serveur web.
 
dans ta page asp, tu importe le fichier comme suit:
 
<!--#include file=adovbs.inc-->
 
Ce fichier te permettra de faire ta pagination sans effort ou presque.
 
Exemple de code :
<!--#include file=adovbs.inc-->
<%
Dim iPage, pageSize
 
        ' nécessaire pour pour la premiere page
 If Request("page" ) = "" Then
  iPage = 1
 Else
  iPage = Request("page" )
 End If
 
        ' si tu veux que l'utilisateur choisisse lui même le nombre d'affichage par page
 If Request("size" ) = "" Then
  pageSize = 10
 Else
  pageSize = Request("size" )
 End If
 
 sql = "SELECT Caricature.PK, Caricature.Nom FROM Caricature ORDER BY Caricature.Ordre;"
 
        'tu dois au moins mettre adOpenKeyset pour la pagination
 rs.Open sql,cn,adOpenKeyset
 
        'si ton rs est a EOF ça fait une erreur, donc on valide
 If rs.EOF = False Then  
  rs.AbsolutePage = iPage
  rs.PageSize = pageSize
        Else
                Response.Write "Aucune occurrence trouvé"
 End If
 %>
        <form name=frm action=taPage.asp>
 <table>
  <tr><td>
                        <!--Afficher le nombre d'enregistrement trouvé-->
   <%=rs.RecordCount & " caricatures"%>
  </td><td>
                        <!--Navigation des pages avec un select-->
   Page  
   <select name=page onChange="document.frm.submit()">
   <%
                        'Création de la liste des pages par une boucle for
   For i = 1 To rs.PageCount%>
    <option value=<%=i%>><%=i%></option>
   <%
   Next%>
   </select>
  </td><td>
                        <!--Combien d'affichage par page-->
   Nombre par page
   <select name=size onChange="document.frm.submit()">
   <%
                        'Création de la liste du nombre d'affichage par page
   For i = 10 To 50 Step 10%>
    <option value=<%=i%>><%=i%></option>
   <%
   Next%>
  </td></tr>
 </table>
 
        <!--Affichage de la liste-->
 <table>
 <%
 For i = 1 To rs.PageSize
                'si on arrive à la fin du rs, on sort de la boucle
  If rs.EOF = True Then Exit For%>
   <tr><td>
    <%=rs("PK" )%>
   </td><td>
    <%=rs("Nom" )%>
   </td></tr>
  <%
  rs.MoveNext
 Next%>
 </table>


Message édité par francois cright le 14-12-2008 à 20:45:19
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed