Avatar billede kjeldb Nybegynder
04. maj 2007 - 14:18 Der er 14 kommentarer og
1 løsning

Script til formularhåndtering?

Hej,
Nogen der kender et script som kan gøre følgende:

Bruger indtaster data som navn, telefonnr osv. i en formular på en html eller asp side. I formularen er der en select box, hvor der skal vælges en by. Alt efter hvilken by bruger vælger, skal den mail der genereres sendes til en bestemt e-mail adresse. Hver by har sin egen mail adresse.
Jeg kunne selvfølgelig sætte brugeren til at vælge en by først, og så lander han/hun på en formular for den valgte by, men så skal jeg oprette formularer for alle byer.
Det vigtige her er, at de data der allerede er tastet, når der vælges by, skal blive stående i formularen.
Jeg har aspmail og JMail til rådighed på serveren.
Når formularen sendes, lander bruger på en ny side med bekræftelse, eller med fejlmeddelelser, f.eks. hvis der er felter der ikke er blevet udfyldt.
Mvh
Kjeld
Avatar billede softspot Forsker
04. maj 2007 - 14:30 #1
Hvis formularen ikke ændrer sig ved at man vælger by, men bare signalerer hvilke email-adresse formularen skal sendes til, så er der vel ikke nogen grund til at gøre noget på klienten. Det lyder mest som om du har brug for et opslag på serveren, når brugeren vælger at sende hele formularen...

Hvis det sidste er tilfældet, så skal du have dine email-adresser registreret i databasen og koblet dem sammen med byen. Når en bruger så sender en formular, slår du blot op, for at finde emailen der skal sendes til inden du rent faktisk sender formularen.

Har du nogen database? Har du noget kode der kan tages udgangspunkt i, eller er det en "kod det fra bunden"-opgave?
Avatar billede kjeldb Nybegynder
04. maj 2007 - 14:52 #2
Hej softspot,
Jeg vil helst undgå en database her, men til orientering, så bruger jeg lige nu følgende script til at håndtere formularen:
http://www.brainjar.com/common/viewsource.asp?source=/asp/formmail/formmail.asp
Der vil i første omgang være tale om 4 byer, så måske kunne det integreres her med en if then funktion?
Mvh
Kjeld
Avatar billede kjeldb Nybegynder
04. maj 2007 - 14:55 #3
Og uanset hvilken by der sendes til, så skal der CC adresse på. Der vil være 2 CC adresser, og de er ens uanset by.
Avatar billede softspot Forsker
04. maj 2007 - 15:06 #4
Hvordan ser selve formularen ud? Har du defineret et felt der hedder "_recipients"? Hvis ja, så kunne du evt. lade din select-boks hedde "_recipients" og så bare lægge den relevante emailadresse ind i value på den enkelte option, så vil adressen automatisk blive benyttet ved afsendelse.
Avatar billede kjeldb Nybegynder
04. maj 2007 - 15:48 #5
Det var sgu da en genial ide. Det må jeg lige afprøve, men jeg ville jo godt have byens navn med over på bekræftelses side, samt i den mail der kommer hos CC modtagerne. Her vil de vel blot se en mail adresse?
Avatar billede kjeldb Nybegynder
04. maj 2007 - 16:18 #6
Det virker, men jeg er nødt til at have den valgte by's navn med. Ikke engang mailadresse for den pågældende by bliver vist, da felter med _xxx ikke vises.
Derfor er der intet der indikerer hos CC modtager, hvem der skal tage sig af denne mail, og på bekræftelses siden, ser bruger heller ikke hvilken by han/hun har valgt.
Avatar billede softspot Forsker
04. maj 2007 - 16:21 #7
Ja, det er korrekt... hmm... så kan man lave et skjult felt som hedder bynavn og lægge teksten fra den select-boks du vælger over i det felt...

Meeen, det er lidt bagvendt. Desuden er det jo ikke anbefalelsesværdigt at have emailadresser liggende i klartekst på sine hjemmesider, så det bør nok være noget der sker på serveren. Derfor kan du evt. bruge flg. kodestump til at finde adressen (jeg ville umiddelbart vælge at benytte tal til at identificere de enkelte byer, derfor er det tal i nedenstående kode, men det kan du evt. selv rette):

select case Request.Form("Bynavn")
  case "1": email = "email1@domain.dk"
  case "2": email = "email2@domain.dk"
  case "3": email = "email3@domain.dk"
  case "4": email = "email4@domain.dk"
  case else: fejltekst = "Der er ikke valg en by. Du skal vælge by inden formularen kan sendes."
end select


Mht. det med CC-adresser, så kan du ændre JMail-koden til at se således ud:

    if mailComp = "JMail" then
      set mailObj = Server.CreateObject("JMail.SMTPMail")
      mailObj.Silent = true
      mailObj.ServerAddress = smtpServer
      mailObj.Sender = fromAddr
      mailObj.ReplyTo = replyTo
      mailObj.Subject = subject
      addrList = Split(recipients, ",")
      for each addr in addrList
        mailObj.AddRecipient Trim(addr)
      next
      addrList = Split(recipientsCC, ",")
      for each addr in addrList
        mailObj.AddRecipientCC Trim(addr)
      next
      mailObj.ContentType = "text/html"
      mailObj.Body = body
      if not mailObj.Execute then
        SendMail = "Email send failed: " & mailObj.ErrorMessage & "."
      end if
      exit function
    end if


