webForumDet fria alternativet

Lite mer add to mdb..

ASP

14 svar · 867 visningar · startad av Biasse

Medlem sedan aug. 2003480 inlägg
Frågan#1

Hur får jag detta rätt?

Ska försöka spara info om artikelnummer, produktnamn, pris samt antal.

Men hur skriver man?

RecSet("Artnr") = Request.Form("????")
RecSet("Produkt") = Request.Form("????")
RecSet("Antal") = Request.Form("????")
RecSet("Pris") = Request.Form("????")

Jag har alldrig plockat ut nått från en session så måste ha lite hjälp. Har detta att gå på.

varde = Request.Cookies(""& Session.SessionID &"")
hamta = Split(varde,"&")
ReDim MyArray(4,Ubound(hamta))
for x = 0 to ubound(hamta)
hamta2 = Split(hamta(x),"=")
IF Len(hamta2(0)) > 0 AND len(hamta2(1)) > 0 then
SQL = "SELECT * FROM produkter WHERE id =" & int(hamta2(0))
Set RecSet = Connect.Execute(SQL)
MyArray(0,x) = hamta2(0)
MyArray(1,x) = hamta2(1)
MyArray(2,x) = RecSet("artnr")
MyArray(3,x) = RecSet("namn")
MyArray(4,x) = RecSet("pris")

RecSet.Close
Set RecSet = nothing
Medlem sedan aug. 2003480 inlägg
#2

hm

Kan man inte använda samma värden som jmail gör i detta för att spara det i en databas? :q

Den klarar inte att hämta:

RecSet("Artnr") = Request.Form("MyArray(2,i)")
RecSet("Produkt") = Request.Form("MyArray(3,i)")
RecSet("Antal") = Request.Form("MyArray(1,i)")

Koden:

Set Connect = Server.CreateObject("ADODB.Connection") 
Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" &Server.MapPath("webshop.mdb")
Session.Lcid = 1053

varde = Request.Cookies(""& Session.SessionID &"")
hamta = Split(varde,"&")
ReDim MyArray(4,Ubound(hamta))
for x = 0 to ubound(hamta)
hamta2 = Split(hamta(x),"=")
IF Len(hamta2(0)) > 0 AND len(hamta2(1)) > 0 then
SQL = "SELECT * FROM produkter WHERE id =" & int(hamta2(0))
Set RecSet = Connect.Execute(SQL)
MyArray(0,x) = hamta2(0)
MyArray(1,x) = hamta2(1)
MyArray(2,x) = RecSet("artnr")
MyArray(3,x) = RecSet("namn")
MyArray(4,x) = RecSet("pris")

RecSet.Close
Set RecSet = nothing
END IF

next
%>

<!-- #include file = "adovbs.inc" -->

<%
Set RecSet = Server.CreateObject("ADODB.Recordset")

Addera = "Select * From bestall" 
RecSet.Open Addera, Connect, adOpenStatic, adLockOptimistic

  RecSet.AddNew
  
  RecSet("Artnr") = Request.Form("MyArray(2,i)")
  RecSet("Produkt") = Request.Form("MyArray(3,i)")
  RecSet("Antal") = Request.Form("MyArray(1,i)")
      
  RecSet.Update
	
  RecSet.Close
  Connect.Close
  Set RecSet = nothing
  Set Connect = nothing
Medlem sedan juni 20019 519 inlägg
#3

Forfarande:
Heter dina html forms "MyArray(2,i)"?

RecSet("Artnr") = MyArray(2,i)
RecSet("Produkt") = MyArray(3,i)
RecSet("Antal") = MyArray(1,i)
Medlem sedan aug. 2003480 inlägg
#4

Är det detta du undrar om?

Det är en enkel webshop jag försöker ändra i så att jag får beställning i mdb istället för i ett mail.

Set jmail = Server.CreateObject("JMail.Message")
 
jmail.AddRecipient ""& eposten &"", ""& eposten &""
jmail.From = "" & info(7) & ""
jmail.Subject = "Beställning"
jmail.appendHTML "<font face=verdana size=1>"
For i = 0 To Ubound(myArray,2)
IF Len(MyArray(0,i)) > 0 then
jmail.appendHTML "<b>Art.nr: </b>" & MyArray(2,i) & "<br>"
jmail.AppendHTML "<b>Produkt: </b>" & MyArray(3,i) & "<br>"
jmail.AppendHTML "<b>Antal: </b>" & MyArray(1,i) & "<br>"
jmail.AppendHTML "-------------------------------------------<br>"
IF i = Ubound(myArray,2) then
jmail.AppendHTML "&nbsp;<br>"
END IF
Medlem sedan juni 20019 519 inlägg
#5

