04. maj 2007 - 14:18Der 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
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?
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
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.
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?
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.
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.
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.
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ä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
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
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.