Avatar billede fastwrite Nybegynder
11. januar 2004 - 23:37 Der er 43 kommentarer og
3 løsninger

Jmail loop - hente oplysninger fra database

Jeg har et problem med min jmail asp. Når jeg er inde på www.mrsskipper.dk og bestiller et par produkter, så virker det fint, men når jeg har trykket på send bestilling, så er det kun det første produkt på førse side der kommer med på mailen (altså - den henter det første felt i min database, selvom jeg ikke har bestilt den)

Jeg ved at jeg skal bruge en loop af en art, men hvordan jeg skal sætte den ind, har jeg haft mas med.. Den ser sådan ud:

<%
' Vi åbner forbindelse til databasen
Set con = Server.CreateObject("ADODB.Connection")

con.Open "Provider=Microsoft.Jet.OLEDB.4.0;" &_
"Data Source=D:\mrsskipper.dk\database\produkter.mdb;" &_
"Persist Security Info=False;"
%>
<% set rst = con.execute("Select * from tblkunde")%>
<% set rst1 = con.execute("Select * from tblordreindhold")%>

<% set rst4 = con.execute("Select * from qrysmykker where billedepath=" & rst1("id"))%>
<% set rst5 = con.execute("select * from tblordreindhold where ordrenr=" & rst("nr")%>
<%
Dim mail, body, mailtekst
Set mail = Server.CreateObject("JMail.SMTPMail")
MailTekst = "Tak for din ordre! Den vil blive sendt hurtigst muligt!" & vbcrlf & vbcrlf
MailTekst = MailTekst & "Ordren vil blive sendt til:" & vbcrlf
MailTekst = MailTekst & Request.Form("Navn") & vbcrlf
MailTekst = MailTekst & Request.Form("Adresse") & vbcrlf
MailTekst = MailTekst & Request.Form("Postnr") & " " & Request.Form("By") & vbcrlf
MailTekst = MailTekst & "Tlf: " & Request.Form("Tlf") & vbcrlf
MailTekst = MailTekst & "E-mail: " & Request.Form("Email") & vbcrlf
MailTekst = MailTekst & "Bemærkninger: " & Request.Form("Bemaerkninger") & vbcrlf & vbCRLF
MailTekst = MailTekst & "Betaling: " & Request.Form("Betaling") & VBcrlf
MailTekst = MailTekst & "----------------------------------------" & vbCRLF

MailTekst = Mailtekst & "Ordrenr.:" & rst("nr") & vbcrlf
MailTekst = MailTekst & "----------------------------------------" & vbCRLF

do while not rst5.eof

MailTekst = Mailtekst & "Billedenr. " & rst4("billedepath") & vbcrlf
MailTekst = MailTekst & "Produkt-kategori: " & rst4("kategori") & vbcrlf
MailTekst = MailTekst & "Antal. : " & rst5("antal") & vbcrlf
MailTekst = MailTekst & "Pris. : " & rst4("pris") & vbcrlf
MailTekst = MailTekst & "----------------------------------" & vbcrlf
rst5.movenext
loop
%>
<%
With mail

    .Subject = "Mail fra www.mrsskipper."
    .Body = mailtekst
    .Sender = " " & request.form("email")
    .SenderName = "Bestilling fra Mrs. Skipper" & request.form("navn")
    .AddRecipientbcc "info@mrsskipper.dk"
    .AddRecipient " " & request.form("email")   
    .ServerAddress = "mail.jirty.dk"
    .Execute

End With %>
        <% Set Mail = Nothing %>

Skal jeg ikke have noget session med på en eller anden måde?
Avatar billede deeflate Nybegynder
11. januar 2004 - 23:49 #1
Hvad har du i de forskellige tabeller og hvad er forbindelsenerne tabellerne imellem?

Og hvor modtager du informationen om ordren?

Umiddelbart ser det for mig ud som om du altid henter ordreindhold (i rst5) hvor ordrenummeret = nr i den første post i tblkunde...
Avatar billede stingbat Nybegynder
11. januar 2004 - 23:53 #2
Det har intet med session at gøre - men dine databasekald...

rst: Du specificere ikke hvilken kunde du har med at gøre? (WHERE...)

rst1: Denne kan du vidst skippe / udskifte helt med rst5, så du sætter hvilken ordre, som ligeledes bruges af rst4

rst4: Går udfra at du skal have vist pr. produkt - så du skal enten lave et kald ang. hver listning af købte produkt (under "do while not rst5.eof") - eller den lidt bedre metode, JOIN'e de 2 tabeller, så du kun har ét kald men henter ordrelinier plus produktinfo ud :-)

rst5: se rst1
Avatar billede deeflate Nybegynder
11. januar 2004 - 23:57 #3
Synes også at det virker lidt bagvendt at du først henter kunden (når du altså får en where på ;) ) og med det info henter en ordre...

