Avatar billede futuregrafix Nybegynder
02. marts 2005 - 08:24 Der er 27 kommentarer og
1 løsning

indsætte tabel navne fra access i en <select></select>

Hejsa

Jeg har en database med kundegrupper i, og til dem kan jeg sende nyheds mail fra et asp cms system.

Men hvordan gør man hvis man nu kun vil sende mails til en af kundegrupperne?

Kunne man ikke gøre det med en <select></select> ?

Glæder mig til at høre fra en eller anden...

Tak!
Avatar billede fennec Nybegynder
02. marts 2005 - 08:40 #1
<select name="kundeGr">
<% set rs = conn.execute("select * from kundeGruppe order by name")
  do while not rs.eof
    response.write "<option value='"& rs("id") &"'>"& rs("name")
    rs.MoveNext
  loop %>
</select>

og nå du så skal sende, vælger du kun de kunder som tilhører gruppen som er valgt i selecten:
set rs = conn.execute("select email from kunder where kundeGr="& request.form("kundeGr"))
Avatar billede steffansteffan Nybegynder
02. marts 2005 - 08:41 #2
Jo det ville være smart nok og lave det i en Dropdown.
Kunne f.eks se sådan her ud.

<SELECT NAME="Kunde_Dropdown">
<%
Do while rs.EOF
Response.Write "<OPTION VALUE='" & rs("Sti") & "'>" & rs("Navn") & "</OPTION>"

rs.movenext

loop
%>
Avatar billede futuregrafix Nybegynder
02. marts 2005 - 08:44 #3
Okay, det ser jo ikke så tosset ud..
Men evt lidt mere forklaring, har min db ved navn login.mdb, og tabel navne der hedder Glarmester, KokkenBad, GlarmesterGalleri, Personale - hvordan skulle jeg fikse den?

På forhånd tak!!!
Avatar billede fennec Nybegynder
02. marts 2005 - 09:14 #4
Så er jeg med :o)
Det kan du sagtens. Du skal bare opbygge sql-sætningen:

<select name="kundeTab">
<option value="Glarmester">Glarmester
<option value="KokkenBad">KokkenBad
<option value="GlarmesterGalleri">GlarmesterGalleri
<option value="Personale">Personale
</select>

...
set rs = conn.execute("select email from "& request.form("kundeTab"))
Avatar billede fennec Nybegynder
02. marts 2005 - 09:15 #5
Det kræver selvfølgelig at kolonnen med email hedder det samme i alle 4 tabeller...
Avatar billede futuregrafix Nybegynder
02. marts 2005 - 09:26 #6
Okay, det er jo nemt - men hvordan fusker jeg den lige ind i JMail?
Min kode:

        <%
        if request("mode") = "send" then
               
        Set Conn = Server.CreateObject("ADODB.Connection")
        Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("login.mdb")
        SQL = "SELECT * from mailingliste"
        set send = conn.execute( SQL )
        do while not send.eof
        on error resume next

        Set JMail = Server.CreateObject("JMail.SMTPMail")
        JMail.ServerAddress = ""
        JMail.ContentType = "TEXT/HTML"
        JMail.Sender = ""
        JMail.SenderName = ""
        JMail.subject = "Nyhedsmail"
        JMail.AddRecipient send("email") 'HVORDAN SÆTTER JEG DEN SQL SÆTNING IND HER, SÅ DET FUNGERE???
        JMail.AddRecipientBCC ""
        JMail.Body = "indhold"

Tak!
Avatar billede steffansteffan Nybegynder
02. marts 2005 - 09:32 #7
Den Dropdown du laver:
<select name="kundeTab">
<option value="Glarmester">Glarmester
<option value="KokkenBad">KokkenBad
<option value="GlarmesterGalleri">GlarmesterGalleri
<option value="Personale">Personale
</select>

Det navn du giver den i dette tilfælde kundeTab, skal du ha med over så Jmailen kan trække det ned. Det vil sige valuen som den for med over.

Prøv og rod lidt med det her:

