Om DBMS = MySQL och REGEXP är tillgängligt, kanske följande kan fungera:
select product
from tabell
where lcase(product)
regexp '^[" & lcase(replace(request.querystring("select")), ",", "") & "]'
order
by product
14 svar · 570 visningar · startad av TheMagnus
Så här ligger det till:
Jag har en droplista med bokstäver från a till z. Man ska kunna markera flera bokstäver m.h.a. att man håller inne [Ctrl]-knappen alt. [Shift]-knappen. Alltså en <select multiple>.
Nu är jag ingen höjdare på ASP, så jag skulle vilja ha en liten guide på hur man kodar för att lista alla produkter som börjar på de valda bokstäverna?
"SELECT product FROM tabell WHERE product LIKE '" + bokstav + "%' ORDER BY product"
Så långt är jag med, men själva ASP-kodningen är jag ingen fena på, så det skulle vara grymt med en hint eller tre. :)
Om DBMS = MySQL och REGEXP är tillgängligt, kanske följande kan fungera:
select product
from tabell
where lcase(product)
regexp '^[" & lcase(replace(request.querystring("select")), ",", "") & "]'
order
by product
SQL-satsen som TheMagnus skrev var helt OK, så någon regexp behövs inte.
strSQL="SELECT product FROM tabell WHERE 1=0"
for each item in request("select")
strSQL = strSQL & " OR product LIKE '" & replace(item,"'","''") & "%'"
next
1=0 är en liten fuling, men jag var lat och den fungerar bra
Nu var det ju asp´n han ville ha hjälp med så:
Dim objConn, objRs, sql
Set objConn = Server.CreateObject("ADODB.Connection")
objConn.open "Provider_beroende_på_databas"
sql = "SELECT product FROM tabell WHERE product LIKE '" + bokstav + "%' ORDER BY product"
Set objRs = objConn.execute(sql)
Do Until objRs.Eof
Response.Write(objRs("product") & "<br />")
objRs.MoveNext
Loop
Set objRs = Nothing
Set objConn = Nothing
Tack alla, men jag lyckades kanske förklara lite skumt... Jag ska försöka igen. :)
Jag har en lista:
<select name="bokstav" multiple>
<option value="a">A</option>
<option value="b">B</option>
<option value="c">C</option>
...
<option value="z">Z</option>
</select>
Man ska alltså kunna välja flera bokstäver genom att hålla inne [Ctrl]-tangenten. Hur ser kodningen ut för att lista alla som börjar på de tecken man valt då?
Har du testat emissions kod?
Se bara till att du gör request på bokstav, så borde nog SQL-frågan byggas upp riktigt.
Oj fasen, den missade jag ju totalt! :r Ska genast testa denna kodsnutt!
Hmm, det vill inte fungerar riktigt som jag vill...
Microsoft JScript compilation error '800a03ed'
Expected '('
/produkter.asp, line 93
for each item in Request("Drop")
----^
<form name="selectcat" method="post" action="produkter.asp">
<select name="Drop" size=2>
<option Value="a">A</option>
<option Value="b">B</option>
<option Value="c">C</option>
...
<option value="z">Z</option>
</select>
<input type="Submit" name="Go" value="Go">
</form>
<%
var conn=Server.CreateObject("ADODB.Connection");
conn.Provider="Microsoft.Jet.OLEDB.4.0";
conn.Open(Server.MapPath("mindatabas.mdb"));
if (String(Request("Go")) != "undefined") {
strSQL = "SELECT product FROM industries WHERE 1=0"
for each item in Request("Drop")
strSQL = strSQL & " OR letter LIKE '%" & replace(item,"'","''") & "%'"
next
strSQL = strSQL & " ORDER BY product"
ProductQuerys = conn.execute(strSQL)
if (ProductQuerys.BOF & ProductQuerys.EOF)
Response.Write("")
else {
while (!ProductQuerys.EOF) {
Response.Write("<span class='results23'>" + ProductQuerys('product') + "</span><br>\n")
ProductQuerys.MoveNext();
}
}
Response.Write("<p class='results23'> </p>")
} else {
Response.Write("<p class='results23'> </p>")
conn.Close();
}
%>
Tänkte vara lite duktig och placera ut en parentes där han ville ha den, och en på slutet på den raden också, men det ville han inte vara med på serrö!
Microsoft JScript compilation error '800a03ec'
Expected ';'
/produkter.asp, line 93
for (each item in Request("Drop"))
----------^
Och där vettefasen om det ska vara ett semicolon...? Hjälp! :l
...eller, jag vetekatten om du kan göra så i jscript.
Skall du inte även ha krullparenteser med där?
Nej, fick dessvärre samma fel när jag satte semikolonet där...
Microsoft JScript compilation error '800a03ec'
Expected ';'
/produkter.asp, line 93
for (each item in Request("Drop"));
----------^
r/
for (each item in Request("Drop")){
strSQL = strSQL & " OR letter LIKE '%" & replace(item,"'","''") & "%'";
}
gav felmeddelandet:
Microsoft JScript compilation error '800a03ec'
Expected ';'
/produkter.asp, line 93
for (each item in Request("Drop")){
----------^
Du skulle kanske ha nämnt att du använder JScript. Byt då från & till + vid konkateneringarna i SQL-frågan.
Och, for-slinga: http://msdn.microsoft.com/library/en-us/script56/html/1b51a0ce-89f7-4a69-88ed-017b47dc398f.asp?frame=true
Konkatenera alltså på samma sätt som du gör i resten av din jscript-kod, och skriv om for-slingan med rätt syntax.
/a
Något åt detta håll:
if (String(Request("Go")) != "undefined") {
var rf = Request("Drop"), strSQL;
strSQL = "SELECT product FROM industries WHERE 1=0";
var e = new Enumerator(rf);
for(; !e.atEnd(); e.moveNext())
{
strSQL = strSQL + " OR letter LIKE '%" + e.item().replace("'","''") + "%'"
}
strSQL = strSQL + " ORDER BY product";
ProductQuerys = conn.execute(strSQL);
.....
@nders: Hade jag vetat det så hade jag berättat det. :r Är som sagt inte ASP'are i vanliga fall. PHP är mer min melodi, men ibland får man se sig som en svikare och lämna över sig till fienden... :e
Travoni: Tack! du är dagens hjälte! :bire
Ok, då rekommenderar jag starkt att du går över till VBScript i stället för JScript. Inte för att det är bättre, för det är det inte, men för att 99,9% av all ASP skrivs i VBScript och det blir lättare att få hjälp.