Du burde måske hellere køre det hele udfra et unikt ordrenummer og så i ordretabellen have et felt med kundenr...
Avatar billede deeflate Nybegynder
12. januar 2004 - 00:02 #4
Og hvordan ligger de forskellige produkter bestilt i hver ordre lagret inde i db'en?
Hvis de er i kommaseparerede lister el.lign. skal de lige skilles ad før du kan hente produktinfo, og det (hentning af info) skal forøvrigt også ske efter du har hentet ordren, ellers får du jo ikke hentet det rigtige info...
Avatar billede fastwrite Nybegynder
12. januar 2004 - 00:04 #5
jeg er nok lidt bagvendt ;) Måske derfor det ikke virker ordentligt.
Mine tabeller bliver hentet fra produkter.mdb databasen, og i denne database er der følgende tabeller:

tblKunde
tblOrdreindhold
tblProdukter

i tblkunde har jeg et NR som er unikt
i tblordreindhold er der et felt der hedder ordrenr der har samme nummer som tblkunde.unikt nummer - så man kan have flere ordre på samme NR.
i tblOrdreindhold har jeg et feltnavn der hedder ID. Dette ID nummer er det samme ID nummer som tblProdukter har.

Got it?! :o)

Jeg lægger lige min senmailbestilling.asp ud på ftp.tsmedia.dk" target="_blank">ftp://eksperten:eksperten@ftp.tsmedia.dk under skuffen spm450409
Avatar billede stingbat Nybegynder
12. januar 2004 - 00:05 #6
fastwrite:
Prøv at skrive database-struktur - så bliver det lidt nemmere at give en løsning - da det ikke er til at se ud af din kode...
Avatar billede fastwrite Nybegynder
12. januar 2004 - 00:07 #7
stingbat - just gjort :)
Avatar billede stingbat Nybegynder
12. januar 2004 - 00:10 #8
"Dette ID nummer er det samme ID nummer som tblProdukter har." <-- det er vel ikke et autonummer vel? Bare lige for at være sikker.

Men hvis du ønsker at udtrække, i forhold til hvad jeg går udfra at din tabelstruktur er, så prøv følgende:

Set rs = con.Execute("SELECT tblProdukter.billedepath, tblProdukter.kategori, tblOrdreindhold.antal, tblProdukter.pris FROM tblOrdreindhold LEFT JOIN tblProdukter ON tblProdukter.ID = tblOrdreindhold.ID WHERE tblOrdreindhold.ordrenr = " & rst("nr"))
Avatar billede fastwrite Nybegynder
12. januar 2004 - 00:12 #9
tblordreindhold har ikke unikt nummer.
Avatar billede fastwrite Nybegynder
12. januar 2004 - 00:13 #10
stingbat - jeg prøver lige dit eks.
Avatar billede stingbat Nybegynder
12. januar 2004 - 00:13 #11
fastwrite:
Er nu ikke den præcise struktur - men håber at ^^ ovenstående kan give dig en idé, til at komme videre. Dog skriver du (iflg. scriptet) at du har en tabel, kaldet "qrysmykker" - hedder denne ikke "tblProdukter"?

Anyway, ovenstående gør også at du kan slette linierne hvor der står rs1, rs4, rs5
Avatar billede fastwrite Nybegynder
12. januar 2004 - 00:13 #12
qrysmykker - forresten (ups) - det er min forespørgsel, hvor jeg har bruger tabellen tblPRodukter (jeg elsker forespørgsler)
Avatar billede fastwrite Nybegynder
12. januar 2004 - 00:21 #13
hmm.. den går i fejl.. Den skriver dette:

Microsoft VBScript runtime error '800a000d'

Type mismatch: 'rs'

/html/sendmailbestilling.asp, line 34

-----
line 34 er din linie du gav mig.
Avatar billede fastwrite Nybegynder
12. januar 2004 - 00:25 #14
jeg har rettet alle rst til rs. korrekt?
Avatar billede fastwrite Nybegynder
12. januar 2004 - 00:29 #15
Jeg har eksperimenteret lidt, så lige nu står der :

<% set rst = con.execute("Select * from tblkunde")
Set rs = con.Execute("SELECT tblProdukter.billedepath, tblProdukter.kategori, tblOrdreindhold.antal, tblProdukter.pris FROM tblOrdreindhold LEFT JOIN tblProdukter ON tblProdukter.ID = tblOrdreindhold.ID WHERE tblOrdreindhold.ordrenr = " & rst("nr"))

men den viser så denne fejl:

Microsoft JET Database Engine error '80040e10'

No value given for one or more required parameters.

/html/sendmailbestilling.asp, line 34
Avatar billede fastwrite Nybegynder
12. januar 2004 - 16:10 #16
plz. help!! Jeg er villig til også at betale for det.
Avatar billede deeflate Nybegynder
12. januar 2004 - 16:17 #17
Tror ikke du skal regne med den store aktivitet idag.
Det er jo opdateringsdag, så der er nok mange, der venter til imorgen...

Du skal stadig have sat en WHERE på din set rst = con.execute("Select * from tblkunde") for ellers tager den bare første post nede ved ...WHERE tblOrdreindhold.ordrenr = " & rst("nr"))
Avatar billede fastwrite Nybegynder
12. januar 2004 - 17:43 #18
ok - deeflate.. jeg prøver
Avatar billede stingbat Nybegynder
12. januar 2004 - 20:19 #19
Prøv at lige checke SQL-kaldet igennem. Det jeg skrev i går, var efter hvad du fortalte - men kan være at en af felterne er forkerte i forhold til din database.

Ellers hvis du har mulighed for at fremsende en kopi af databasen, vil det være nemmere at lave det præcise kald.

Prøv evt. lige at checke først at rst("nr") har en værdi - eller rettere, at kunden forefindes. Ligeledes som "deeflate" skrev, at huske en WHERE på rst, sådan at du får den korrekte kunde, og dennes oplysninger.
Avatar billede fastwrite Nybegynder
12. januar 2004 - 23:41 #20
stingbat - kan jeg få din mail, så skal jeg sende databasen til dig.
Avatar billede stingbat Nybegynder
13. januar 2004 - 00:08 #21
Bare send den til: eksperten@stingbat.dk
Avatar billede stingbat Nybegynder
13. januar 2004 - 01:05 #22
Var kategori-delen som var problemet ;-)

