Avatar billede stylingdk Nybegynder
20. oktober 2005 - 11:56 Der er 20 kommentarer og
1 løsning

Hjælp til CDONTS kontaktform

jeg har lavet 2 forms med CDONTS, jeg vil gerne have en form for validering der evt. "springer" op med et vindue hvis et felt ikke er udfyldt, samt, jeg har problemer med at hvis der er et felt der ikke er udfyldt så bliver der slet ikke sendt en mail.

sådan her ser mit script ud:

<%


Dim strName, strEmail, strQuery, strSubj
strName = Trim(Request.Form("ClientName"))
strEmail = Trim(Request.Form("ClientEmail"))
strSubj = Trim(Request.Form("ClientEmne"))
strQuery = Trim(Request.Form("ClientQry"))

If (strName <> "" And strEmail <> "" And strSubj <> "" And strQuery <> "") Then
  Dim objMail, aRecipients
  Set objMail = Server.CreateObject("CDONTS.NewMail")

  objMail.From = strName & " <" & strEmail & ">"
  objMail.To = "info@sonartire.dk"
  objMail.Subject = "Til SONAR Danmark:" & "<" & strSubj & ">"
  aRecipients = Array("info@sonartire.dk")

  objMail.BCC = Join(aRecipients, ";")
  objMail.BodyFormat = 0
  objMail.Body = strQuery
  objMail.Host = "smtp1.b-one.nu"
  objMail.Send

Response.Write "<h1>Mail afsendt</h1>"
Response.Write "<p>Tak for din henvendelse. Du vil få svar hurtigst muligt.</p>"

  Set objMail = Nothing
Else
%>

Det kan ses på www.sonartire.dk/kontaktos.asp

Så altså hvis du udfylder formularen og fx lader besked være blank, så bliver der ikke sendt en mail, men skriver du noget i "besked" feltet så bliver du sendt videre til "mail sendt" siden?

Håber på lidt hjælp her.
Avatar billede softspot Forsker
20. oktober 2005 - 13:46 #1
Til det med advarsel om at alle felter skal være udfyldt, skal du nok benytte noget javascript. Jeg kunne forstille mig noget i stil med:

<script type="text/javascript">
function validate(frm) {
  if(frm) {
    var bRes = true;
    bRes = bRes && frm.ClientQry.value.length != 0;
    bRes = bRes && frm.ClientName.value.length != 0;
    bRes = bRes && frm.ClientEmail.value.length != 0;
    bRes = bRes && frm.ClientEmne.value.length != 0;
    if(!bRes) alert('Husk alle felter skal udfyldes inden formularen kan sendes.');
    return bRes;
  }
  return false;
}
</script>


og din form skal så rettes til:

<form onsubmit="return validate()" action="" method=post>
<fieldset style="width: 468px; height: 298px">
<legend align="center">
  <p align="center"><b><font face="Tahoma" size="2">Husk at udfylde alle felter</font></b></p>
  </legend>&nbsp;

<table border="0" width="464" cellspacing="0" cellpadding="0" id="table2">
  <tr>
    <td width="154" align="right" valign="middle"><font face="Tahoma"><b><font size="2">Navn: </font></b></font></td>
    <td width="9">&nbsp;</td>
    <td width="301"><font face="Tahoma">
      <input id="t1" name="ClientName" size=21 style="font-weight: 700"></font></td>
  </tr><tr>
    <td width="154" align="right" valign="middle"><font face="Tahoma"><b><font size="2">E-mail: </font></b></font></td>
    <td width="9">&nbsp;</td>
    <td width="301"><font face="Tahoma">
      <input id="t2" name="ClientEmail" size=21 style="font-weight: 700"></font></td>
  </tr><tr>
    <td width="154" align="right" valign="middle">&nbsp;</td>
    <td width="9">&nbsp;</td>
    <td width="301">&nbsp;</td>
  </tr><tr>
    <td width="154" align="right" valign="middle"><font face="Tahoma"><b><font size="2">Emne:</font></b></font></td>
    <td width="9">&nbsp;</td>
    <td width="301"><font face="Tahoma">
      <input id="t3" name="ClientEmne" size=21 style="font-weight: 700"></font></td>
  </tr><tr>
    <td width="154" align="right" valign="top">&nbsp;</td>
    <td width="9">&nbsp;</td>
    <td width="301">&nbsp;</td>
  </tr><tr>
    <td width="154" align="right" valign="top"><font face="Tahoma"><b>
      <font size="2">Besked:</font></b></font></td>
    <td width="9">&nbsp;</td>
    <td width="301"><font face="Tahoma">
      <textarea id="t4" name="ClientQry" cols=24 rows=7></textarea></font></td>
  </tr>
