Avatar billede sth Novice
14. januar 2011 - 21:05 Der er 10 kommentarer og
1 løsning

sortering ud fra indput rækkefølge fra form

Jeg har en side hvor jeg henter nogle indtastede værdier
De indtastede værdier skal jeg have listet i den række følge de er tastet i og af samme grund har jeg mine felter nummererede
Eks.

<form method="POST" action="vis_felter.asp">

<table border="0" width="500"  cellspacing="0" cellpadding="0" >
    <tr>
    <td>segment:  </td>
    <td><input type="text" name="0_segment_name" value="segment" size="35"></font></td>
  <tr>
    <td >mdr:  </td>
    <td><input type="text" name="1_mdr_name" value="mdr" size="35"></font></td>
    <tr>
    <td >aar:  </td>
    <td><input type="text" name="2_aar_name" value="aar" size="35"></font></td>
    <tr>
    <td >value:  </td>
    <td><input type="text" name="3_value_name" value="value" size="35"></font></td>
  </tr>
</table>
<input type="submit" value=" Næste" name="B1"  class="knap"></td>


Når jeg så prøver at hente  disse requests i næste fil, med følgende:


for each key in request.form
    if key ="B1" Or  key ="Send"then
    else
      val1 =request.form(key)
      Response.Write "<br>" &val1   
    End if
next

så kommer de i rækkefølgen
segment
mdr
value
aar



Her ønsker at de kommer i den rækkefølge de er indtastet i:

segment
mdr
aar
value


Hvordan får jeg dem ud i den rigtige rækkefølge?
Avatar billede softspot Forsker
14. januar 2011 - 22:29 #1
Der er flere løsningsmuligheder, hvoraf jeg umiddelbart kan komme i tanke om 2. Den ene involverer det navngivningssystem du selv har lagt op til og den anden at du definerer en liste med feltnavn i den rækkefølge du ønsker dem udlæst.

Den sidste er den letteste at implementere, da den kun involverer at du definerer et array der hvor værdierne skal aflæses. Det kunne se nogenlunde således ud:

felter = array( _
  "0_segment_name", _
  "1_mdr_name", _
  "2_aar_name", _
  "3_value_name" _
)

for i = 0 to ubound(felter)
  v = request.form(felter(i))
  Response.Write "<br>" & v   
next

Denne metode har de fordele, at dine felter kan få nogle mere naturlige navne end dem din egen metode lægger op til, plus at din løkke ikke skal tage højde for felter der ikke skal medtages.
Ulempen er naturligvis, at du skal vedligeholde listen med rækkefølgen, hvis du ændrer formularens layout.

Den anden metode er, som du selv lægger op til, at sortere feltnavnene i Request.Form-listen. Dog involverer det umiddelbart noget flytten rundt på data i forbindelse med selve aflæsningen, inden de kan bruges og det er givetvis stadig nødvendigt at lave undtagelser for de felter der ikke skal benyttes. Desuden skal du også vedligeholde feltnavne, som måske får indflydelse på scripts der manipulerer formularen eller andre afhængigheder til feltnavne.

Derfor vil jeg ikke anbefale den sidste metode, med mindre du har tungtvejende grunde til at det vil være bedre sådan...
Avatar billede mortvader Nybegynder
14. januar 2011 - 22:23 #2
Erstat asp delen med:

  for x=1 to request.form.count-1
    response.write request.form(x)&"<br>"
  next
Avatar billede sth Novice
14. januar 2011 - 22:45 #3
Mit problem er at mine navne dannes dynamisk og lister felt navne fra en database, og da de kan være alle mulige feltnavne og i et ukendt antal giver det mig problemer

jeg ved dog altid hvor mange fenter jeg har og sætter så et tal ind foran navnet 0,1,2,3,.....
og jeg regnede dermed med atjeg havde styr på rækkefølgen
Avatar billede softspot Forsker
14. januar 2011 - 22:56 #4
Du kan jo prøve det som mortvader foreslår, men jeg vil da opfordre til en grundig test i de forskellige browsere, for at se om alle er lige stringente med at sende felterne i den rækkefølge som de forekommer i HTML-siden...

På den anden side kan du jo, hvis feltnavnene kommer fra en database, generere det array jeg skitserer og slipper dermed endda for at dobbeltvedligeholde feltnavne i formular og liste :-)
Avatar billede sth Novice
14. januar 2011 - 23:01 #5
mortvader: der ser jo ud tilat virke, men må dog indrømme jeg ikke helt kan gennemskue hvorfor :-(
Hvis du har tid må du meget geren forklare hvad der sker, ellers smider du bare et svar
Avatar billede sth Novice
14. januar 2011 - 23:08 #6
softspot: jeg er ved at lave et program der kan danne asp programmer ud fra en mysql database. først opretter jeg forbindelse til database, lister databaser, lister tabeller, lister felter, vælger hvilke felter jeg vi lbruge og i hvilken rækkefølge, viser felter i den rigtige rækkefølge MEN når så danner min asp kode der skriver ti len til med det nye kode, så viste det sig at felterne ikke kom i den rækkegølde jeg havde valgt
men det ser ud tilat de gør det nu

havde selv overvejet at putte mine felter den i en temp tabel og så lave en sortering på dem der, men det føles bare ikke som den rigtige løsning og "array's" har ejg aldrig brugt (hvilket selvf er en fejl/mangel)

men tak for din hjælp
Avatar billede softspot Forsker
14. januar 2011 - 23:31 #7
Uden at kende datastrukturen og dit setup i øvrigt, kan jeg ikke gennemskue om der er noget som kan gøres anderledes, så det må bero på din egen vurdering (hvilket jo også er rimeligt nok :-)).

At generere et array ud fra et databaseudtræk er relativt let, hvis du benytter ADO. Der findes på et recordset en metode der hedder GetRows, som returnerer et todimensionelt array, med kolonnerne i første dimension og rækkerne i anden dimension. Det vil betyde at hvis du kan udtrække dine felter i den korrekte rækkefølge til generering af formularen, burde du også kunne det til gennemløb af POST-data - og dermed få dit array "foræret"...

Men alt andet lige, så er mortvaders løsning jo ulig meget simplere og hvis det ellers fungerer på tværs af browsertyper, så er det jo nærliggende at benytte den metode. Jeg ved ikke om der findes nogen faste standarder for, hvilken rækkefølge form-data skal sendes til serveren, men kunne have mine bange anelser om at der nok er nogen browserproducenter, som har deres egen mening om hvordan det skal gøres og dermed er du igen overladt til din egen opfindsomhed... :-)
Avatar billede sth Novice
14. januar 2011 - 23:43 #8
ser ud til at virke i både
IE, Firefox og chrome

så tillader mig at bruge forslag fra mortvader

men dine indlæg vil jeg faktisk ogsågerne betale for så hvis det re ok med dig opretter jeg et spørgsmål til dig som du så kan svare på, for jeg lærte faktisk noget i dag
Avatar billede softspot Forsker
14. januar 2011 - 23:48 #9
Jeg er glad for at jeg i det mindste kunne komme med nogle alternative foreslag, som så oveni købet kunne inspirere dig.

Det er ikke nødvendigt at oprette et nyt spørgsmål, men tak for tilbuddet :-)
Avatar billede sth Novice
15. januar 2011 - 00:45 #10
Så siger jeg tak
Avatar billede mortvader Nybegynder
15. januar 2011 - 10:08 #11
OK, som det vist blev nævnt tidligere i tråden; det min lille font-next-løkke gør, er bare at loope igennem alle felterne fra formen - i den rækkefølge de forekommer på html-siden.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester