webForumDet fria alternativet

flera dropdown vid sokning

ASP

16 svar · 405 visningar · startad av Gimbo

Medlem sedan dec. 20001 626 inlägg
Frågan#1

har gjort en sokfunktion, dar det finns 7st dropdown listor som man valjer och nar man sedan valjer search sa vill jag att den listar den specifika kombinationen av det jag valt, just nu ar dfet sa att de listar alla poster som den hittar ur varje dropdown...

call OpenDb()
Period = request.form("period")
PriceRange = request.form("PriceRange")
Bedrooms = request.form("Bedrooms")
Bathrooms = request.form("Bathrooms")
Furnished = request.form("Furnished")
Parking = request.form("Parking")
Pet = request.form("Pet")

'SQL="SELECT Top 20 * FROM sublets WHERE Status = TRUE"

SQL="SELECT * FROM sublets WHERE Period LIKE '%" & Period & "%' OR Price LIKE '%" & PriceRange & "%' " &_
	 "OR Bedrooms LIKE '%" & Bedrooms & "%' OR Bathrooms LIKE '%" & Bathrooms & "%' OR Furnished LIKE '%" & Furnished & "%' " &_
	 "OR Parking LIKE '%" & Parking & "%' OR Pet LIKE '%" & Pet & "%' AND status = TRUE "

jag testade att andra OR till and men de blir det som sa att den hittar den specifika posten, men om man bara valjer att soka m h a en dropdown sa funkar det inte, vill alltsa att man skall kunna soka med samtliga dropdowns OCH med en dropdown om man sa vill

Medlem sedan mars 20025 907 inlägg
#2

Du får bygga upp sql-satsen successivt beroende på vilka select-listor som är använda.

Period = request.form("period")
PriceRange = request.form("PriceRange")
Bedrooms = request.form("Bedrooms")
Bathrooms = request.form("Bathrooms")
Furnished = request.form("Furnished")
Parking = request.form("Parking")
Pet = request.form("Pet")

SQL="SELECT * FROM sublets WHERE '1' = '1'"

if Period <> "defaultvärde" then
	SQL = SQL & " and Period LIKE '%" & Period & "%'"
end if

if PriceRange <> "defaultvärde" then
	SQL = SQL & " and Price LIKE '%" & PriceRange & "%'"
end if

'osv..

Där "defaultvärde" är det som står i selectlistorna om de inte ändras.

Ingen snygg lösning kanske, men den fungerar :O

Medlem sedan juli 20033 147 inlägg
#3

Ser krångligt ut Peeer.

Såhär hade jag gjort i PHP:

$data = "";
foreach ($_GET as $key => $value) {
  if (substr($key, 0, 1) != "S")
	continue;
  $key = substr($key, 1); // Tar bort S.
  $data .= "AND $key LIKE '%$value%' ";
}

$data = substr($data, 4); // Tar bort det första AND om det inte ska vara något annat villkor först.
$SQL = mysql_query("SELECT * FROM tabell WHERE $data") or die (mysql_error());

Där alla fält har ett prefix, i det här fallet S.

Ex.

<form action="" method="get">
<p>
Namn: <input type="text" name="Snamn">
<input type="submit" value="Sök">
</p>
</form>
Medlem sedan sep. 2003301 inlägg
#4

eh!!!
PhP i ASP, VBScript forum???

Medlem sedan mars 20025 907 inlägg
#5

Fraggel skrev:

eh!!!
PhP i ASP, VBScript forum???

Finns inget som hindrar dig från att översätta om du vill. Principen förstår man ju i alla fall. Meleas lösning är helt klart både smidigare och snyggare än mitt taffliga (men fungerande :P) försök.

Medlem sedan dec. 20001 626 inlägg
#6

uhhh fatta 0 av den dar PHP koden??? kan ngn oversatta till asp???

Medlem sedan apr. 200333 inlägg
#7

Utan någon större möjlighet att testa men.

Period = request.form("SPeriod")
PriceRange = request.form("SPriceRange")
Bedrooms = request.form("SBedrooms")
Bathrooms = request.form("SBathrooms")
Furnished = request.form("SFurnished")
Parking = request.form("SParking")
Pet = request.form("SPet")

strSQL = "SELECT * FROM sublets WHERE "
For Each Item In Request.Form
  If Left(Item,1) = "S" AND Not Request.Form(Item) = "" Then
    strSQL = strSQL & LCase(Right(Item,Len(Item)-1)) & " LIKE '%" & LCase(Right(Item,Len(Item)-1)) & "%' AND "
  End If
Next
strSQL = strSQL & "Status = True"

Nu borde strSQL se ut som nåt liknande din hårdkodade SQL-sats fast dom droplists som inte har nåt värde står inte med.
Men jag reserverar mig för eventuella felaktigheter pga att jag inte kan testa ;)

/MAge