</table>
<p align="center"><font face="Tahoma"><label for="t5">&nbsp;</label>
  <input id="t3" type="Submit" value="Send" />
  <input type="reset" value="Slet"><br>&nbsp;</font>
</fieldset>
</form>
Avatar billede softspot Forsker
20. oktober 2005 - 13:48 #2
Hmmm... lidt for hurtig til at poste mit indlæg :|

Din form skal startes således (i stedet for den første linie i den form jeg postede):

<form onsubmit="return validate(this)" action="" method=post>

Det var altså "this" der manglede i kaldet til validate...
Avatar billede softspot Forsker
20. oktober 2005 - 13:49 #3
script-sektionen kan du sætte ind i head-sektionen af HTML-dokumentet.
Avatar billede stylingdk Nybegynder
20. oktober 2005 - 14:15 #4
hvad så det her problem med at den ikke sender noget af det, hvis der bare er et af felterne der ikke er udfyldt?
Avatar billede softspot Forsker
20. oktober 2005 - 15:09 #5
Såvidt jeg kan se på din kode så er du heller ikke interesseret i at sende noget (og med sende forstår jeg en mail), hvis ikke alle felter er udfyldt. Hvis dette ikke er tilfældet, så er der et eller andet i dit oplæg jeg har misforstået...
Avatar billede softspot Forsker
20. oktober 2005 - 15:16 #6
Ok, der er nok noget jeg har misforstået, men hvilket felt er det så der skal være udfyldt og hvilke er det ok at efterlade tomme...?
Avatar billede stylingdk Nybegynder
20. oktober 2005 - 15:19 #7
kunne fx være emnefeltet som kunne være tomt.
Avatar billede softspot Forsker
20. oktober 2005 - 15:30 #8
Hmmm... svaret er en lille smule tvetydigt. Enten så er det en sarkastisk konklusion, som du mener jeg selv burde kunne se, ellers er det et udtryk for at det kan variere, dvs. det ikke er sikkert at netop emnefeltet er tomt. Hvis det er det først, synes jeg det er lidt unødvendigt og upassende, hvis det er det andet, så vil jeg gerne have dig til at specificere nærmere hvad reglerne så skal være.

Under antagelse af at det er det første, så skal klient scriptet rettes til flg.:

<script type="text/javascript">
function validate(frm) {
  if(frm) {
    var bRes = true;
    bRes = bRes && frm.ClientQry.value.length != 0;
    bRes = bRes && frm.ClientName.value.length != 0;
    bRes = bRes && frm.ClientEmail.value.length != 0;
    if(!bRes) alert('Husk alle felter skal udfyldes inden formularen kan sendes.');
    return bRes;
  }
  return false;
}
</script>


på serveren ville jeg foreslå denne rettelse:

<%
Dim strName, strEmail, strQuery, strSubj
strName = Trim(Request.Form("ClientName"))
strEmail = Trim(Request.Form("ClientEmail"))
strSubj = Trim(Request.Form("ClientEmne"))
strQuery = Trim(Request.Form("ClientQry"))

If (strName <> "" And strEmail <> "" And strQuery <> "") Then
  Dim objMail, aRecipients
  Set objMail = Server.CreateObject("CDONTS.NewMail")

  objMail.From = strName & " <" & strEmail & ">"
  objMail.To = "info@sonartire.dk"
  objMail.Subject = "Til SONAR Danmark:" & "<" & strSubj & ">"
  aRecipients = Array("info@sonartire.dk")

  objMail.BCC = Join(aRecipients, ";")
  objMail.BodyFormat = 0
  objMail.Body = strQuery
  objMail.Host = "smtp1.b-one.nu"
  objMail.Send

  Response.Write "<h1>Mail afsendt</h1>"
  Response.Write "<p>Tak for din henvendelse. Du vil få svar hurtigst muligt.</p>"

  Set objMail = Nothing
Else
%>
Avatar billede stylingdk Nybegynder
20. oktober 2005 - 15:35 #9
hvis du kigger på sonartire.dk/indexansogning.asp så ser du en ansøgningsformular. her vil jeg gerne have at det ikke SKAL være påkrævet at udfylde fax, evt. www og evt. bemærkninger felterne.

Du kan prøve at udfylde de påkrævede felter og tryk send, så er det næsten som at trykke slet, så forsvinder alle data bare i felterne. hvis du istedet udfylder alle felter, og trykker send, så vil du se at du få beskeden "mail sendt"

undskylder hvis jeg ikke var klar nok i min beskrivelse før.
Avatar billede softspot Forsker
20. oktober 2005 - 15:55 #10
Som jeg ser det har du to muligheder for at lave validering på om de rigtige felter er udfyldt. Den første (og resursemæssige foretrukne) er på klienten. Så spares serveren for unødvendigt arbejde og du skal ikke gøre noget for at bevare felternes indhold. Den anden er på serveren og hvis du vælger denne løsning, skal du ud over at validere på serveren også sørge for at værdierne bliver sendt med tilbage til klienten, evt. sammen med en fejlbesked et eller andet sted på formularen.