<%
StrKundeTab = Request.form("KundeTab")
        if request("mode") = "send" then
             
        Set Conn = Server.CreateObject("ADODB.Connection")
        Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("login.mdb")
        SQL = "SELECT * from mailingliste"
        set send = conn.execute( SQL )
        do while not send.eof
        on error resume next

        Set JMail = Server.CreateObject("JMail.SMTPMail")
        JMail.ServerAddress = ""
        JMail.ContentType = "TEXT/HTML"
        JMail.Sender = ""
        JMail.SenderName = ""
        JMail.subject = "Nyhedsmail"
        JMail.AddRecipient send("email") 'HVORDAN SÆTTER JEG DEN SQL SÆTNING IND HER, SÅ DET FUNGERE???
        JMail.AddRecipientBCC ""
        JMail.Body = "" & StrKundeTab & ""

Nu har jeg bare sat den i bodyen altså hovdeteksen, men du kan bare flytte den hvor hen det passer dig.
Ved ikke om jeg har forstået dig helt rigtig.?
Avatar billede futuregrafix Nybegynder
02. marts 2005 - 09:39 #8
Det er os rigtig, den skal bare være i bodyen - og så har jeg min JMail og forbindelse før head. Det vil sige at alt afhængi efter hvad man vælger nu, så sender den til pågældende gruppe, fordi den Request'er fra KundeTab ?

Men hvorfor JMail.Body = "" & StrKundeTab & "" - jeg har jo et indhold til mailen med div. variabler osv.??


Hvis det virker heroven over, så er det sq nemt :D

Prøver det lige...
Avatar billede steffansteffan Nybegynder
02. marts 2005 - 09:44 #9
Ja Den smækker valuen med over i i JMailen og StrKundeTab udskriver det i din body, og det bliver sendt til mail adressen.
Men du skal huske det sender jo stadig til alle sammen. Altså den kode jeg ahr givet der, det var bare et eksempel, så må du selv flytte den.
Man lærer mest ved og prøve og ikke bare få det 100% prævise svar ;)
Avatar billede futuregrafix Nybegynder
02. marts 2005 - 10:32 #10
Jamen det os rigtig, forstår bare ikke helt hvorfor du laver en strKundeTab og udskriver den i mail indholdet? Kan ikke helt få det til at fungere :)
Avatar billede futuregrafix Nybegynder
02. marts 2005 - 10:40 #11
Sådan her må det være - jeg har selvf. navngivet min option med KundeGruppe

<%
        StrKundeGruppe = Request.form("KundeGruppe")
        if request("mode") = "send" then
               
        Set Conn = Server.CreateObject("ADODB.Connection")
        Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("mailing.mdb")
        SQL = "SELECT * from StrKundeGruppe"
        set send = conn.execute( SQL )
        do while not send.eof
        on error resume next

        Set JMail = Server.CreateObject("JMail.SMTPMail")

Men det duer ikke rigtig? Er det ikke fordi der skal & tegn udenom strKundeTab i SQL sætningen?

Tak
Avatar billede fennec Nybegynder
02. marts 2005 - 10:50 #12
Her er mit forslag:

<select name="KundeGruppe">
<option value="Glarmester">Glarmester
<option value="KokkenBad">KokkenBad
<option value="GlarmesterGalleri">GlarmesterGalleri
<option value="Personale">Personale
</select>

...
if request("mode") = "send" then
  Set Conn = Server.CreateObject("ADODB.Connection")
  Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("login.mdb")
  SQL = "SELECT email from "& request.form("KundeGruppe")
  set send = conn.execute( SQL )
  Set JMail = Server.CreateObject("JMail.SMTPMail")
  JMail.ServerAddress = ""
  JMail.ContentType = "TEXT/HTML"
  JMail.Sender = ""
  JMail.SenderName = ""
  JMail.subject = "Nyhedsmail"
  do while not send.eof
    JMail.AddRecipientBCC send("email")
    send.MoveNext
  loop
  JMail.Body = "indhold"
  Jmail.Send("xxx")
end if