Det endelige kald bliver så:
Set rs = con.Execute("SELECT tblProdukter.billedepath, tblKategori.Kategori, tblOrdreindhold.antal, tblProdukter.Pris FROM tblOrdreindhold INNER JOIN (tblProdukter INNER JOIN tblKategori ON tblProdukter.kategorid = tblKategori.kategorid) ON tblOrdreindhold.id = tblProdukter.id
WHERE tblOrdreindhold.ordrenr = " & rst("nr"))

Dog skal du stadig huske at vælge den korrekte kunde i linien:
set rst = con.execute("Select * from tblkunde")

Eller rettere, i forhold til ordren, at vælge kunden (alt efter i hvilken forbindelse du skal udtrække dataerne i)!
Avatar billede fastwrite Nybegynder
13. januar 2004 - 10:24 #23
prøver (uf, det er spændende det her)
Avatar billede fastwrite Nybegynder
13. januar 2004 - 10:44 #24
Så langt så godt - nu sender den rigtig nok en mail. Det er jo superdejligt. Men når jeg har bestilt fx. billede nr. 2, så bliver det stadigvæk billede nr. 1's pris den viser i mailen.

Jeg bestilte også to produkter, men kun den ene vises, så jeg satte en do while not rs.eof, men så skriver den at either EOF og BOF is true or the current record has been deleted (noget i den stil.) Min kode ser sådan ud:

Set mail = Server.CreateObject("JMail.SMTPMail")
MailTekst = "Tak for din ordre! Den vil blive sendt hurtigst muligt!" & vbcrlf & vbcrlf
MailTekst = MailTekst & "Ordren vil blive sendt til:" & vbcrlf
MailTekst = MailTekst & Request.Form("Navn") & vbcrlf
MailTekst = MailTekst & Request.Form("Adresse") & vbcrlf
MailTekst = MailTekst & Request.Form("Postnr") & " " & Request.Form("By") & vbcrlf
MailTekst = MailTekst & "Tlf: " & Request.Form("Tlf") & vbcrlf
MailTekst = MailTekst & "E-mail: " & Request.Form("Email") & vbcrlf
MailTekst = MailTekst & "Bemærkninger: " & Request.Form("Bemaerkninger") & vbcrlf & vbCRLF
MailTekst = MailTekst & "Betaling: " & Request.Form("Betaling") & VBcrlf
MailTekst = MailTekst & "----------------------------------------" & vbCRLF
do while not rs.eof
rst.movenext
MailTekst = Mailtekst & "Billedenr. " & rs("billedepath") & vbcrlf
MailTekst = MailTekst & "Produkt-kategori: " & rs("kategori") & vbcrlf
MailTekst = MailTekst & "Antal. : " & rs("antal") & vbcrlf
MailTekst = MailTekst & "Pris. : " & rs("pris") & vbcrlf
MailTekst = MailTekst & "----------------------------------" & vbcrlf
loop
%>

Kortfattet: Bestillingen er ikke rigtig, og den viser ikke alle produkterne, men kun det første (som er første produkt under halskæderne, billede nr. 1, som om den tager det første fra databasen)
Avatar billede fastwrite Nybegynder
13. januar 2004 - 11:03 #25
Jeg ved ikke om jeg har skrevet det rigtigt, men det virker som om, at uanset hvad jeg bestiller, så er det hele tiden billede nr. 1 (som kan ses her: http://www.mrsskipper.dk/html/produkt-smykker.asp?kategorid=1) til 290 kroner der bliver sendt med i mailen.

Skulle jeg ikke lave en select * from tblkunde WHERE ????

(takker for jeres tålmodighed!)
Avatar billede stingbat Nybegynder
13. januar 2004 - 13:52 #26
- snip -
do while not rs.eof
rst.movenext
- snap -

^ -- der er fejlen... ændre den til:
rs.movenext
Avatar billede deeflate Nybegynder
13. januar 2004 - 15:03 #27
Hmm... mine indlæg bliver ikke vist...

Nå, med fare for at der nu kommer til at stå det samme en masse gange, prøver jeg lige igen:

Du bør nok også flytte rs.MoveNext, da du ellers springer den første record over.

do while not rs.eof
  MailTekst = Mailtekst & "Billedenr. " & rs("billedepath") & vbcrlf
  MailTekst = MailTekst & "Produkt-kategori: " & rs("kategori") & vbcrlf
  MailTekst = MailTekst & "Antal. : " & rs("antal") & vbcrlf
  MailTekst = MailTekst & "Pris. : " & rs("pris") & vbcrlf
  MailTekst = MailTekst & "----------------------------------" & vbcrlf

  rs.movenext
loop
Avatar billede deeflate Nybegynder
13. januar 2004 - 15:06 #28
hey :) DEN kom med.
Avatar billede stingbat Nybegynder
13. januar 2004 - 15:21 #29
Nå ja... skal nederst of course... Sidder og sover i timen *G*

Ang. indlæg - ja, exp-serveren fårkede vidst tidl - og gik vidst helt ned... Havde også skrevet et længere indlæg, som bare forsvandt...
Avatar billede fastwrite Nybegynder
14. januar 2004 - 01:24 #30
stingbat - det var da superærgerligt at du havde skrevet et længere indlæg som bare forsvandt. Øv ting! - og Deeflate - jeg prøver lige dit forslag.. tænk at jeg fik byttet rundt på rs og rst.. ups'er..
Avatar billede fastwrite Nybegynder
14. januar 2004 - 01:25 #31
Jeg skal lige høre - tager I penge for at lave forskellige ASP løsninger? For jeg har flere ting jeg går og sysler med, men som jeg ikke har tiden til. Fx. en database der kigger i en skuffe med billeder, som jeg skal have mulighed for at lægge keywords til. Det er noget jeg gerne vil betale for, for jeg ved at det er noget der tager tid at lave.
Avatar billede fastwrite Nybegynder
14. januar 2004 - 01:31 #32
deeflate - så langt så godt. Nu sender den rigtig nok en mail, men stadigvæk med billede nr. 1, selvom det er andre produkter jeg bestiller. Det er som om den ikke registrerer hvad det er jeg bestiller.

Hvad gør jeg forkert?! (suk - og jeg troede at jeg havde lidt forstand på ASP bliver bombet tilbage igen..)
Avatar billede stingbat Nybegynder
14. januar 2004 - 02:17 #33
fastwrite:
Hvordan er din nuværende kode?

Ang. scriptet - det du ønsker at udtrække "nu", er vel en ordrebekræftelse?
Hvis, skal du tage ordreid'et fra klienten eller en session - og udfra det, trække kunden. Den anden vej rundt gør, at du får en forkert ordre - og dermed ikke de ønskede produkter.
Men ved selvfølgelig ikke hvordan det nuværende script ser ud - evt. post det her, eller mail til eksperten@stingbat.dk - kan være at det er lidt nemmere at finde fejlen så.

Mht. tid og penge, så er det da en mulighed - dog begrænset her de næste par dage, pga. et par projekter.
Avatar billede fastwrite Nybegynder
14. januar 2004 - 02:36 #34
stingbat - med hensyn til det sidste var det mere på sigt jeg tænkte at jeg får brug for erfaren ASP assistance, men godt at du ikke er afvisende over for muligheden.

Hvad jeg ønsker at udtrække 'nu' er nemlig en ordrebekræftelse, og intet andet, og så bliver der naturligvis sendt en mail til min hustru, hvor der står hvad kunden gerne kunne tænke sig. Hun er sjovt nok begyndt at få temmelig mange mails her de seneste dage ;o) Men må desværre skuffe hende, da de fleste er fra mig. hæ..