En hybrid løsning er som den du har efter at have tilføjet den kode jeg har foreslået, nemlig med validering både på klienten og så på serveren. Det bevirker at du er helt sikker på at de data som serveren forventer og behøver er der inden du tager dem i brug (dvs. i dette tilfælde sender en mail). Det er en god måde at løse opgaven på, da du får fordelene ved begge løsninger.

Jeg skal lige sikre mig, at alt det kode (serverscript, klientscript og HTML) du viser rent faktisk ligger i samme fil, ellers vil det nok ikke fungere pga. den (tomme) action-attribut du har i din form.
Avatar billede stylingdk Nybegynder
20. oktober 2005 - 16:11 #11
jeg får ikke smidt en kommentar i hovedet hvis fx jeg ikke udfylder clientName feltet, men den sletter bare alt i felterne. men det virker fint med at få den til at sende nu uden at der er noget i emne feltet.
Avatar billede softspot Forsker
20. oktober 2005 - 16:13 #12
Bare lige for at være sikker på at vi har det samme udgangspunkt: fik du den rettelse med som fra min kommentar 20/10-2005 13:48:44?
Avatar billede stylingdk Nybegynder
20. oktober 2005 - 16:14 #13
nej 2 sek prøver at sætte den ind.
Avatar billede softspot Forsker
20. oktober 2005 - 16:16 #14
Den er nemlig vigtig for at klient fungerer :)
Avatar billede stylingdk Nybegynder
20. oktober 2005 - 16:17 #15
men hvad med denne linie
"<%=Request.ServerVariables("kontaktos.asp")%>"  efter action=
Avatar billede stylingdk Nybegynder
20. oktober 2005 - 16:18 #16
ser således ud nu:

<% @LANGUAGE = VBScript %>
<% Option Explicit %>
<html>

<head>
<title>SONAR Danmark</title>
<meta http-equiv="Content-Language" content="da">
<meta http-equiv="Content-Type" content="text/html; charset=windows-1252">
<title>SONAR Danmark</title>

<script type="text/javascript">
function validate(frm) {
  if(frm) {
    var bRes = true;
    bRes = bRes && frm.ClientQry.value.length != 0;
    bRes = bRes && frm.ClientName.value.length != 0;
    bRes = bRes && frm.ClientEmail.value.length != 0;
    if(!bRes) alert('Husk alle felter skal udfyldes inden formularen kan sendes.');
    return bRes;
  }
  return false;
}
</script>

</head>

<body topmargin="0" leftmargin="0" rightmargin="0" bottommargin="0" marginwidth="0" marginheight="0" bgcolor="#ffffff">

<table border="0" cellspacing="0" cellpadding="0" id="table1" width="100%" height="100%">
    <tr>
        <td colspan="4" height="129" bgcolor="#8E8E8E" valign="top">
        <p align="left"><br>
&nbsp;&nbsp;&nbsp; <font face="Verdana" size="5"><b><br>
        </b>&nbsp;&nbsp; </font></td>
    </tr>
    <tr>
        <td background="images/sonartire_06.gif">&nbsp;</td>
        <td valign="top" background="images/sonartire_06.gif">
        <img border="0" src="images/sonartire_08.gif" width="589" height="39"></td>
        <td valign="top" background="images/sonartire_06.gif" height="39" colspan="2">&nbsp;</td>
    </tr>
    <tr>
        <td valign="bottom">
        <p align="center">
        <img border="0" src="images/sonartire_16.gif" width="219" height="332"></td>
        <td valign="top" colspan="2" align="center">
        <p align="center"><br>
&nbsp;


<%
Dim strName, strEmail, strQuery, strSubj
strName = Trim(Request.Form("ClientName"))
strEmail = Trim(Request.Form("ClientEmail"))
strSubj = Trim(Request.Form("ClientEmne"))
strQuery = Trim(Request.Form("ClientQry"))

If (strName <> "" And strEmail <> "" And strQuery <> "") Then
  Dim objMail, aRecipients
  Set objMail = Server.CreateObject("CDONTS.NewMail")

  objMail.From = strName & " <" & strEmail & ">"
  objMail.To = "info@sonartire.dk"
  objMail.Subject = "Til SONAR Danmark:" & "<" & strSubj & ">"
  aRecipients = Array("info@sonartire.dk")

  objMail.BCC = Join(aRecipients, ";")
  objMail.BodyFormat = 0
  objMail.Body = strQuery
  objMail.Host = "smtp1.b-one.nu"
  objMail.Send

  Response.Write "<h1>Mail afsendt</h1>"
  Response.Write "<p>Tak for din henvendelse. Du vil få svar hurtigst muligt.</p>"

  Set objMail = Nothing
