Jag har kört fast totalt och kommer ingen vart för tillfället. Skall se om jag kan förklara på ett bra sätt vad jag vill göra.
Access databas.
Tabeller:
entreprenorer
affarer
orders
Jag har ett inloggningsformulär för entreptrenörer.
När de loggat in kommer de till en ordersida med ett formulär de skall fylla i. Deras egna namn och adress ligger också med där som hidden-fält från tabellen entreprenorer.
Här skall de sedan välja vilken affär de vill skicka ordern till.
Den ligger som en dropdown-lista där alla anslutna affärers email visas. (Hämtas från tabellen affarer)
När allt är ifyllt skickas ordern till affären med vald emailadress med hjälp av CDONT och Request.Form affaremail.
Men om denna lista "sväller" och blir många så skulle jag vilja att entreprenören någonstans skulle kunna välja ut ett antal "favoritaffärer" så endast dessa visas i framtida besök i just hans dropdown-lista.
Någon som känner sig manad att förklara detta för mig?
Skapa en relationstabell där du sparar entreprenörens id tillsammans med dom affärsid:n som skall vara favoriter. Sedan är det bara att kolla i den tabellen när du skall lista affärerna. Finns det inga favoriter (eof) så listar du alla, om det finns favoriter så listar du bara dom affärer kopplade till entreprenörens id.
Om du har ett extra fält i entreprenorer för affarerID där du sammlar alla affärs ID åtskillt med ; eller liknande och sedan när du ska skapa listan splitar du upp dom i en Array och hämtar dom sedan från databasen.
Oki!
Om man börjar med Vides förslag:
Skapade en tabell som heter favoriter med fälten:
favoritID (räknare)
favoritentreprenorID (text)
favoritaffarID (text)
Då kommer det att bli tre tabeller inblandade när de kommer till orderformuläret...
Hur skall man lösa det. Så här ser det ut nu där affären väljs.
Set RecSet = Server.CreateObject("ADODB.Recordset")
SQL = "SELECT * From affarer ORDER BY AffarsNamn"
RecSet.Open SQL, Connect
If RecSet.EOF Then
response.write "Inga affärer är inlagda i databasen"
End If
%>
<option value='0'>- Välj affär här -</option>
<% Do While Not RecSet.EOF %>
<option>
<% =RecSet("AffarsEmail") %>
<%
RecSet.MoveNext
Loop
RecSet.Close
Connect.Close
Set RecSet = nothing
Set Connect = nothing
%>
</option>
</select>
Är favoritentreprenorID (text) och favoritaffarID (text) nummer eller textnamn? Förslagsvis skall det vara nummer och således inte text. Antar att varje entreprenör och affär har ett unikt idnummer.
Denna kod bygger på att du har ID-nummrena som nummer och inte text:
<%
SQL = "select * from favoriter where favoritentreprenorID = " & strEntId
set RecSet = Connect.execute( SQL )
if RecSet.eof then
SQL = "SELECT * From affarer ORDER BY AffarsNamn"
set rsAffarer Connect.execute( SQL )
else
while not RecSet.eof
strIds = strIds & RecSet( "favoritaffarID" ) & ","
RecSet.movenext
wend
strIds = left( strIds, len( strIds ) -1 )
SQL = "select * from affarer where arrarsid in( " & strIds & " )"
set rsAffarer = Connect.execute( SQL )
end if
If rsAffarer.EOF Then
response.write "Inga affärer är inlagda i databasen"
End If
%>
<option value='0'>- Välj affär här -</option>
<% Do While Not rsAffarer.EOF %>
<option>
<%=rsAffarer("AffarsEmail") %>
<%
rsAffarer.MoveNext
Loop
rsAffarer.Close
RecSet.Close
Connect.Close
Set rsAffarer = nothing
Set RecSet = nothing
Set Connect = nothing
%>
</option>
</select>
Har ändrat ID nummren i tabellen favoriter till "tal"
Fick följande fel:
Microsoft OLE DB Provider for ODBC Drivers (0x80040E14)
[Microsoft][Drivrutin för ODBC Microsoft Access] Syntaxfel (operator saknas) i frågeuttrycket 'favoritentreprenorID ='.
/databas/orderform1.asp, line 244
vilket är följande rad.
set RecSet = Connect.execute( SQL )
Mmm, den skall alltså kopplas till fältet entreprenorsID från tabellen entreprenorer.
Kanske... ;)
Provade med strEntId=Request.Form("entreprenorsId")
men det gick ju inte.....
Riktigt solbulle.
Jag hade naturligtvis ingen form att hämta ifrån utan det skulle vara RecSet.
Nu funkar detta... tror jag. Skall testa lite mer.
STORT TACK VIDE!!!
Sedan kommer jag till nästa del.
Hur lägger man upp det så entreprenören första gången kan välja sina affärer, och han borde även kunna någon gång gå tillbaka och ta bort eller lägga till nya affärer om han vill.
Nu har jag kommit till valet av favoritaffärer.
En länk från orderformuläret tar entreprenören till följande sida.
Tanken är att entreprenören skall kunna sätta en bock i de affärer han vill visas i dropdown menyn i framtiden.
Men hur skall informationen från formuläret tas emot?
<%
Set Connect = Server.CreateObject("ADODB.Connection")
MdbFilePath = Server.MapPath("db_1.mdb")
Connect.Open = "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & MdbFilePath & ";"
Set RecSet = Server.CreateObject("ADODB.Recordset")
Visa = "SELECT * FROM entreprenorer WHERE entreprenorsid = " & Trim(Request.QueryString("adressID")) & " "
RecSet.Open Visa, Connect, adOpenStatic, adLockOptimistic
%>
<%=RecSet("entreprenorsid")%><br>
<%=RecSet("entreprenorsnamn")%><br>
<%
RecSet.Close
Connect.Close
Set RecSet = nothing
Set Connect = nothing
%>
<br><br>
<form action="valj_favorit2.asp" method="post">
<%
Set Connect = Server.CreateObject("ADODB.Connection")
MdbFilePath = Server.MapPath("db_1.mdb")
Connect.Open = "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & MdbFilePath & ";"
Set RecSet = Server.CreateObject("ADODB.Recordset")
Visa = "SELECT * FROM affarer order by affarsnamn"
RecSet.Open Visa, Connect, adOpenStatic, adLockOptimistic
Do While Not RecSet.EOF
%>
<input type="checkbox" name="mina_favoriter">
<%=RecSet("affarsid")%> -
<%=RecSet("affarsnamn")%> -
<%=RecSet("affarsort")%>
<br>
<%
RecSet.MoveNext
Loop
RecSet.Close
Connect.Close
Set RecSet = nothing
Set Connect = nothing
%>
<input type="submit" Value="Välj dessa favoriter">
</form>
Jag är inte helt säker på vad du är ute efter, men jag gör ett försök i alla fall.
<input type="checkbox" name="mina_favoriter"[b] value="<%=RecSet("IDfältet")%>"[/b]>
. . . .
' när du tar emot:
<%
strFavoritesList = Request.Form("mina_favoriter")
varFavoritesList = Split(strFavoritesList, ", ") ' skapa array genom att dela strängen vid kommatecken (man kan välja fler affärer)
for i = 0 to ubound (varFavoritesList)
Response.write varFavoritesList(i) & "<br>"
next
%>
Har du alla de värdena på sidan innan? Behövs det verkligen tre värden, det borde väl räcka med ett id-nummer, det verkar som du hämtar allt från samma tabell när du skapar formuläret?
Entreprenörens uppgifter hämtas från "sin" tabell vid dennes inloggning.
I forumläret loopas sedan alla affärer i en dropdown-lista.
Men om entreprenören via en länk gått till valj_favoriter.asp och där valt vilka affärer han vill använda i framtiden så skall endast dessa visas i ovanstående dropdown-lista. Därför finns tabellen "Favoriter"
Har testat med att "manuellt" lägga in uppgifter i tabellen favoriter.
FavoritId FavoritaffarId FavoritentrepenorId
1 10 5
2 11 5
3 12 5
4 10 19
5 15 19
osv...
Nu gäller det för att låta entreprenören själv välja favoritaffärer vilket jag tänkte med ovanstående formulär.
Nu är jag med. Jag missuppfattade dig en aning bara, och precis som solbulle skriver; det ser sunt ut. :)
Jag vet inte om du har entreprenörsid någon annanstans än i en querystring på sidan där du skriver ut formuläret, så vi skickar vidare det också i formuläret:
<form action="valj_favorit2.asp" method="post">
[b]<input type="hidden" name="entreprenorsid" value="<%=Trim(Request.QueryString("adressID")) %>[/b]
<%
Set Connect = Server.CreateObject("ADODB.Connection")
MdbFilePath = Server.MapPath("db_1.mdb")
Connect.Open = "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & MdbFilePath & ";"
Set RecSet = Server.CreateObject("ADODB.Recordset")
Visa = "SELECT * FROM affarer order by affarsnamn"
RecSet.Open Visa, Connect, adOpenStatic, adLockOptimistic
Do While Not RecSet.EOF
%>
<input type="checkbox" name="mina_favoriter" value="<%=RecSet("IDfältet")%>"> <%=RecSet("affarsid")%> -
<%=RecSet("affarsnamn")%> -
<%=RecSet("affarsort")%>
<br>
<%
RecSet.MoveNext
Loop
RecSet.Close
Connect.Close
Set RecSet = nothing
Set Connect = nothing
%>
<input type="submit" Value="Välj dessa favoriter">
</form>
Och sedan, när det är dags att ta emot då:
<%
strFavoritesList = Request.Form("mina_favoriter")
varFavoritesList = Split(strFavoritesList, ", ") ' skapa array genom att dela strängen vid kommatecken (man kan välja fler affärer)
' skapa connectionobjekt, Connect
' här tar vi och rensar bort allt som var inlagt tidigare, eftersom vi ändå kommer göra INSERT på allt som markerades
strSQL = "DELETE FROM Favoriter WHERE FavoritentreprenorId = " & Request.Form("entreprenorsid")
Connect.Execute strSQL,,128
for i = 0 to ubound (varFavoritesList)
strSQL = "INSERT INTO Favoriter (FavoritaffarId, FavoritentreprenorId) VALUES (" & varFavoritesList(i) & ", " & Request.Form("entreprenorsid") & ")"
Connect.Execute strSQL,,128
next
%>
Återigen, med reservation för eventuella missförstånd. ;)
Mvh,
266 ms totalt · 4 externa anrop · v20260731065814-full.86ec41c2