Avatar billede smidt Novice
09. juli 2001 - 16:08 Der er 14 kommentarer og
2 løsninger

Tilføje email

Jeg har en formular hvor jeg gerne vil have at feltet email bliver tilføjet til en database hvis brugeren vælger ja....

Her er koden:

<% @LANGUAGE = VBScript %>
<% Option Explicit %>
<html>
<head>
<title>vipiil - send salgsopstilling</title>
</head>
<body bgcolor=#ffffff>
<%
Dim strName, strEmail, strQuery, strAdresse, strBy, strTlf, strTlfArbejde, strSagsnr, strSalgsopstilling, strArchive
strName = Trim(Request.Form(\"ClientName\"))
strAdresse = Trim(Request.Form(\"ClientAdresse\"))
strBy = Trim(Request.Form(\"ClientBy\"))
strTlf = Trim(Request.Form(\"ClientTlf\"))
strTlfArbejde = Trim(Request.Form(\"ClientTlfArbejde\"))
strEmail = Trim(Request.Form(\"ClientEmail\"))
strQuery = Trim(Request.Form(\"ClientQry\"))
strSagsnr  = Trim(Request.Form(\"ClientSagsnr\"))
strSalgsopstilling  = Trim(Request.Form(\"ClientSalgsopstilling\"))
strArchive = Trim(Request.Form(\"ClientArchive\"))


If (strName <> \"\") Then
    Dim objMail, aRecipients
   
    if strArchive = \"1\" then


set conn=Server.CreateObject(\"ADODB.Connection\")
conn.Provider=\"Microsoft.Jet.OLEDB.4.0\"
conn.Open(Server.Mappath(\"SpawnedMailer.mdb\"))

set rsMail = Server.CreateObject(\"ADODB.recordset\")
rsMail.Open \"SELECT * FROM MailingList WHERE MailingAddy=\'\" & strEmail & \"\'\", conn

    If not rsMail.EOF Then
        If rsMail(\"MailingAddy\") = strEmail Then

        End if
       
    Else

        ArchiveSQL = \"INSERT into MailingList (MailingAddy) VALUES (\'\" & strEmail & \"\');\"
        conn.Execute ArchiveSQL
       
    end if
   
rsMail.close
conn.close

end if

   
   
   
    Set objMail = Server.CreateObject(\"CDONTS.NewMail\")
    objMail.From = \"xx@xx.dk\"
    objMail.To = \"xx@xx.dk\"
    objMail.Subject = \"ddd! \"
    objMail.Body = \"!!!!  \"
    objMail.Send

   
    Response.Write \"Tak for din bestilling !  \" & strName
    Set objMail = Nothing

Else
%>

<FORM ACTION=\"<%=Request.ServerVariables(\"SCRIPT_NAME\")%>\" METHOD=POST>
<div align=\"center\">
  <center>
<TABLE BORDER=0 width=\"550\">
  </center>
  <center>
  </center>
  <center>
<tr><td width=\"91\">Navn:</td><td width=\"11\"><img border=\"0\" src=\"../images/stjerne.gif\" width=\"10\" height=\"10\"></td><td width=\"428\" colspan=\"4\"><INPUT NAME=\"ClientName\" VALUE=\"\" SIZE=57 tabindex=\"1\"></td></tr>
<tr><td width=\"91\">Adresse:</td><td width=\"11\"><img border=\"0\" src=\"../images/stjerne.gif\" width=\"10\" height=\"10\"></td><td width=\"428\" colspan=\"4\"><input type=\"text\" name=\"ClientAdresse\" size=\"57\" tabindex=\"2\"></td></tr>
<tr><td width=\"91\">Postnr. og by:</td><td width=\"11\"><img border=\"0\" src=\"../images/stjerne.gif\" width=\"10\" height=\"10\"></td><td width=\"428\" colspan=\"4\"><input type=\"text\" name=\"ClientBy\" size=\"57\" tabindex=\"3\"></td></tr>
<tr>
  <td width=\"91\">Tlf:</td><td width=\"11\"></td><td width=\"428\" colspan=\"4\"><input type=\"text\" name=\"ClientTlf\" size=\"18\" tabindex=\"4\">Tlf (arbejde/mobil):<input type=\"text\" name=\"ClientTlfArbejde\" size=\"20\" tabindex=\"5\"></td>
</tr>
<tr><td width=\"91\">e-mail adresse</td><td width=\"11\"></td><td width=\"428\" colspan=\"4\"><INPUT NAME=\"ClientEmail\" SIZE=57 tabindex=\"6\"></td></tr>
<tr><td width=\"91\"></td><td width=\"11\"></td>
  </center>
  <td width=\"428\" colspan=\"4\">
    <p align=\"left\">Få automatisk opdatering og nyhedsbrev
    tilsendt&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Ja<input type=\"radio\" value=\"1\" checked name=\"ClientArchive\">&nbsp;&nbsp;&nbsp;&nbsp;
    Nej<input type=\"radio\" name=\"ClientArchive\" value=\"0\"></td></tr>
  <center>
<tr><td width=\"91\"></td><td width=\"11\"></td><td width=\"94\"></td><td width=\"90\"></td><td width=\"16\"></td><td width=\"220\"></td></tr>
<tr><td width=\"91\"></td><td width=\"11\"></td><td width=\"94\"><INPUT TYPE=SUBMIT VALUE=\"Send\" tabindex=\"7\"></td><td width=\"90\"></td><td width=\"16\"><img border=\"0\" src=\"../images/stjerne.gif\" width=\"10\" height=\"10\" align=\"right\"></td><td width=\"220\">skal
    udfyldes</td></tr>
</TABLE>
  </center>
</div>
</FORM>

<% End If %>


</body>
</html>

Men her får jeg en fejl:

Microsoft VBScript runtime error \'800a01f4\'

Variable is undefined: \'conn\'

/mail/spaw1.asp, line 28

Jeg vil gerne have hjælp til at få den til at virke samt til at hvis strEmail er tomt så skal den ikke gøre noget.
Avatar billede nute Nybegynder
09. juli 2001 - 16:13 #1
du skal legge til conn i denne linje:

Dim strName, strEmail, strQuery, strAdresse, strBy, strTlf, strTlfArbejde, strSagsnr, strSalgsopstilling, strArchive

sån at den ser sånn ut:

Dim strName, strEmail, strQuery, strAdresse, strBy, strTlf, strTlfArbejde, strSagsnr, strSalgsopstilling, strArchive, conn
Avatar billede nute Nybegynder
09. juli 2001 - 16:15 #2
du bør gjerne vurdere å JavaScript til å sjekke om email er tomt...
Avatar billede tmceu Praktikant
09. juli 2001 - 16:48 #3
Vær opmærksom på, at du kan få problemer med flg. linier:

rsMail.close og conn.close

Dette skyldes at det ikke er usædvanligt at du kommer i en situation hvor hhv. recordset eller connection ikke er åbne. Du kan tilføje et check i stil med nedenstående:

if rsMail.State = adStateOpen then
rsMail.Close
end if

Alternativt kan du lave en mere generisk funktion:

function CloseObj(byref objToClose)
if objToClose.State = adStateOpen then
  objToClose.Close
end if
end function

Derefter erstatter du eks. conn.close med
CloseObj(conn)

Bemærk at du skal enten skal inkludere adovbs.inc eller selv deklarere konstanten adStateOpen

Du kan teste effekten af ovenstående ved at unlade at åbne din connection og derefter prøve at lukke den.

P.S. Årsagen til din fejl og til at du skal tilføje conn som nute siger er, at du har angivet \"Option Explicit\".

Mvh
Thomas
Avatar billede smidt Novice
09. juli 2001 - 18:14 #4
Nu får jeg en fejl:

Microsoft VBScript runtime error \'800a01f4\'

Variable is undefined: \'rsMail\'

/mail/spaw1.asp, line 32

Kan du ikke komme med et eksempel tmceu 
Avatar billede tmceu Praktikant
09. juli 2001 - 18:37 #5
Det er fordi du skal have tilføjet rsMail også, og det skyldes igen \"Option Explicit\" og den skal nu se således ud (og det skal den uanset om du indfører det check jeg har foreslået):

Dim strName, strEmail, strQuery, strAdresse, strBy, strTlf, strTlfArbejde, strSagsnr, strSalgsopstilling, strArchive, conn, rsMail

Option Explicit er en god måde at sikre at alle variabler er erklæret, men den kan godt give nogle grå hår i hovedet, hvis man ikke tænker over at man har angivet det.

Mvh
Thomas
Avatar billede smidt Novice
09. juli 2001 - 18:53 #6
Ny fejl:

Microsoft VBScript runtime error \'800a01f4\'

Variable is undefined: \'ArchiveSQL\'

/mail/spaw1.asp, line 42
Avatar billede tmceu Praktikant
09. juli 2001 - 19:02 #7
Ikke for at være flabet, men vi prøver lige igen...
Når du anvender \"Option Explicit\", skal ALLE variabler være erklæret eksplicit. Det betyder i dit tilfælde, at du også vil få problemer med

ArchiveSQL (som nu) og derefter objMail

Du kan gøre ét af følgende:
1. Fjerne Option Explicit - dermed undgår du flere fejl af denne type, men får til gengæld en mindre \"ren\" kode

2. Blive ved med at tilføje variabler til linien Dim strName, strEmail, strQuery, strAdresse, strBy, strTlf, strTlfArbejde, strSagsnr, strSalgsopstilling, strArchive, conn, rsMail indtil du ikke længere får denne type fejl.

Du skal min. tilføje ArchiveSQL og objMail, så linien ser ud som nedenstående:

Dim strName, strEmail, strQuery, strAdresse, strBy, strTlf, strTlfArbejde, strSagsnr, strSalgsopstilling, strArchive, conn, rsMail, ArchiveSQL, objMail

Måske har jeg overset nogle variable i din kode, men du kan selv tilføje dem, efterhånden som de dukker op i fejlmeddelelsen \"Variable is undefined: [variabelnavn]

Mvh
Thomas
Avatar billede smidt Novice
09. juli 2001 - 19:26 #8
Det er en herlig måde at lære VBScript

Min fejl ´hvar at jeg satte dem før conn
Og du er bestemt ikke flabet

Nu har jeg virkelig problemet for det skulle gerne virke selv om strEmail er tomt, men så får jeg denne fejl. Har du et forslag

Microsoft JET Database Engine error \'80004005\'

Field \'MailingList.MailingAddy\' cannot be a zero-length string.

/mail/spaw1.asp, line 43
Avatar billede smidt Novice
09. juli 2001 - 19:44 #9
Det vil sige at hvis strEmail er tom så skal der ikke ske noget udover at der selfølgelig stadig skal sendes en email.

Når der vælges if strArchive = \"1\" then så ligges der i databasen

Er det muligt at lave noget alla if strEmail = tom så skal der ikke ligges i databasen
Avatar billede tmceu Praktikant
09. juli 2001 - 20:04 #10
Din fejl skyldes sandsynligvis at feltet i databasen er defineret til ikke at må være tom.

Vent et øjeblik, så vender jeg tilbage...
Avatar billede smidt Novice
09. juli 2001 - 20:04 #11
eller omvendt hvis strEmail er fuldt så.....
Avatar billede smidt Novice
09. juli 2001 - 20:14 #12
tmceu

Jeg ved at man i access i designvisning kan vælge: tilladnullænge = ja samt obligatorisk = nej 

Men kommer der så ikke tomme felter...
Avatar billede smidt Novice
09. juli 2001 - 20:15 #13
For husk at det jeg ønsker er at når strEmail er tomt skal der ikke skrives til databasen....!!
Avatar billede tmceu Praktikant
09. juli 2001 - 20:17 #14
Jeg forstår ikke helt hvornår du vil gøre hvad, men, du kan lave en simpel if betingelse uden om dit SQL statement, eks.

if inStr(1, strEmail, \"@\", vbTextCompare) then
  kode der afvikles når den er udfyldt
else
  kode der afvikles når den ikke er udfyldt
end if

Læg mærke til, at jeg kontroller om der er et \"@\" i værdien, det er en simpel måde at slå 2 fluer med ét smæk; står der noget i feltet og indeholder det et @, er der en chance for at det er en e-mail adresse.

Mvh
Thomas
Avatar billede tmceu Praktikant
09. juli 2001 - 20:28 #15
Hvis du har sat tilladnullængde = nej og obligatorisk = ja, skal feltet være udfyldt. Jeg tror det er hvad feltet står til nu, det indikerer fejlmeddelelsen fra før. Du kan evt. prøve at sætte alle felter til tilladnullængde = ja og obligatorisk = nej, så kan feltet være tomt og jo, du vil i så fald få tomme felter

Jeg kender ikke din datamodel, så du må prøve dig lidt frem med hvilk felter der skal være udfyldt før du vil skrive til databasen. Hvis du bare vil kontrollere for om feltet er udfyldt, kan du bruge

if len(felt) then
  et eller andet
end if
Avatar billede smidt Novice
09. juli 2001 - 20:35 #16
Alt er perfekt nu...

der skrives kun til databasen hvis man har valgt ja  - og- hvis feltet strEmail er udfyldt

ellers intet

ved alt andet sendes der en email

Mange tak for hjælpen

100 til tmceu
og
50 til nute
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