Medlem sedan dec. 20001 626 inlägg
#8

for foljande felmeddelande:

Microsoft JET Database Engine error '80040e0c' 

Command text was not set for the command object. 

/sublets.asp, line 246

den klagar pa sql satsen,

jag andrade alla selecttaggars namn till s i borjan, sa att variabeln skulle fa ett varde men fick ovanstaende felmeddelande

Medlem sedan mars 20025 907 inlägg
#9

Du skulle även byta namn på alla selectlistor så att de har samma namn som kolumnen i din tabell (fast med ett inledande "s"). Om du provar att skriva ut sql-satsen istället för att exekvera den, hur ser den ut då?

Medlem sedan apr. 200333 inlägg
#10

S är en mindre bra bokstav att välja eftersom du har oftast har "Send", "Skicka", "Search" på din submit-knapp så Q, Z eller X är ett bättre val

/MAge

Medlem sedan dec. 20001 626 inlägg
#11

detta e vad SQL satsen skriver ut:

SELECT * FROM sublets WHERE period LIKE '%period%' AND pricerange LIKE '%pricerange%' AND bedrooms LIKE '%bedrooms%' AND bathrooms LIKE '%bathrooms%' AND furnished LIKE '%furnished%' AND parking LIKE '%parking%' AND pet LIKE '%pet%' AND Status = True 
Microsoft JET Database Engine error '80040e0c' 

Command text was not set for the command object. 

/sublets.asp, line 246

har andrat s mot x, det verkar som att den inte far in ett varde i sql fragan, jag satte bathrooms till 2, men i sql fragan star det bathrooms, och nar jag skriver ut request.form bathrroms sa far jag vardet 2, sa??

Medlem sedan apr. 200333 inlägg
#12

Låt oss säja att din dropdown ser ut så här

&#9484;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9516;&#9472;&#9488;
&#9474;         &#9474;&#9660;&#9474;
&#9500;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9532;&#9472;&#9496;
&#9474; default &#9474;
&#9500;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9508;
&#9474; värde 1 &#9474;
&#9500;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9508;
&#9474; värde 2 &#9474;
&#9500;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9508;
&#9474; värde 3 &#9474;
&#9492;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9472;&#9496;

då måste du ändra

  If Left(Item,1) = "X" AND Not Request.Form(Item) = "" Then

till

  If Left(Item,1) = "X" AND Not Request.Form(Item) = "default" Then

Men har du nu defaultvärdet till samma som namnet på dropdownen (utan X'et) så kan du skriva

  If Left(Item,1) = "X" AND Not Request.Form(Item) = "LCase(Right(Item,Len(Item)-1))" Then

/MAge

Medlem sedan apr. 200333 inlägg
#13

Får du det inte att funka kan du byta ut

strSQL = strSQL & LCase(Right(Item,Len(Item)-1)) & " LIKE '%" & LCase(Right(Item,Len(Item)-1)) & "%' AND "

mot

strSQL = strSQL & LCase(Right(Item,Len(Item)-1)) & " LIKE '%" & Request.Form(Item) & "%' AND "

och då behöver du inte dom 7 variablerna du deklarerar innan. Men det är kanske inte att föredra om du använder dom på fler ställen.

/MAge

Medlem sedan dec. 20001 626 inlägg
#14

det forsta du namnde funkade inte sa jag valde att byta ut sql fragan mot den andra du postade, da fick jag detta:

SELECT * FROM sublets WHERE period LIKE '%Select Period%' AND pricerange LIKE '%Select Range%' AND bedrooms LIKE '%1%' AND bathrooms LIKE '%Bathrooms%' AND furnished LIKE '%Select Option%' AND parking LIKE '%Select Option%' AND pet LIKE '%Select Option%' AND Status = True 
Microsoft JET Database Engine error '80040e0c' 

Command text was not set for the command object. 

/sublets.asp, line 253

nu fick den i a f in ett varde i bedrooms men vart kommer felmeddelandet ifran??

Medlem sedan apr. 200333 inlägg
#15

va jag kan se får du fortfarande med defaultvärdet. kolla detta exemplet så får du se hur SQL-satsen borde se ut

De som man kan/får lägga till sen är en koll ifall ingen dropdown är vald. Annars får man ut allt från databasen

/MAge

Medlem sedan juni 200032 967 inlägg
#16

Felmeddelandet betyder att du försöker exekvera något som inte är en SQL-fråga. Du kallar din variabel med frågan för strSQL, jag kan ge mig på att det inte är den du försöker köra med Execute.

Medlem sedan dec. 20001 626 inlägg
#17

DU e grym Mage!! fan va schysst! o anders d stamde det som du sa angaende felmeddelandet

256 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
121 ms — deklarationer (db)
0 ms — hämta statistik (cache)
133 ms — hämta tråd, inlägg och bilagor (db)
120 ms — ändringar (db)