Husk at bruge AddRecipientBCC, da det er ulovlig at vise andres email på en mailliste, og det gør man nå man bruger AddRecipient metoden. Har desuden ændret koden så alle bliver bliver tilføjet som modtager til den samme mail.
Avatar billede futuregrafix Nybegynder
02. marts 2005 - 11:13 #13
okay, cool!!!! Det virker os næsten nu ;)

Får kun en enkelt fejl:

Exception occurred.

/futurecms/nyhedsmail.asp, line 18


Koden som den ser ud nu:
<%
if request("mode") = "send" then
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("login.mdb")
SQL = "SELECT * from "& request.form("KundeGruppe")
set send = conn.execute( SQL )
Set JMail = Server.CreateObject("JMail.SMTPMail")
JMail.ServerAddress = ""
JMail.ContentType = "TEXT/HTML"
JMail.Sender = ""
JMail.SenderName = ""
JMail.subject = "Nyhedsmail"
do while not send.eof
JMail.AddRecipientBCC send("email")
send.MoveNext
loop
JMail.Body = "HTML INDHOLD"& VbCrLf
       
JMail.Priority = request("priority")
       
JMail.Execute
set JMail = nothing

conn.close
else
%>

Og det eneste jeg hiver ud i linie 18, hvor fejlen er er mit indhold, 2 x request og 2 x variabler (navn og email)

Kan du hjælpe mig en sidste gang? :D

Mange tak for hjælpen!!!!
Avatar billede fennec Nybegynder
02. marts 2005 - 11:29 #14
Er det denn elinje du snakker om??
JMail.Body = "HTML INDHOLD"& VbCrLf
Avatar billede futuregrafix Nybegynder
02. marts 2005 - 11:31 #15
jeps
Avatar billede fennec Nybegynder
02. marts 2005 - 11:41 #16
Som den er der burde der ikke være problemer. Du skriver du henter nogle requests og variabler ind, så det er ikke den rigtige du viser?? Kan du ikke smide den ind??

Jeg vil dog nok tro det har noget med den ændring i loopet jeg lavede.
Avatar billede futuregrafix Nybegynder
02. marts 2005 - 11:52 #17
okay, henter følgende ind i body i mailen, ud over en bunke html:

" & send("navn") & "
" & send("email") & "
" & Replace(Request("tekst"),vbCrLf,"<br>") & "
" & request("link") & "

De har virket fint før, men syntes bare det ville være rart at man kunne sende til forskellige kunde grupper, med tilbud evt.

Tror du det er den loop func?
Avatar billede fennec Nybegynder
02. marts 2005 - 11:59 #18
Det er loopet...
Den nemme løsning:

do while not send.eof
  Set JMail = Server.CreateObject("JMail.SMTPMail")
  JMail.ServerAddress = ""
  JMail.ContentType = "TEXT/HTML"
  JMail.Sender = ""
  JMail.SenderName = ""
  JMail.subject = "Nyhedsmail"
  JMail.AddRecipientBCC send("email")
  JMail.Body = "HTML INDHOLD"& VbCrLf
  JMail.Priority = request("priority")
  JMail.Execute
  set JMail = nothing
  send.MoveNext
loop

Men i dette tilfælde er det mest rigtige at benytte mailMerge funktionen i Jmail. Hvis du bruger overstående kode, kan du få problemer, hvis der er mange på listen der skal have mail (over 1000), da det vil tage langtid at køre scriptet. Det er her mailMerge kommer til sin ret :o)
Avatar billede futuregrafix Nybegynder
02. marts 2005 - 12:15 #19
okay, den kender jeg ikk. Vi llige læse lidt på det...

Tak
Avatar billede futuregrafix Nybegynder
02. marts 2005 - 12:19 #20
kæft mand det volder problemer, nu får jeg

Microsoft OLE DB Provider for ODBC Drivers error '80040e14'

[Microsoft][ODBC Microsoft Access Driver] Syntax error in FROM clause.

nyhedsmail.asp, line 7

I linie 7 står der: set send = conn.execute( SQL )

