31. august 2004 - 07:24Der er
76 kommentarer og 1 løsning
Fennec - Ponyboye
Hej fennec.
Du lavet for kort tid siden en søgning til mig og den var dejlig. Nu har jeg vil lave den sådanne at der kunne søges på flere kategorier på samme tid og her er det gået galt.
Eagleeye har givet mig en masse hjælp til at få lavet dette og han/hun kan nok også hjælpe mig færdig, men hvorfor bruge en masse til på noget du måske nemt kunne se var galt.
Jeg smider lige min kode herunder. Du sagde også at jeg skulle sige til hvis jeg ønsket at få hjælp til at få vist søgningen med forige side/næste side samt tal imellem. Så nu råber jeg om hjælp...HJÆLP...
<% OpenDatabase sql = "" if Request.Form("textfield") <> "" then if sql = "" then sql = "where navn like '%"& Request.Form("textfield") &"%' " else sql = "and navn like '%"& Request.Form("textfield") &"%' " end if end if sql = "" if Request.Form("textfield1") <> "" then if sql = "" then sql = "where in1 like '%"& Request.Form("textfield1") &"%' " else sql = "and in1 like '%"& Request.Form("textfield1") &"%' " end if end if if Request.Form("textfield2") <> "" then if sql = "" then sql = "where tid <= '"& Request.Form("textfield2") &"' " else sql = "and tid <= '"& Request.Form("textfield2") &"' " end if end if if Request.Form("textfield3") <> "" then if Request.Form("checkbox") <> "" then if sql = "" then sql = "where personer <= "& Request.Form("textfield3") &" " else sql = "and personer <= "& Request.Form("textfield3") &" " end if end if if Request.Form("checkbox2") <> "" then if sql = "" then sql = "where personer >= "& Request.Form("textfield3") &" " else sql = "and personer >= "& Request.Form("textfield3") &" " end if end if end if if Request.Form("checkbox3") <> "" then if Request.Form("hojtidIDer") <> "" then if sql = "" then sql = " where (" else sql = sql & " and (" end if arr=split(Request.Form("hojtidIDer"),",") for i=0 to ubound(arr) sql = sql & "'" & arr(i) & "' in (hojtid)" if i<ubound(arr) then sql = sql & " OR " next sql = sql & ")" end if end if
if Request.Form("checkbox4") <> "" then if Request.Form("emeIDer") <> "" then if sql = "" then sql = " where (" else sql = sql & " and (" end if arr=split(Request.Form("emmeIDer"),",") for i=0 to ubound(arr) sql = sql & "'" & arr(i) & "' in (emme)" if i<ubound(arr) then sql = sql & " OR " next sql = sql & ")" end if end if
if Request.Form("checkbox5") <> "" then if Request.Form("katIDer") <> "" then if sql = "" then sql = " where (" else sql = sql & " and (" end if arr=split(Request.Form("katIDer"),",") for i=0 to ubound(arr) sql = sql & "'" & arr(i) & "' in (vare)" if i<ubound(arr) then sql = sql & " OR " next sql = sql & ")" end if end if
if Request.Form("checkbox6") <> "" then if Request.Form("maltidIDer") <> "" then if sql = "" then sql = " where (" else sql = sql & " and (" end if arr=split(Request.Form("maltidIDer"),",") for i=0 to ubound(arr) sql = sql & "'" & arr(i) & "' in (kategoriid)" if i<ubound(arr) then sql = sql & " OR " next sql = sql & ")" end if end if set rs = conn.Execute("select opskrifter.* from opskrifter "& sql &" order by navn") response.write "<table width='500' border='0' cellspacing='10' align='center'>" f = 0 do while not rs.eof if f mod 3 = 0 then response.write "</tr><tr><td width='225'>" else response.write "<td width='225'>" end if
Jeg kan ikke helt forstå hvorfor du laver en split() på dine request.form. Det har sikkert noget at gøre med hvordan formsiden ser ud, så den skal jeg nok lige se.
Det ville også være rart hvis du udskrev SQL-sætningen på skærmen lige inden du afvikler den. Det gør det nemmere at finde fejlen.
... response.write "select opskrifter.* from opskrifter "& sql &" order by navn" set rs = conn.Execute("select opskrifter.* from opskrifter "& sql &" order by navn") ...
select opskrifter.* from opskrifter where ('12' in (kategoriid) OR ' 1' in (kategoriid)) order by navn Microsoft OLE DB Provider for ODBC Drivers error '80040e10'
[Microsoft][ODBC Microsoft Access Driver] Too few parameters. Expected 1.
set rs = conn.Execute("select * from kategori2 Order By varenavn") do while not rs.eof response.write "<input type=""checkbox"" name=""katIDer"" value="""& rs("vare") &""">"& rs("varenavn") response.write "<br>" rs.MoveNext loop
%> </div> </td>
<td width="150" valign="top"><div id="maltid" class="formkategori" style="display:'none'"> <% set rs = conn.Execute("select * from kategori3 Order By kategori") do while not rs.eof response.write "<input type=""checkbox"" name=""maltidIDer"" value="""& rs("kategoriid") &""">"& rs("kategori") response.write "<br>" rs.MoveNext loop CloseDatabase %> </div>
Mit første gæt er stadig at det er dine split() der er problemet. De burde se sådan ud:
'"hojtid IN (2,4,5)" metoden if Request.Form("checkbox3") <> "" then if Request.Form("hojtidIDer") <> "" then if sql = "" then sql = " where " else sql = sql & " and " end if sql = sql & "hojtid IN ("& Request.Form("hojtidIDer") &")" end if end if
eller: '"(hojtid=2 OR hojtid=4 OR hojtid=5)" metoden if Request.Form("checkbox3") <> "" then if Request.Form("hojtidIDer") <> "" then if sql = "" then sql = " where (" else sql = sql & " and (" end if arr=split(Request.Form("hojtidIDer"),",") for i=0 to ubound(arr) sql = sql & " hojtid="& arr(i) &" " if i<ubound(arr) then sql = sql & " OR " next sql = sql & ")" end if end if
jo men er der ikke forud bestemt nogle id´er i disse:
'"(hojtid=2 OR hojtid=4 OR hojtid=5)" metoden if Request.Form("checkbox3") <> "" then if Request.Form("hojtidIDer") <> "" then if sql = "" then sql = " where (" else sql = sql & " and (" end if arr=split(Request.Form("hojtidIDer"),",") for i=0 to ubound(arr) sql = sql & " hojtid="& arr(i) &" " if i<ubound(arr) then sql = sql & " OR " next sql = sql & ")" end if end if
eller
'"hojtid IN (2,4,5)" metoden if Request.Form("checkbox3") <> "" then if Request.Form("hojtidIDer") <> "" then if sql = "" then sql = " where " else sql = sql & " and " end if sql = sql & "hojtid IN ("& Request.Form("hojtidIDer") &")" end if end if
'"(hojtid=2 OR hojtid=4 OR hojtid=5)" metoden '"hojtid IN (2,4,5)" metoden
... er bare taget med så du kunen se hvordan den enkelte funktion formaterede teksten. Hvis du har valgt nogle hojtidIDer-checkbox'ne på form siden, får du en request.form som er en kommaseperearet liste. Denne bliver så splittet op eller indsat som den er, afhængig af hvilken metode du vælger at bruge.
if Request.Form("checkbox3") <> "" then if Request.Form("hojtidIDer") <> "" then if sql = "" then sql = " where (" else sql = sql & " and (" end if arr=split(Request.Form("hojtidIDer"),",") for i=0 to ubound(arr) sql = sql & " hojtid="& arr(i) &" " if i<ubound(arr) then sql = sql & " OR " next sql = sql & ")" end if end if
Men jeg får endnu den samme fejl:
<% OpenDatabase sql = "" if Request.Form("textfield") <> "" then if sql = "" then sql = "where navn like '%"& Request.Form("textfield") &"%' " else sql = "and navn like '%"& Request.Form("textfield") &"%' " end if end if sql = "" if Request.Form("textfield1") <> "" then if sql = "" then sql = "where in1 like '%"& Request.Form("textfield1") &"%' " else sql = "and in1 like '%"& Request.Form("textfield1") &"%' " end if end if if Request.Form("textfield2") <> "" then if sql = "" then sql = "where tid <= '"& Request.Form("textfield2") &"' " else sql = "and tid <= '"& Request.Form("textfield2") &"' " end if end if if Request.Form("textfield3") <> "" then if Request.Form("checkbox") <> "" then if sql = "" then sql = "where personer <= "& Request.Form("textfield3") &" " else sql = "and personer <= "& Request.Form("textfield3") &" " end if end if if Request.Form("checkbox2") <> "" then if sql = "" then sql = "where personer >= "& Request.Form("textfield3") &" " else sql = "and personer >= "& Request.Form("textfield3") &" " end if end if end if if Request.Form("checkbox3") <> "" then if Request.Form("hojtidIDer") <> "" then if sql = "" then sql = " where (" else sql = sql & " and (" end if arr=split(Request.Form("hojtidIDer"),",") for i=0 to ubound(arr) sql = sql & " hojtid="& arr(i) &" " if i<ubound(arr) then sql = sql & " OR " next sql = sql & ")" end if end if
if Request.Form("checkbox4") <> "" then if Request.Form("emeIDer") <> "" then if sql = "" then sql = " where (" else sql = sql & " and (" end if arr=split(Request.Form("emeIDer"),",") for i=0 to ubound(arr) sql = sql & " emme="& arr(i) &" " if i<ubound(arr) then sql = sql & " OR " next sql = sql & ")" end if end if
if Request.Form("checkbox5") <> "" then if Request.Form("katIDer") <> "" then if sql = "" then sql = " where (" else sql = sql & " and (" end if arr=split(Request.Form("katIDer"),",") for i=0 to ubound(arr) sql = sql & " vare="& arr(i) &" " if i<ubound(arr) then sql = sql & " OR " next sql = sql & ")" end if end if
if Request.Form("checkbox6") <> "" then if Request.Form("maltidIDer") <> "" then if sql = "" then sql = " where (" else sql = sql & " and (" end if arr=split(Request.Form("maltidIDer"),",") for i=0 to ubound(arr) sql = sql & " kategoriid="& arr(i) &" " if i<ubound(arr) then sql = sql & " OR " next sql = sql & ")" end if end if
set rs = conn.Execute("select opskrifter.* from opskrifter "& sql &" order by navn") response.write "<table width='500' border='0' cellspacing='10' align='center'>" f = 0 do while not rs.eof if f mod 3 = 0 then response.write "</tr><tr><td width='225'>" else response.write "<td width='225'>" end if
Jeg synes selvfølgelig min er bedst, da du så ikke skal til at splitte noget op, tilgængæld er jeg ikke sikkert på at alle databaser kan bruge "kolonne IN (talrække)" funktionen, men MySQL, MSSQL og Access kan, så jeg vil tro at det fleste andre også kan.
Udskriv SQL sætningen også inden du bruger den, ellers er det svært at se hvor fejlen er.
response.write "select opskrifter.* from opskrifter "& sql &" order by navn" set rs = conn.Execute("select opskrifter.* from opskrifter "& sql &" order by navn")
Jeg tror ikke du er i SQL visning endnu. Du skal ind og lave en forespørgsel, der kan man ikke vælge SQl-visning inden man er kommet helt ind i designvisning. Så er der en "multi" knap hvor man kan vælge SQl-visning (samt et par andre) i stedet. Du kan også højreklikke i vinduet med tabellerne (på baggrunden) i designvisning. Så skulle SQL'en også være en mulighed.
select opskrifter.* from opskrifter where kategoriid IN (12, 1, 3) order by navn
og select opskrifter.* from opskrifter where hojtid IN (3, 1, 6) order by navn
de to skulle gerne kunne køre der.
SQL-visning er et godt værktøj til at lave avanceret forspørgsler. Det er også stedet hvor man kan teste sine SQL-sætninger fra ASP. Det er nemlig lidt hurtigere at ændre/tilpasse sætningerne her indtil de virker, også lave ændringerne i ASP.
Har lige opdaget noget. Du har gemt hojtid, kategori... som notat felter, også virker det ikke på denne måde. Jeg går ud fra at de også indeholder en kommasepareret liste.... Jeg troede det var et talfelt med et enkelt tal i.
Da du så har en "mange til mange" relation mellem opskrifter og hojtider, ville man normalt lave en tabel (hoj2op) til at knytte de to tabeller sammen.
opskrifter: id = autonummer (primær nøgle) navn = tekst fremgang = notet tid = notet personer = tal af = tekst tilbe = tekst godkendt = ja/nej in1 = notet
hojtider: id = autonummer (primær nøgle) navn = tekst
hoj2op opID = tal hojID = tal
Det virker selvfølgelig stadig på den anden måde, men det er tids/resursekrævende at søge tekst igennem, som man bliver nød til på den måde det er nu. Nu forstår jeg også hvad det er Eagleeye har lavet, det gav nemlig ikke mening før. Den skal du tilbage til, hvis du ikke vil lave din database om.
Jo, det er det samme med dem, men du får slet ikke nogle felter på din opskrift tabel som hedder vare, emme, kategori og hojtid. I stedet knyttes opskrifts-tabellen til højtids-tabellen i hoj2op-tabellen med opskriftens-ID og højtidens-ID.
Jeg har lavet den her. Har også tilføjet relationer, så der ikke kan indsættes forkert date i op2katX tabellerne. Jeg har bruge ID felterne i stedet for den ekstra kolonne du havde lavet.
... Man siger man normaliserer databasen til en normalform når man gør dette. Der eksistere 3 normalformer. 1 er den dårligste hvor alle data er i en tabel og 3 er den bedste hvor data er del ud i tabeller, så der ikke er gentagelser. Normalt ender man med en database på 2.5 normalform, så man tilader en hvis gentagelse. Det kan f.eks være at man gemmer postnummer og by navn på en person. Hvis det skulle være helt rigtigt, ville man kun gemme postnummeret også have en tabel hvor postnummeret blev knyttet til et bynavn.
Jeg har prøvet at finde et sted på nettet hvor de forklarer hvad det er, men har kun fundet en masse små artikler, som ikke var helt gode. Du kan jo prøve at søge på google efter normalform og database.
if Request.Form("checkbox3") <> "" then if Request.Form("hojtidIDer") <> "" then if sql = "" then sql = " where (" else sql = sql & " and (" end if arr=split(Request.Form("hojtidIDer"),",") for i=0 to ubound(arr) sql = sql & " hojtid="& arr(i) &" " if i<ubound(arr) then sql = sql & " OR " next sql = sql & ")" end if end if
Det skal laves lidt om. Nu skal du nemlig også til at joine tabeller. Man kunne bare lave et "left outer join" på de fire op2katX tabeller, men det mest rigtige er at lave et "inner join" hvis den skal med.
<% OpenDatabase sql = "" if Request.Form("textfield") <> "" then if sql = "" then sql = "where navn like '%"& Request.Form("textfield") &"%' " else sql = "and navn like '%"& Request.Form("textfield") &"%' " end if end if sql = "" if Request.Form("textfield1") <> "" then if sql = "" then sql = "where in1 like '%"& Request.Form("textfield1") &"%' " else sql = "and in1 like '%"& Request.Form("textfield1") &"%' " end if end if if Request.Form("textfield2") <> "" then if sql = "" then sql = "where tid <= '"& Request.Form("textfield2") &"' " else sql = "and tid <= '"& Request.Form("textfield2") &"' " end if end if if Request.Form("textfield3") <> "" then if Request.Form("checkbox") <> "" then if sql = "" then sql = "where personer <= "& Request.Form("textfield3") &" " else sql = "and personer <= "& Request.Form("textfield3") &" " end if end if if Request.Form("checkbox2") <> "" then if sql = "" then sql = "where personer >= "& Request.Form("textfield3") &" " else sql = "and personer >= "& Request.Form("textfield3") &" " end if end if end if if Request.Form("checkbox3") <> "" then if Request.Form("hojtidIDer") <> "" then if sql = "" then sql = " where (" else sql = sql & " and (" end if sql = sql & "op2kat.katID IN ("& Request.Form("hojtidIDer") &")" sql = sql & ")" end if end if
if Request.Form("checkbox4") <> "" then if Request.Form("emeIDer") <> "" then if sql = "" then sql = " where (" else sql = sql & " and (" end if sql = sql & "op2kat1.katID IN ("& Request.Form("emeIDer") &")" sql = sql & ")" end if end if
if Request.Form("checkbox5") <> "" then if Request.Form("katIDer") <> "" then if sql = "" then sql = " where (" else sql = sql & " and (" end if sql = sql & "op2kat3.katID IN ("& Request.Form("katIDer") &")" sql = sql & ")" end if end if
if Request.Form("checkbox6") <> "" then if Request.Form("maltidIDer") <> "" then if sql = "" then sql = " where (" else sql = sql & " and (" end if sql = sql & "op2kat2.katID IN ("& Request.Form("maltidIDer") &")" sql = sql & ")" end if end if
MySqlTabler = "opskrifter" if Request.Form("checkbox3") <> "" then MySqlTabler = "("& MySqlTabler &" inner join op2kat on op2kat.opID=opskrifter.id)" end if if Request.Form("checkbox4") <> "" then MySqlTabler = "("& MySqlTabler &" inner join op2kat1 on op2kat1.opID=opskrifter.id)" end if if Request.Form("checkbox5") <> "" then MySqlTabler = "("& MySqlTabler &" inner join op2kat2 on op2kat2.opID=opskrifter.id)" end if if Request.Form("checkbox6") <> "" then MySqlTabler = "("& MySqlTabler &" inner join op2kat3 on op2kat3.opID=opskrifter.id)" end if
set rs = conn.Execute("select opskrifter.* from "& MySqlTabler &" "& sql &" order by navn") response.write "<table width='500' border='0' cellspacing='10' align='center'>" f = 0 do while not rs.eof if f mod 3 = 0 then response.write "</tr><tr><td width='225'>" else response.write "<td width='225'>" end if
uha så skal jeg til at lave alle udtræk om...opret opskrift, ret opskrift, udtræk af kategoriger eller er det at henvise til opID og hojID eller hvordan kommer jeg så til at bruge de kategoriger jeg har?
Du skal nu til at bruge det "rigtige" id for dine kategorier, så du kan slette emne, kategoriid, hojtid og vare fra dine kategori-tabeller.
Du skal også til at joine tabeller sammen, når du laver udtræk. Her er et eks på hvordan nogle af dine sql-sætninger bliver:
alle som er tilknyttet en/flere højtider (distinct bruges her for at få en forekomst af dem der har flere højtider): "SELECT distinct opskrifter.* FROM (opskrifter inner join op2kat on opskrifter.id=op2kat.opid)"
alle som er tilknyttet en bestemt højtid (juleaften id=22): "SELECT opskrifter.* FROM (opskrifter inner join op2kat on opskrifter.id=op2kat.opid) where op2kat.katID=22"
Du skal ikke kende id'en på opskriften. Du skal kende id'en på kategorien (22 for juleaften), resten finden den ud af på JOIN, hvor vi jo har sagt "opskrifter.id=op2kat.opid". I dette tilfælde joiner vi med op2kat tabellen, og den indeholder kun info om hvilke højtider en opskrift tilhører. Det kunne måske være smart et omdøbe tabellerne, så de fik et mere sigende navn.
kategorier = hojtider kategori1 = land kategori2 = Ved ikke helt hvad det er... kategori3 = madtype
tilsvarende ved op2kat som så burde hedde op2hoj.
Alle opskrifter som er knyttet til en højtid kan trækkes ud med: "SELECT distinct opskrifter.* FROM (opskrifter inner join op2kat on opskrifter.id=op2kat.opid)"
Det burde det ikke, du skal bare huske også at ændret relationerne jeg har sat op, så de kører på det andet id i stedet. Du kan også helt fjerne dem, men så sikre Access ikke længre at data passer, det skal du selv gøre. Du skal f.eks huske at slette fra op2katX tabellerne, hvis du sletter en opskrift. Det ville Access gøre for dig eller gøre opmærksom på, afhængig af hvilken indstilling der er på relationerne.
kan man ikke lave det sådanne at jeg kan beholde kategorier som de er nu og søgningen som du har lavet den. Jeg tænkte lidt på at lave. Jeg kan nemlig ikke finde ud a det med relationerne så det vil være et problem for mig her og nu at kunne lave alt dette om.
Det er noget i denne stil du skal lave hvis du ikke vil gøre brug af paging funktionen. Paging kræver dog at du skal åbne databasen på en anden måde. Du skal desuden gemme din SQL-sætning i en session, da du ikke har formfelterne længere, og derfor ikke kan opbygge sql-sætningen.
Det er noget med at have et hiddenfelt på formen som du tjekker efter, også ser om du skal opbygge sql'en eller bruge den i session.
if request.form("buildSQL") = "yes" then 'opbyg sql ... ... session("searchSQL") = "select opskrifter.* from opskrifter "& sql &" order by navn" end if set rs = conn.Execute(session("searchSQL"))
øverst på siden: if request.querystring("sideID") <> "" then sideID = cint(request.querystring("sideID")) else sideID = 1
løkken til at løbe igennem resultater
counter = 1 do while not rs.eof if counter <= (sideID*20) and counter > ((sideID-1)*20) 'udskriv resultaterne end if counter = counter + 1 rs.MoveNext loop
on error resume next rs.MoveFirst on error goto 0 if sideID > 1 then response.write "<a href=""denneside.asp?sideID="& (sideID-1) &"""> << </a>" counter = 1 do while not rs.eof if (counter mod 20) = 1 then response.write "<a href=""denneside.asp?sideID="& cint(counter/20) &"""> "& cint(counter/20) &" </a>" counter = counter + 1 rs.MoveNext loop if counter > 20 and (counter-20) < sideID*20 then response.write "<a href=""denneside.asp?sideID="& (sideID+1) &"""> >> </a>"
Nu har jeg sammen sat det sådanne her, men den udskriver ikke noget og der kommer heller ikke nogle fejl?
<% OpenDatabase if request.querystring("sideID") <> "" then sideID = cint(request.querystring("sideID")) else sideID = 1 if request.form("buildSQL") = "yes" then
sql = "" if Request.Form("textfield") <> "" then if sql = "" then sql = "where navn like '%"& Request.Form("textfield") &"%' " else sql = "and navn like '%"& Request.Form("textfield") &"%' " end if end if sql = "" if Request.Form("textfield1") <> "" then if sql = "" then sql = "where in1 like '%"& Request.Form("textfield1") &"%' " else sql = "and in1 like '%"& Request.Form("textfield1") &"%' " end if end if if Request.Form("textfield2") <> "" then if sql = "" then sql = "where tid >= '"& Request.Form("textfield2") &"' " else sql = "and tid >= '"& Request.Form("textfield2") &"' " end if end if if Request.Form("textfield3") <> "" then if Request.Form("checkbox") <> "" then if sql = "" then sql = "where personer <= "& Request.Form("textfield3") &" " else sql = "and personer <= "& Request.Form("textfield3") &" " end if end if if Request.Form("checkbox2") <> "" then if sql = "" then sql = "where personer >= "& Request.Form("textfield3") &" " else sql = "and personer >= "& Request.Form("textfield3") &" " end if end if end if if Request.Form("checkbox3") <> "" then if Request.Form("hojtidIDer") <> "" then if sql = "" then sql = " where (" else sql = sql & " and (" end if sql = sql & "op2hoj.katID IN ("& Request.Form("hojtidIDer") &")" sql = sql & ")" end if end if
if Request.Form("checkbox4") <> "" then if Request.Form("emeIDer") <> "" then if sql = "" then sql = " where (" else sql = sql & " and (" end if sql = sql & "op2kemme.katID IN ("& Request.Form("emeIDer") &")" sql = sql & ")" end if end if
if Request.Form("checkbox5") <> "" then if Request.Form("katIDer") <> "" then if sql = "" then sql = " where (" else sql = sql & " and (" end if sql = sql & "op2kategori.katID IN ("& Request.Form("katIDer") &")" sql = sql & ")" end if end if
if Request.Form("checkbox6") <> "" then if Request.Form("maltidIDer") <> "" then if sql = "" then sql = " where (" else sql = sql & " and (" end if sql = sql & "op2vare.katID IN ("& Request.Form("maltidIDer") &")" sql = sql & ")" end if end if
MySqlTabler = "opskrifter" if Request.Form("checkbox3") <> "" then MySqlTabler = "("& MySqlTabler &" inner join op2hoj on op2hoj.opID=opskrifter.id)" end if if Request.Form("checkbox4") <> "" then MySqlTabler = "("& MySqlTabler &" inner join op2emme on op2emme.opID=opskrifter.id)" end if if Request.Form("checkbox5") <> "" then MySqlTabler = "("& MySqlTabler &" inner join op2kategori on op2kategori.opID=opskrifter.id)" end if if Request.Form("checkbox6") <> "" then MySqlTabler = "("& MySqlTabler &" inner join op2vare on op2vare.opID=opskrifter.id)" end if
session("searchSQL") = "select opskrifter.* from opskrifter "& MySqlTabler &" "& sql &" order by navn" set rs = conn.Execute(session("searchSQL")) counter = 1 do while not rs.eof if counter <= (sideID*20) and counter > ((sideID-1)*20) Then response.write "<table width='500' border='0' cellspacing='10' align='center'>" f = 0 do while not rs.eof if f mod 3 = 0 then response.write "</tr><tr><td width='225'>" else response.write "<td width='225'>" end if
response.write "</td>" f = f + 1 rs.MoveNext loop response.write "</tr>" response.write "</table>" end if counter = counter + 1 rs.MoveNext loop
on error resume next rs.MoveFirst on error goto 0 if sideID > 1 then response.write "<a href=""denneside.asp?sideID="& (sideID-1) &"""> << </a>" counter = 1 do while not rs.eof if (counter mod 20) = 1 then response.write "<a href=""denneside.asp?sideID="& cint(counter/20) &"""> "& cint(counter/20) &" </a>" counter = counter + 1 rs.MoveNext loop if counter > 20 and (counter-20) < sideID*20 then response.write "<a href=""denneside.asp?sideID="& (sideID+1) &"""> >> </a>" End if
du skal have flyttet din end if op mellem disse linjer:
session("searchSQL") = "select opskrifter.* from opskrifter "& MySqlTabler &" "& sql &" order by navn" end if '<!-- Her. For så bruger den session("searchSQL") når du hopper frem/tilbage set rs = conn.Execute(session("searchSQL"))
nu viser den søgningen, men prøv at hoppe her ine og bare tryk på søg uden at vælge noget så viser den alt fra databasen og så tryk på siderne. så virker det ikke.
Du skal også prøve at søge i kategorierne. og under kager der ved jeg der er opskrifter og se hvad der sker.
Det er fordi du har et loop i loop. Mit gæt er at det skal være sådan:
counter = 1 f = 0 response.write "<table width='500' border='0' cellspacing='10' align='center'>" do while not rs.eof if counter <= (sideID*20) and counter > ((sideID-1)*20) Then if f mod 3 = 0 then response.write "</tr><tr><td width='225'>" else response.write "<td width='225'>" end if
det der side 0 kan man ikke fjerne det så den skarter fra side 1 med resultaterne? Den virker som den skal når 0 er vær og starter fra 1 med resultaterne.
når man vælger i nogle af drop down kategorierne laver den fejl:
Syntax error in FROM clause.
/sogresultat.asp, line 146
session("searchSQL") = "select opskrifter.* from opskrifter "& MySqlTabler &" "& sql &" order by navn" end if '<!-- Her. For så bruger den session("searchSQL") når du hopper frem/tilbage set rs = conn.Execute(session("searchSQL"))
ups det var den forkerte søgning. Den første er hvor der vises alle resultater og der kun trykkes på søg.
Dette er hvis der vælges i kategorierne:
select opskrifter.* from opskrifter (opskrifter inner join op2kategori on op2kategori.opID=opskrifter.id) where (op2kategori.katID IN (58)) order by navn
Jeg har fået lavet det lidt forkert. Den beregner ikke det rigtige sidenummer:
if (counter mod 20) = 1 then response.write "<a href=""denneside.asp?sideID="& cint(counter/20) &"""> "& cint(counter/20) &" </a>"
skal derfor være: if (counter mod 20) = 1 then response.write "<a href=""denneside.asp?sideID="& (int((counter-1)/20)+1) &"""> "& (int((counter-1)/20)+1) &" </a>"
he he det virker fint, men nu er det >> den er gal med. Hvis der er side << 1 2 3 >> og man er på side 3 og trykker på frem så kommer der en tom side 4
if counter > 20 and (counter-20) < sideID*20 then response.write "<a href=""denneside.asp?sideID="& (sideID+1) &"""> >> </a>"
Skal rettes lidt til. Prøv denne: if counter > 20 and (counter) > sideID*20 then response.write "<a href=""denneside.asp?sideID="& (sideID+1) &"""> >> </a>"
nu ved jeg ikke hvor stort et TAK jeg skal give dig for uden din hjælp vil jeg ikke kunne få sådanne en søgning på så kort tid, måske der vil have gået et par år.
Jeg takke fordi ud har haft tånmodighed til at blive og hjælpe hele vejen i gemmen og for det findes der ikke nogen tak.
Det er disse ? som er sjove at klare, og jeg lærer skam også noget selv. Man bliver nemlig meget bedre til fejlsøgning. Også kan man finde alle disse scrips frem når/hvis man selv skal bruge dem.
.o) <-- One Eyed Jack
Synes godt om
Ny brugerNybegynder
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.