webForumDet fria alternativet

Favoritval av affärer

ASP

23 svar · 488 visningar · startad av Bj

Medlem sedan sep. 2000314 inlägg
Frågan#1

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?

Medlem sedan dec. 19998 577 inlägg
#2

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.

MvV

Medlem sedan sep. 20011 722 inlägg
#3

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.

Medlem sedan sep. 2000314 inlägg
#4

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>
Medlem sedan dec. 19998 577 inlägg
#5

Ä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.

Medlem sedan dec. 19998 577 inlägg
#6

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>
Medlem sedan sep. 2000314 inlägg
#7

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 )

Medlem sedan dec. 19998 577 inlägg
#8

Du måste ange entreprenörsidt i variabeln strEntId också, det är kopplingen till vilkas favoriter som skall tas fram.

Medlem sedan sep. 2000314 inlägg
#9

Tyvärr hänger jag inte riktigt med där Vide.
Hur skall det anges?

Medlem sedan dec. 19998 577 inlägg
#10

Hur anges vilken entreprenör som kollar på sidan? Det måste på något sätt kopplas innan du kör scriptet.

Medlem sedan sep. 2000314 inlägg
#11

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.....

Medlem sedan mars 20015 287 inlägg
#12

Vad hände när du gjorde det? Tycker det borde fungerat.
Förutsatt att det är ett tal som finns i Request.Form("entreprenorsId")

Medlem sedan sep. 2000314 inlägg
#13

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.

Medlem sedan sep. 2000314 inlägg
#14

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>
Medlem sedan juni 200032 967 inlägg
#15

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
%>

Mvh,

Medlem sedan sep. 2000314 inlägg
#16

Jo du har nog hängt med @nders. Sedan är tanken att dessa förbockade rutor skall uppdateras i tabellen
Favoriter

som alltså innehar fälten
FavoritId (räknare)
FavoritaffarId (tal)
FavoritentreprenorId (tal)

Medlem sedan juni 200032 967 inlägg
#17

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?

Mvh

Medlem sedan sep. 2000314 inlägg
#18

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.

Puh.. inte så enkelt att förklara kanske...

Medlem sedan mars 20015 287 inlägg
#19

Det där verkar sunt tycker jag, en relationstabell helt enkelt.

Medlem sedan juni 200032 967 inlägg
#20

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
126 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)