Ja... du kan använda samma array av data som du använder dig av i dina jmail (om dom är i samma dokument). Sök lite om vad jag menar med dina Request.form():

Request.Form("namn på formuläret som du postar ifrån")

Så min fråga är:
Använder du verkligen ett formulär med namnet "MyArray(2,i)"?

Medlem sedan nov. 20014 054 inlägg
#6

verkar som att hans kaka innehåller värdet från formuläret, kan hända att de postats från en sida till en annan.

varde = Request.Cookies(""& Session.SessionID &"")
hamta = Split(varde,"&")
ReDim MyArray(4,Ubound(hamta))

For i = 0 To Ubound(myArray,2)
' ... 
Next

Då innehåller MyArray värdena från kakans hans.

Det är väl i stort sett bara att byta ut jmail delen till en insättning i en databas...

Antingen via RecSet eller via Insert i sql. :)

Medlem sedan aug. 2003480 inlägg
#7

Jag har provat detta utan att få in nått av de 3 första.. Resten kommer ju från formuläret som du säger men Artnr, Produkt samt Antal ligger väl i själva kakan.

<%
Response.Buffer = true

namn = Request.Form("namn")
adress = Request.Form("adress")
postnr1 = Request.Form("postnr1")
postnr2 = Request.Form("postnr2")
padress = Request.Form("postadress")
tfn1 = Request.Form("tfn1")
tfn2 = Request.Form("tfn2")
epost = Request.Form("epost")
ovrigt = Request.Form("ovrigt")
info = Array(namn,adress,postnr1,postnr2,padress,tfn1,tfn2,epost,ovrigt)
info2 = ""
For i = 0 to 8
info2 = info2 & info(i)
IF Not i = 8 then 
info2 = info2 & "|"
END IF
Next
For i = 0 to 7
IF NOT len(info(i)) <> 0 then
Session("webshopfel") = "Du glömde att fylla i något fält"
session("falt") = info2
Response.Redirect Request.ServerVariables("HTTP_REFERER")
END IF
Next

IF len(info(2)) > 5 then
Session("webshopfel") = "Felaktigt postnummer"
Session("falt") = info2
Response.Redirect Request.ServerVariables("HTTP_REFERER")
END IF

Set Connect = Server.CreateObject("ADODB.Connection") 
Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" &Server.MapPath("webshop.mdb")
Session.Lcid = 1053

varde = Request.Cookies(""& Session.SessionID &"")
hamta = Split(varde,"&")
ReDim MyArray(4,Ubound(hamta))
for x = 0 to ubound(hamta)
hamta2 = Split(hamta(x),"=")
IF Len(hamta2(0)) > 0 AND len(hamta2(1)) > 0 then
SQL = "SELECT * FROM produkter WHERE id =" & int(hamta2(0))
Set RecSet = Connect.Execute(SQL)
MyArray(0,x) = hamta2(0)
MyArray(1,x) = hamta2(1)
MyArray(2,x) = RecSet("artnr")
MyArray(3,x) = RecSet("namn")
MyArray(4,x) = RecSet("pris")

RecSet.Close
Set RecSet = nothing
END IF

next
%>

<!-- #include file = "adovbs.inc" -->

<%
Set RecSet = Server.CreateObject("ADODB.Recordset")

Addera = "Select * From bestall" 
RecSet.Open Addera, Connect, adOpenStatic, adLockOptimistic

  RecSet.AddNew
  
  RecSet("Artnr") = Request.Form("MyArray(2,i)")
  RecSet("Produkt") = Request.Form("MyArray(3,i)")
  RecSet("Antal") = Request.Form("MyArray(1,i)")
  RecSet("Namn") = Request.Form("namn")
  RecSet("Adress") = Request.Form("adress")
  RecSet("Postnr1") = Request.Form("postnr1")
  RecSet("Postnr2") = Request.Form("postnr2")
  RecSet("Ort") = Request.Form("postadress")
  RecSet("Tele1") = Request.Form("tfn1")
  RecSet("Tele2") = Request.Form("tfn2")
  RecSet("Mail") = Request.Form("epost")
  RecSet("Ovrigt") = Request.Form("ovrigt")
  RecSet("Datum") = Now()
    
  RecSet.Update
	
  RecSet.Close
  Connect.Close
  Set RecSet = nothing
  Set Connect = nothing
    