For at det skal fungere, skal du definere en variabel i toppen som hedder recipientsCC og indeholder en kommasepareret liste af emailadresser som skal modtage emailen CC. F.eks.

recipientsCC = "email5@domain.dk,email6@domain.dk"
Avatar billede softspot Forsker
04. maj 2007 - 16:25 #8
Mit sidste indlæg var til dit indlæg 04/05-2007 15:48:22 :)

Jeg tror det sidste problem du nævner er løst ved mit sidste indlæg...
Avatar billede kjeldb Nybegynder
04. maj 2007 - 17:10 #9
Det er nu aspmail jeg bruger, men hvordan får recipients i mailkomponenten mail adressen?
Avatar billede softspot Forsker
05. maj 2007 - 16:06 #10
Da du skrev: "Jeg har aspmail og JMail til rådighed på serveren.", så antog jeg at det var ligemeget hvilken en der blev benyttet og derfor tog jeg JMail, da det er den jeg selv har benyttet...

Anyway! Såvidt jeg kan gennemskue ud fra det script du linker til, så er det en global variabel som sættes et sted og aflæses i SendMail-funktionen, så derfor mente jeg at det samme burde kunne gøres med CC-email adresserne.
Avatar billede kjeldb Nybegynder
05. maj 2007 - 16:41 #11
Hej igen,
Jo, det er ligemeget!
Jeg har gjort følgende:

if Request.Form("Klinik") = "Mannheim" then
recipients = "mail1@adresse.de"
end if
if Request.Form("Klinik") = "München" then
recipients = "mail2@adresse.de"
end if
if Request.Form("Klinik") = "Nürnberg" then
recipients = "mail3@adresse.de"
end if
Osv. for de forskellige byer

Afsluttende med:
  if Request.Form("Klinik") = "" then
    call AddErrorMsg("Bitte wählen Sie eine Klinik für Ihren Termin.")
  end if

CC adresserne har jeg indsat som følger i mailkomponenten:
mailObj.AddCC "Modtagernavn", "mail1@adresse1.de"
mailObj.AddCC "Modtagernavn", "mail2@adresse2.de"

I html formularen er selectboksen indsat som følger:
<select name="Klinik" tabindex="11">
    <option value="" selected>Bitte hier Klinik w&auml;hlen!</option>
    <option value="Berlin">Berlin</option>
    <option value="Dortmund">Dortmund</option>
    <option value="Düsselsdorf">Düsseldorf</option>
    <option value="Hamburg">Hamburg</option>
    <option value="Hannover">Hannover</option>
    <option value="Leipzig">Leipzig</option>
    <option value="Lübeck">Lübeck</option>
    <option value="Mannheim">Mannheim</option>
    <option value="München">München</option>
    <option value="Nürnberg">Nürnberg</option>
    <option value="Oberhausen">Oberhausen</option>
    <option value="Stuttgart">Stuttgart</option>
</select>

Det virker perfekt, men kan det laves lidt fiksere?
Du skal nok få pointene, for du ledte mig på sporet af hvordan det kunne gøres.
Tak!
Mvh
Kjeld
Avatar billede softspot Forsker
05. maj 2007 - 19:02 #12
Jeg vil umiddelbart anbefale at du benytter select case-konstruktionen, da den er mere intuitiv i dit scenarie. Hvis du har mere end 2 IF-kriterier med samme grundlag, bør du bruge select case i stedet for IF-sætninger. Du skal under alle omstændigheder (i dette konkrete tilfælde) benytte IF-THEN-ELSEIF i stedet, da det kun vil udføre sammenligninger indtil det rigtige kriterie findes.

Altså:

if Request.Form("Klinik") = "Mannheim" then
  recipients = "mail1@adresse.de"
elseif Request.Form("Klinik") = "München" then
  recipients = "mail2@adresse.de"
elseif Request.Form("Klinik") = "Nürnberg" then
  recipients = "mail3@adresse.de"
elseif
  ' osv. osv.
elseif Request.Form("Klinik") = "" then
  call AddErrorMsg("Bitte wählen Sie eine Klinik für Ihren Termin.")
end if

select case-konstruktionen ser således ud:

select case Request.Form("Klinik")
  case "Mannheim"
    recipients = "mail1@adresse.de"

  case "München"
    recipients = "mail2@adresse.de"

  case "Nürnberg"
    recipients = "mail3@adresse.de"

  ' osv. osv.

  case else
    call AddErrorMsg("Bitte wählen Sie eine Klinik für Ihren Termin.")
end select
Avatar billede softspot Forsker
05. maj 2007 - 19:03 #13
Og et lille svar... :)
Avatar billede kjeldb Nybegynder
05. maj 2007 - 19:32 #14
Tak for hjælpen!
Avatar billede softspot Forsker
05. maj 2007 - 19:38 #15
Velbekomme og tak for point :)
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