Det fatter jeg ikke en meter af
Avatar billede fennec Nybegynder
02. marts 2005 - 12:36 #21
Det er SQL-sætningen som er bygget forkert op. Prøv at skrive den ud på skærmen lige inden du bruger den.
Avatar billede futuregrafix Nybegynder
02. marts 2005 - 12:38 #22
Der er da ikke noget galt i koden nu?
Så skal det da være det i FROM der ikke fungere, hvor den skal request mit input?

<%
if request("mode") = "send" then
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & server.MapPath("mailing.mdb")
SQL = "SELECT * FROM "& request.form("KundeGruppe")
set send = conn.execute( SQL )

do while not send.eof
Set JMail = Server.CreateObject("JMail.SMTPMail")
JMail.ServerAddress = "SERVER"
JMail.ContentType = "TEXT/HTML"
JMail.Sender = "SENDER ADR"
JMail.SenderName = "SENDER NAVN"
JMail.subject = "Nyhedsmail"
JMail.AddRecipientBCC send("email")
JMail.Body = ""VbCrLf
JMail.Priority = request("priority")
JMail.Execute
set JMail = nothing
send.MoveNext
loop

conn.close
else
%>
Avatar billede futuregrafix Nybegynder
02. marts 2005 - 12:43 #23
Nu virker det!!!! Mig der fucker i det... Sorry!

Mange tak for hjælpen, den får jeg meget brug for ;)
Avatar billede futuregrafix Nybegynder
02. marts 2005 - 12:50 #24
Skal jeg være bekymret med det med antal mails, og evt bruge MailMerge ?
Avatar billede fennec Nybegynder
02. marts 2005 - 12:59 #25
Det kommer an på hvor mange mails du sender ud på en gang. Hvis det er under 100 burde der ikke være problemer. 100-1000 kan der opstå problemer, men det afhænger af serveren. Over 1000 vil jeg kraftigt anbefale at bruge mailMerge i stedet.

Ellers kan du droppe at smide navn/email i body teksten, og lave det som det var før, hvor loopet kun kører omkring JMail.AddRecipientBCC send("email"). Så sender du nemlig kun en mail, men den har en masse modtagere.
Avatar billede futuregrafix Nybegynder
02. marts 2005 - 13:01 #26
Lækker
Avatar billede futuregrafix Nybegynder
02. marts 2005 - 13:02 #27
ups - lækker beskrivelse, det var nemt at forstå! Jeg skal desværre sende noget over 1000 mails. Men så må jeg jo prøve mig lidt frem med MailMerge. Det har kun betydning for koden ikk - ikke for mail indholdet vel?
Avatar billede fennec Nybegynder
02. marts 2005 - 14:16 #28
MailMerge er ikke så svær at bruge.

'Lav email på normal vis (næsten)
JMail.ServerAddress = "SERVER"
JMail.ContentType = "TEXT/HTML"
JMail.Sender = "SENDER ADR"
JMail.SenderName = "SENDER NAVN"
JMail.subject = "Nyhedsmail"
JMail.AddRecipientBCC "%%Email%%", "%%Name%%"
JMail.Body = "En mail send til %%Name%%"

'Hent info fra database
SQL = "SELECT * FROM "& request.form("KundeGruppe")
set rs = conn.execute( SQL )

'Load emailen over i MailMerge
set mMerge = Server.CreateObject( "JMail.MailMerge" )
mMerge.MailTemplate = JMail

'Sammensæt mail med databasen, og smid det til pickup
mMerge.BulkMerge rs, true, "c:\inetpub\mailroot\pickup"

Alle de steder hvor %%KODE%% svarer til en kolonne i databasen, bliver værdien indsat. Du kan f.eks indsætte addresse, zip og by med %%add%%,%%zip%% og %%city%% så længe de 3 kolonner eksistere/er valgt i selecten.

Den laver altså en unik mail til hver person. Som en ekstra feature sender dette eks ikke mailen til mailserveren, men til mailserverens pickup mappe. Det er en speciel mappe som mailserveren selv kikker i en gang imellem, når den har tid. Man kan også sende det direkte til mailserveren med:
MailMerge.BulkMerge( rs, false, "mail.server.com" )

Men det bedste er at smide det i pickup mappen (stien er måske en anden hos jer), da det ikke belaster serveren så meget.
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