sida = Request.ServerVariables("HTTP_REFERER") & "&skickad=ja"
Response.Redirect sida
%>
Medlem sedan juni 20019 519 inlägg
#8

Fortfarande: En array är inte en Formulär.
Du har ingen:

<input type="text" name="MyArray(3,i)"> i dina html dokument hoppas jag?
Det du är ute efter är din array MyArray och din variabel i vet jagi nte vad du är ute efter.. ersätt den med en loop?

Jag har försökt rensar upp din kod + fixar till på ett ungefär vad jag tror du är ute efter:

<%
Response.Buffer = true

'Forms data
namn = Request.Form("namn")
adress = Request.Form("adress")
postnr1 = Request.Form("postnr1")
postnr2 = Request.Form("postnr2")
padress = Request.Form("postadress")
tfn1 = Request.Form("tfn1")
tfn2 = Request.Form("tfn2")
epost = Request.Form("epost")
ovrigt = Request.Form("ovrigt")

info = Array(namn,adress,postnr1,postnr2,padress,tfn1,tfn2,epost,ovrigt)
info2 = join(info,"|")

For i = 0 to 7
	If i = 2 And len(info(2)) > 5 Then
		Session("webshopfel") = "Felaktigt postnummer"
		Session("falt") = info2
		Response.Redirect Request.ServerVariables("HTTP_REFERER")
	ElseIf Not len(info(i)) <> 0 then
		Session("webshopfel") = "Du glömde att fylla i något fält"
		session("falt") = info2
		Response.Redirect Request.ServerVariables("HTTP_REFERER")
	End If
Next

Set Connect = Server.CreateObject("ADODB.Connection") 
Connect.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" &Server.MapPath("webshop.mdb")
Session.Lcid = 1053

varde = Request.Cookies(Session.SessionID)
hamta = Split(varde,"&")

ReDim MyArray(4,Ubound(hamta))

for x = 0 to ubound(hamta)
	hamta2 = Split(hamta(x),"=")
	IF Len(hamta2(0)) > 0 AND len(hamta2(1)) > 0 then
		SQL = "SELECT * FROM produkter WHERE id =" & int(hamta2(0))
		Set RecSet = Connect.Execute(SQL)
		MyArray(0,x) = hamta2(0)
		MyArray(1,x) = hamta2(1)
		MyArray(2,x) = RecSet("artnr")
		MyArray(3,x) = RecSet("namn")
		MyArray(4,x) = RecSet("pris")
		RecSet.Close
		Set RecSet = nothing
	END IF
Next
%>

<!-- #include file = "adovbs.inc" -->

<%
Set RecSet = Server.CreateObject("ADODB.Recordset")

Addera = "Select * From bestall" 
RecSet.Open Addera, Connect, adOpenStatic, adLockOptimistic

For i = 0 To UBound(MyArray,2)
  RecSet.AddNew
  
  RecSet("Artnr") = MyArray(2,i)
  RecSet("Produkt") = MyArray(3,i)
  RecSet("Antal") = MyArray(1,i)
  RecSet("Namn") = Request.Form("namn")
  RecSet("Adress") = Request.Form("adress")
  RecSet("Postnr1") = Request.Form("postnr1")
  RecSet("Postnr2") = Request.Form("postnr2")
  RecSet("Ort") = Request.Form("postadress")
  RecSet("Tele1") = Request.Form("tfn1")
  RecSet("Tele2") = Request.Form("tfn2")
  RecSet("Mail") = Request.Form("epost")
  RecSet("Ovrigt") = Request.Form("ovrigt")
  RecSet("Datum") = Now()
    
  RecSet.Update
Next
  RecSet.Close
  Connect.Close
  Set RecSet = nothing
  Set Connect = nothing
    
sida = Request.ServerVariables("HTTP_REFERER") & "&skickad=ja"
Response.Redirect sida
%>
Medlem sedan aug. 2003480 inlägg
#9

Feltyp:
ADODB.Recordset (0x800A0CC1)
Objektet kunde inte hittas i mängden med det begärda namnet eller numret.

Det gäller: RecSet("Artnr") = MyArray(2,i)

Medlem sedan aug. 2003480 inlägg
#10

Fick det att funka nu med lite pill... Det är som du sa voigtann1 :)