Det vil nok være en ide med Session - men - hvis du virkelig orker, kan jeg lige sende min kode til dig.
Avatar billede fastwrite Nybegynder
16. januar 2004 - 17:52 #35
deeflate - drop et svar, så giver jeg dig nogle point, og stingbat - tusind tak for din store hjælp. Det lykkedes endelig.
Avatar billede deeflate Nybegynder
16. januar 2004 - 17:57 #36
Takker :)
Avatar billede fastwrite Nybegynder
16. januar 2004 - 22:41 #37
Håber I er tilfredse med pointfordelingen. Stingbat har brugt MEGET lang tid på at hjælpe mig, og det er virkelig værdsat, både af mig, men også af min hustru, som har hjemmesiden.

Også en stor tak til dig deeflate - du har også kæmpet for at hjælpe mig! Det er virkelig super!! Jeg skal huske jer begge fremover!
Avatar billede fastwrite Nybegynder
16. januar 2004 - 22:44 #38
WAS!? hvad sker der.. den vil ikke acceptere min pointfordeling... mærkeligt.. der sker intet...
Avatar billede stingbat Nybegynder
16. januar 2004 - 22:46 #39
LOL ... måske derfor at der er så mange åbne svar for tiden ? *G*
Avatar billede fastwrite Nybegynder
17. januar 2004 - 01:09 #40
hmm. den vil selv fordele pointene.. jeg håber det er i orden.
Avatar billede stingbat Nybegynder
17. januar 2004 - 01:18 #41
Accepteret svar: stingbat
11/01-2004 23:53:00
Point: 75,00

Svar: stingbat
12/01-2004 00:10:58

Accepteret svar: stingbat
13/01-2004 01:05:38
Point: 75,00

Accepteret svar: deeflate
16/01-2004 17:57:58
Point: 75,00

<-- Tror at der har været en bug i Eksperten her tidl. - for der har været 4 svar, men kun 3 står der points udfor?! :-s
Hmm... skummelt...
Avatar billede deeflate Nybegynder
17. januar 2004 - 12:39 #42
Ja, det er vist rimelig fucked for tiden.

Stingbat >> hvis du vil have nogle point af mig, så bare sig til. Det skulle sagtens kunne ordnes.
Avatar billede stingbat Nybegynder
17. januar 2004 - 13:48 #43
deeflate:
Behøves du skam ikke :-) Men ellers tak for tilbudet...
Avatar billede stingbat Nybegynder
17. januar 2004 - 13:49 #44
^ er jo mere for hyggens skyld at jeg hjælper :)
Avatar billede deeflate Nybegynder
17. januar 2004 - 13:59 #45
Ok :)
Avatar billede fastwrite Nybegynder
19. januar 2004 - 18:47 #46
hæ - godt at I indbyrdes bliver enige :o) Jeg takker for hjælpen fra jer begge!
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester