开发者

Sending email with recordset data

I've got a classic ASP page listing some properties from a database and with each property there is a small contact form - to enable a user to 'request a callback' from the property agent associated with that property.

However, whichever form I complete - the email to the agent always includes details of the first property on the page, rather than the property that the person is requesting a callback for.

This is the code I have on the listings page (along with the contact form);

<%
Dim rspropertyresults
Dim rspropertyresults_numRows

Set rspropertyresults = Server.CreateObject("ADODB.Recordset")
rspropertyresults.ActiveConnection = MM_dbconn_STRING

rspropertyresults.Source = "SELECT * FROM VWTenantPropertiesResults ORDER BY ContentID DESC"

rspropertyresults.CursorType = 0
rspropertyresults.CursorLocation = 2
rspropertyresults.LockType = 1
rspropertyresults.Open()

rspropertyresults_numRows = 0
%>

<% 
sys_message = ""

If (Request.Form("form_submit") <> "") Then
    Response.Write("<h1>Form Submitted</h1>") 
    %><!--#include file="docallback.asp"--><%
End If %>

<body id="propertyresults">
<% If Not rspropertyresults.EOF Or Not rspropertyresults.BOF Then %>
<% 
While ((RepeatProperties__numRows <> 0) AND (NOT rspropertyresults.EOF)) 
%>
<div class="propertydetails">
<ul>
<li class="price"><% If (rspropertyresults("ContentPrice")) <> "" Then %><%= FormatCurrency((rspropertyresults.Fields.Item("ContentPrice").Value), 2, -2, -2, -2) %> PCM<% End If ' price true %></li>
<li class="address"><%=varFullAddress%></li>
<% If (rspropertyresults.Fields.Item("ContentDetails").Value) <> "" AND (rspropertyresults.Fields.Item("ContentDetails").Value) <> "<p><br /></p>" Then %><li><%=StripHTML(rspropertyresults.Fields.Item("ContentDetails").Value)%></li><% End If ' details true %>
</ul>
</div>

<div class="propertyimage">
    <a class="badge-callback" id="badge-callback<%=(rspropertyresults.Fields.Item("ContentID").Value)%>" title="Request Callback"  href="#">Request Callback</a>

    <div id="panel<%=(rspropertyresults.Fields.Item("ContentID").Value)%>">
        <form action="default.asp" name="frmCallback" id="form_callback" method="post">
            <fieldset>
                <legend><h2>Request a callback</h2></legend>
                <dl>
                    <dt><label id="name">Name</label></dt>
                    <dd><input id="form_input" type="text" name="txtName" /></dd>
                    <dt><label id="email_address">Email</label></dt>
                    <dd><input id="form_input" type="text" name="txtEmail" /></dd>
                    <dt><label id="telephone">Telephone</label></dt>
                    <dd><input id="form_input" type="text" name="txtTelephone" /></dd>
                    <input type="hidden" name="form_submit" value="submitted" />
                    <dt><input type="submit" value="Request a callback"></dt>
                </dl>
            </fieldset>
        </form>
    </div>
</div>

<% 
  RepeatProperties__index=RepeatProperties__index+1
  RepeatProperties__numRows=RepeatProperties__numRows-1
  rspropertyresults.MoveNext()
Wend
%>

I also have a docallback.asp page that handles the email sending;

<%
    fldName         = replace(request.Form("fldName"),"'","")
    fldTelephone    = replace(request.Form("fldTelephone"),"'","")
    fldEmail        = replace(request.Form("fldEmail"),"'","")

    mBody = "<html><style>body,p,td{font-family:arial;font-size:12px;}</style><body>"
    mBody = mBody & "<p>A tenant has requested a call back for further information regarding the following property:</p>"

    If (rspropertyresults.Fields.Item("ContentHouseNo").Value) <> "" Then
    varFullAddress = (rspropertyresults.Fields.Item("ContentHouseNo").Value) &  " "
    End If
    varFullAddress = varFullAddress & (rspropertyresults.Fields.Item("ContentStreet").Value)
    If (rspropertyresults.Fields.Item("ContentStreet2").Value) <> "" Then
    varFullAddress = varFullAddress & " " & (rspropertyresults.Fields.Item("ContentStreet2").Value)
    End If
    If (rspropertyresults.Fields.Item("ContentTown").Value) <> "" Then
    varFullAddress = varFullAddress & " " &  (rspropertyresults.Fields.Item("ContentTown").Value)
    End If
    If (rspropertyresults.Fields.Item("ContentArea").Value) <> "" Then
    varFullAddress = varFullAddress & " " &  (rspropertyresults.Fields.Item("ContentArea").Value)
    End If
    varFullAddress = varFullAddress & " " &  (rspropertyresults.Fields.Item("ContentPostCode").Value)

    mBody = mBody & "<p>" & varFullAddress & "</p>"

    mBody = mBody & "<p>Their details are:</p>"

    If request.Form("fldName") <> "" Then
        mBody = mBody & "<p>Name: " & request.Form("fldName") & "<br/>"
    End If

    If request.Form("fldTelephone") <> "" Then
        mBody = mBody & "Telephone: " & request.Form("fldTelephone") & "<br/>"
    End If

    If request.Form("fldEmail") <> "" Then
        mBody = mBody & "Email: " & request.Form("fldEmail") & "</p>"
    End If

    mBody = mBody & "<p>" & "<开发者_如何学Python;strong>" & "http://www."& varSiteDomain & "</strong>" & "</p>"
    mBody = mBody & "</body></html>"

    strMSSchema = "http://schemas.microsoft.com/cdo/configuration/"
    Set oCdoConfg = Server.CreateObject("CDO.Configuration")
    oCdoConfg.Fields.Item(strMSSchema & "sendusing") = 1 
    oCdoConfg.Fields.Item(strMSSchema & "smtpserver") = ""
    oCdoConfg.Fields.Item(strMSSchema & "sendusername") = ""
    oCdoConfg.Fields.Item(strMSSchema & "sendpassword") = ""
    oCdoConfg.Fields.Update     

    set oCdoMsg = server.createobject("CDO.Message")
    oCdoMsg.to = ""
    oCdoMsg.bcc = ""
    oCdoMsg.from = ""
    oCdoMsg.Subject = "A tenant has requested a callback about one of your properties"
    oCdoMsg.HTMLbody = mBody
    Set oCdoMsg.Configuration = oCdoConfg
    oCdoMsg.send
    set oCdoMsg = nothing
    set oCdoConfg = nothing 

    response.Redirect("default.asp")
%>

I wondered if anyone might be able to spot why the email is not sending the specific property details in the email?

Apologies for the rather lengthy code.

Thank you.


You seem to reuse same resultset (rspropertyresults) for both displaying the properties and sending the email.

Since this recordset does not accept the ContentID as a parameter (and you don't send it anyway), this will send the email using the properties on the first record in the recordset.

Add a hidden input ContentID into each of your forms, create an additional recordset on this command:

SELECT  *
FROM    VWTenantPropertiesResults
WHERE   ContentID = @ContentID

, open it and use it to retrieve the details of the property:

cmdEmail = Server.CreateObject("ADODB.Command")
rsEmail = Server.CreateObject("ADODB.Recordset")

With cmdEmail
    .ActiveConnection = MM_dbconn_STRING
    .CommandText = "SELECT * FROM VWTenantPropertiesResults WHERE ContentID = ?"
    .CommandType = 1
    .Parameters.Append .CreateParameter("@ContentID", 3, 1, , request.Form("ContentID"))
End With

rsEmail.Open cmdEmail


I can't quite tell where you are getting "rspropertyresults" from, there doesn't appear to be a query. You may need to make sure that the data is potentially found on the initial page, is stored and sent over to the doCallBack.asp page (via 's or similar.

In addition, your input boxes don't appear to have the same names on both halves of the form. Maybe there is something I'm missing, but I think you want to use things like:

fldName             = replace(request.Form("txtName"),"'","")
fldTelephone    = replace(request.Form("txtTelephone"),"'","")
fldEmail            = replace(request.Form("txtEmail"),"'","")


It doesn't look like you're posting the ContentID to the docallback.asp page in the form, and I'd guess you're not filtering by it when you request the results on the docallback.asp page either. Which means you'll always get the first result (rather than the one you want).

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