Om man nu kör detta fungerar det helt rätt med 1 produkt.

Om man köper 3 olika saker så skriver den bara in den 1:a i databasen. Man kan loopa ur en mdb men går det på nått sätt att skriva in alla 3 produkterna i mdb?

<%
Set RecSet = Server.CreateObject("ADODB.Recordset")

Addera = "Select * From bestall" 
RecSet.Open Addera, Connect, adOpenStatic, adLockOptimistic

  For i = 0 To Ubound(myArray,2)

  RecSet.AddNew
    
  RecSet("Artnr") = MyArray(2,i)
  RecSet("Produkt") = MyArray(3,i)
  RecSet("Antal") = MyArray(1,i)
  RecSet("Namn") = Request.Form("namn")
  RecSet("Adress") = Request.Form("adress")
  RecSet("Postnr1") = Request.Form("postnr1")
  RecSet("Postnr2") = Request.Form("postnr2")
  RecSet("Ort") = Request.Form("postadress")
  RecSet("Tele1") = Request.Form("tfn1")
  RecSet("Tele2") = Request.Form("tfn2")
  RecSet("Mail") = Request.Form("epost")
  RecSet("Ovrigt") = Request.Form("ovrigt")
  RecSet("Datum") = Now()
   
  RecSet.Update
  
  RecSet.Close
  Connect.Close
  Set RecSet = nothing
  Set Connect = nothing
    
next
%>
Medlem sedan juni 20019 519 inlägg
#11

Det du gör är fel. Du har flyttat min Next så nästa gång du vill loopa ut det så har du kastat bort dina objekt.

Addera = "Select * From bestall" 
RecSet.Open Addera, Connect, adOpenStatic, adLockOptimistic

For i = 0 To Ubound(myArray,2)
	RecSet.AddNew

	RecSet("Artnr") = MyArray(2,i)
	RecSet("Produkt") = MyArray(3,i)
	RecSet("Antal") = MyArray(1,i)
	RecSet("Namn") = Request.Form("namn")
	RecSet("Adress") = Request.Form("adress")
	RecSet("Postnr1") = Request.Form("postnr1")
	RecSet("Postnr2") = Request.Form("postnr2")
	RecSet("Ort") = Request.Form("postadress")
	RecSet("Tele1") = Request.Form("tfn1")
	RecSet("Tele2") = Request.Form("tfn2")
	RecSet("Mail") = Request.Form("epost")
	RecSet("Ovrigt") = Request.Form("ovrigt")
	RecSet("Datum") = Now()

	RecSet.Update
Next

RecSet.Close
Connect.Close
Set RecSet = nothing
Set Connect = nothing

Är rätt i mitt tycke... sen vet jag inte vad du har i din MyArray. Det kan innehålla tom data som du inte tillåter i din databas.

Medlem sedan aug. 2003480 inlägg
#12

Jag får in allt från produkt 01 i databasen rätt. Men beställer man 2 olika produkter kommer bara den första in i mdb. Jag vet inte om jag är ute efter nått omöjligt nu men undrar om man kan få in dom så här:

Magnet_01,Magnet_02

I mailet kommer det så här:

Art.nr: 1
Produkt: Magnet_01
Antal: 1
-------------------------------------------
Art.nr: 2
Produkt: Magnet_02
Antal: 1
-------------------------------------------

Medlem sedan juni 20019 519 inlägg
#13

Du skriver om två helt olika saker enligt min mening. Kolla vad du sparar ner i din databas, om den sparar ner fler produkter
Sen efter det så skapar du en funktion för att hämta ut alla produkter i din varukorg och skicka mailet. Det jag har kodat ovan har inget med mail mallen att göra alls.

Medlem sedan aug. 2003480 inlägg
#14

Sorry. Det du kodade ovan fungerar perfekt nu. Detta blev en ny fråga om det går att spara flera produkter eftersom den förra lösta frågan bara sparade den först valda produkten och struntade i de andra. Jag visade oxo hur det ser ut när man får bekräftelse mailet eftersom alla produkterna skrivs ut i det.

Jag kan bara erkänna att jag är helt novis på detta och försöker bara få ett färdigt skript att fungera annorlunda.

Medlem sedan juni 20019 519 inlägg
#15

Postar mer kod om dina e-post utsick
http://www.webforum.nu/showthread.php?p=1413805#post1413805

ser jag en början av en for-sats men ser inte var du loopar ut.

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