Else
%><br>
&nbsp;<img border="0" src="images/kontakt.jpg" width="238" height="15"><form onsubmit="return validate(this)" action="" method=post>
<fieldset style="width: 468px; height: 298px">
<legend align="center">
<p align="center"><b><font face="Tahoma" size="2">Husk at udfylde alle felter</font></b></p>
</legend>
&nbsp;<table border="0" width="464" cellspacing="0" cellpadding="0" id="table2">
    <tr>
        <td width="154" align="right" valign="middle"><font face="Tahoma"><b><font size="2">Navn: </font></b>
</font>
        </td>
        <td width="9">&nbsp;</td>
        <td width="301"><font face="Tahoma">
<input id="t1" name="ClientName" size=21 style="font-weight: 700"></font></td>
    </tr>
    <tr>
        <td width="154" align="right" valign="middle"><font face="Tahoma"><b><font size="2">E-mail: </font></b>
</font>
        </td>
        <td width="9">&nbsp;</td>
        <td width="301"><font face="Tahoma">
<input id="t2" name="ClientEmail" size=21 style="font-weight: 700"></font></td>
    </tr>
    <tr>
        <td width="154" align="right" valign="middle">&nbsp;</td>
        <td width="9">&nbsp;</td>
        <td width="301">&nbsp;</td>
    </tr>
    <tr>
        <td width="154" align="right" valign="middle"><font face="Tahoma"><b><font size="2">Emne:
</font></b>
</font>
        </td>
        <td width="9">&nbsp;</td>
        <td width="301"><font face="Tahoma">
<input id="t3" name="ClientEmne" size=21 style="font-weight: 700"></font></td>
    </tr>
    <tr>
        <td width="154" align="right" valign="top">&nbsp;</td>
        <td width="9">&nbsp;</td>
        <td width="301">&nbsp;</td>
    </tr>
    <tr>
        <td width="154" align="right" valign="top"><font face="Tahoma"><b>
        <font size="2">Besked:</font></b></font></td>
        <td width="9">&nbsp;</td>
        <td width="301"><font face="Tahoma">
<textarea id="t4" name="ClientQry" cols=24 rows=7></textarea></font></td>
    </tr>
</table>
<p align="center"><font face="Tahoma"><label for="t5">&nbsp;</label>
<input id="t3" type="Submit" value="Send" />
<input type="reset" value="Slet">
<br>
&nbsp;</font></fieldset></form>
        <p>&nbsp;</p>
        <p>
<% End If %>
</td>
        <td valign="bottom">&nbsp;</td>
    </tr>
    <tr>
        <td background="images/sonartire_12.gif" colspan="3">&nbsp;</td>
        <td background="images/sonartire_12.gif" height="40" valign="bottom">
        &nbsp;</td>
    </tr>
    <tr>
        <td colspan="4" height="130" bgcolor="#7D7D7D" valign="bottom">
        <p align="right"><b><font face="Arial" size="1">Lavet af:</font><font size="1" face="Arial" color="#800000">
        Sand Internet</font></b></td>
        </tr>
    <tr>
        <td width="341"></td>
        <td width="589"></td>
        <td width="1"></td>
        <td height="2" width="330"></td>
    </tr>
</table>

</body>

</html>
Avatar billede softspot Forsker
20. oktober 2005 - 16:24 #17
Hov, hvor kom den fra...?

Hvis du endelig skal bruge noget fra servervariables, så er det nok SCRIPT_NAME. Det ville gøre at dit form-tag kommer til at se således ud:

<form onsubmit="return validate(this)" action="<%=Request.ServerVariables("SCRIPT_NAME") %>" method=post>

Den poster tilbage til siden selv (så kan du omdøbe siden og det vil stadig fungere). Om det rent faktisk er noget man får brug for er så spørgsmålet, men så er det i det mindste gjort :)
Avatar billede stylingdk Nybegynder
20. oktober 2005 - 16:33 #18
YEEEEEEEEES!!!!! nu virker pisset!! TAKKER MANGE GANGE FOR DIN UDSØGTE EKSPERTISE!!
Avatar billede stylingdk Nybegynder
20. oktober 2005 - 16:33 #19
send mig venligst et svar istedet for en kommentar, så du kan få nogle point.
Avatar billede softspot Forsker
20. oktober 2005 - 16:35 #20
Velbekomme :)
Avatar billede softspot Forsker
20. oktober 2005 - 16:39 #21
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

IT-JOB

Csis Security Group A/S

Sales Executive

AL Sydbank A/S (tidligere Arbejdernes Landsbank)

Tech Lead til Datacenter Operations

Forsvarsministeriets Materiel- og Indkøbsstyrelse

IT-Sikkerhedsrådgiver til Cyberdivisionen i Hvidovre