webForumDet fria alternativet

Sökmotor (till hattrick)

ASP

26 svar · 763 visningar · startad av Calevan

Medlem sedan maj 20031 173 inlägg
Frågan#1

Har en sida där man ska kunna söka på många egenskaper. Se denna sida: http://w3.chs.chalmers.se/kommitteer/pyrot/fredrik/hattrick/sokwing.asp

Det är ju så att man inte behöver fylla i värden i alla och då ska den bara söka på det man fyllt i. Hur ska jag bygga upp en sådan sökfunktion?

Medlem sedan juli 2000297 inlägg
#2

Bara att kolla om du fått input "-INGET-" eller "" från något fält, och anpassa databasfrågan efter detta.

Medlem sedan maj 20031 173 inlägg
#3

sebbz skrev:

Bara att kolla om du fått input "-INGET-" eller "" från något fält, och anpassa databasfrågan efter detta.

go, det var det jag hade tänkt (har satt värdet på "-INGET-" till 0, men hur bygger jag upp SQL satsen? Med ifsatser? och hur ska de ser ut då?

tack!

Medlem sedan aug. 200218 625 inlägg
#4

Jag vet inte men...

Hattrick skrev:

2003-09-29 Scanning
En liten påminnelse:

Det är strängeligen förbjudet att skapa, använda eller sprida program som automatiserar delar av spelet eller scannar in information, såvida programmet inte är godkänt av utvecklingsteamet.

Du får heller inte automatiskt inkludera ngn form av material från Hattrick på andra webtjänster utan tillstånd.

Medlem sedan maj 20031 173 inlägg
#5

Dryden skrev:

Jag vet inte men...

Hattrick skrev:

2003-09-29 Scanning
En liten påminnelse:

Det är strängeligen förbjudet att skapa, använda eller sprida program som automatiserar delar av spelet eller scannar in information, såvida programmet inte är godkänt av utvecklingsteamet.

Du får heller inte automatiskt inkludera ngn form av material från Hattrick på andra webtjänster utan tillstånd.

synd för dig att jag inte ska skanna hattricks sidor då, utan en egen databas som jag själv har gjort.

Medlem sedan maj 20031 173 inlägg
#6

frågan är alltså:

hur ändrar man en SQL fråga så att den tar hänsyn just till de parametrar som en användare vill?

Medlem sedan maj 2002560 inlägg
#7
sql = "select * from tabell where fält = '"&sträng&"'"
"If Trim(Request.Form("lalala")) <> "" then sql = sql & " and fält = "&Trim(Request.Form("lalala"))

Borde väl räcka?

Eventuellt

For Each i In Request.Form
	If Trim(Request.Form(i)) <> "" Then sql = sql & " and "&i.name&" = "
	If IsNumeric(Trim(Request.Form(i))) Then
	   sql = sql & Trim(Request.Form(i))","
	'AccessDatabas
	'ElseIf IsDate(Trim(Request.Form(i))) Then
	'   sql = sql & "#"&Trim(Request.Form(i))&"#,"
	Else
	   sql = sql & "'"&Trim(Request.Form(i))&"',"
	End If
Next
If Left(sql, 5) = " and " Then sql = Right(sql, (Len(sql) - 5))
sql = Left(sql, Len(sql) - 1)
sql = "select * from tabell where "& sql

Inget av kodexemplen är kontrollerade...

Medlem sedan maj 20031 173 inlägg
#8

Den ska ju kolla alla fälten, så då verkar ju kodsnutt två bra. fast tyvärr så förstår jag den inte riktigt... kan du förklara vad den gör och vad de olika ifsatserna igentligen kollar?

tack!

Medlem sedan aug. 200218 625 inlägg
#9

Calevan skrev:

synd för dig att jag inte ska skanna hattricks sidor då, utan en egen databas som jag själv har gjort.

Dåså. Kör hårt. ;)

Medlem sedan maj 2002560 inlägg
#10
For Each i In Request.Form
	If Trim(Request.Form(i)) <> "" Then sql = sql & " and "&i.name&" = " ' om i innehåller data så bygger vi upp sqlsatsen med requestens namn
	If IsNumeric(Trim(Request.Form(i))) Then ' om värdet är numeriskt
	   sql = sql & Trim(Request.Form(i))"," ' formatera sqlfrågan för numeriska fält
	'AccessDatabas
	'ElseIf IsDate(Trim(Request.Form(i))) Then 'om värdet är av datum-tidtyp och databasen är access så "avkommenterar" du denna rad och raden under
	'   sql = sql & "#"&Trim(Request.Form(i))&"#," ' formatera sqlfrågan för fält av datumtyp
	Else ' annars är det vanliga textfält
	   sql = sql & "'"&Trim(Request.Form(i))&"'," ' formatera sqlfrågan för textfält
	End If
Next
If Left(sql, 5) = " and " Then sql = Right(sql, (Len(sql) - 5)) ' ta bort det första "and" ur sqlsatsen, det vill vi inte ha där
sql = Left(sql, Len(sql) - 1) ta bort det sista "," det vill vi inte heller ha där
sql = "select * from tabell where "& sql

i ditt formulär sätter du dina fälts namn till fälten i databasen. Tror det vara allt

Medlem sedan maj 20031 173 inlägg
#11

Jag har ju två fält som är kopplade till samma post i databasen (det ser du om du kollar på sidan, en min och en max) hur löser jag det? Är inte så bra på sådana här FSO, fick detta felmedelande:

Microsoft VBScript runtime error '800a01a8'

Object required: 'i'

men det kanske beror på att alla fält inte heter som i databasen?

Medlem sedan maj 20031 173 inlägg
#12

Microsoft VBScript runtime error '800a01a8'

Object required: 'alder'

fick jag nu. vet inte riktigt vad jag lyckades ändra. tror inte något...

Medlem sedan juni 200032 967 inlägg
#13

Visa koden du använder.

Medlem sedan maj 20031 173 inlägg
#14

precis den föreslagna koden!

    For Each i In Request.Form
      If Trim(Request.Form(i)) <> "" Then sql = sql & " and "&i.name&" = " ' om i innehåller data så bygger vi upp sqlsatsen med requestens namn
        If IsNumeric(Trim(Request.Form(i))) Then ' om värdet är numeriskt
          sql = sql & Trim(Request.Form(i))&"," ' formatera sqlfrågan för numeriska fält
          
          'AccessDatabas
          'ElseIf IsDate(Trim(Request.Form(i))) Then 'om värdet är av datum-tidtyp och databasen är access så "avkommenterar" du denna rad och raden under 
          'sql = sql & "#"&Trim(Request.Form(i))&"#," ' formatera sqlfrågan för fält av datumtyp
        Else ' annars är det vanliga textfält
	    sql = sql & "'"&Trim(Request.Form(i))&"'," ' formatera sqlfrågan för textfält
	  End If
    Next
    
    Response.Write sql

kolla länken i första posten för att se sidan och testa den. bara att trycka på sök där så ser du.

Medlem sedan juni 200032 967 inlägg
#15

Prova att byta i.name till bara i, till att börja med.

Medlem sedan maj 20031 173 inlägg
#16

@nders skrev:

Prova att byta i.name till bara i, till att börja med.

innehåller inte bara i värdet? jag vill ju ha namnet på värdet i SQL satsen oxå. fick något svar, men jag vet inte riktigt hur. testa sidan om du vill.

kan du förklara varför jag skulle ta bort .name? tack!

Medlem sedan juni 200032 967 inlägg
#17

i innehåller fältnamnet, request.form(i) följdaktligen värdet.

Du får också lägga till en if-sats, eftersom submit-knappen inte ska vara med i SQL-frågan.

- - - -

Dock tycker jag inte att det är rätt approach med en for-loop här. Är det inte så att spelaregenskaperna borde sökas mellan 1 och 4 till exempel? Du har väl inte fälten spelupplagg och spelupplagg1 i tabellen, utan det är endast fältet spelupplagg som ska ha mellan 1 och 4 om jag gör en sökning mellan katastrofal och hyfsad?

Du får nog skriva om allt och göra det manuellt för varje fält.

Medlem sedan juni 200032 967 inlägg
#18

Calevan skrev:

kan du förklara varför jag skulle ta bort .name? tack!

Kan du förklara varför du skulle ha kvar name? Jag har aldrig hört talas om en sådan metod i request.form, och jag antar att det var därför du fick felmeddelandet. Mina fem cent, men jag kan ha fel...

Medlem sedan okt. 20023 030 inlägg
#19

Du kan även byta ut alla Trim(Request.Form(i)) mot Trim(i) eftersom i får värdet och inte indexet iom att du använder For Each.

Medlem sedan maj 20031 173 inlägg
#20

@nders skrev:

Calevan skrev:

kan du förklara varför jag skulle ta bort .name? tack!

Kan du förklara varför du skulle ha kvar name? Jag har aldrig hört talas om en sådan metod i request.form, och jag antar att det var därför du fick felmeddelandet. Mina fem cent, men jag kan ha fel...

Trodde det hade med For Each i In Request.Form att göra. dvs någon form av FSO.

jag vill ju inte bara ha värdet på "i" i SQL satsen utan även vilket fält det är som har det värdet, dvs i's namn. hur kan jag lösa det på annat sätt?

274 ms totalt · 4 externa anrop · v20260731065814-full.2f471f9e
128 ms — deklarationer (db)
0 ms — hämta statistik (cache)
142 ms — hämta tråd, inlägg och bilagor (db)
129 ms — ändringar (db)