Отправка электронной почты с данными набора записей

У меня есть классическая страница ASP со списком некоторых свойств из базы данных, и для каждого свойства есть небольшая контактная форма, чтобы пользователь мог «запросить обратный вызов» у агента по свойствам, связанного с этим свойством.

Однако, какую бы форму я ни заполнил, электронное письмо агенту всегда содержит сведения о первом свойстве на странице, а не о свойстве, для которого человек запрашивает обратный вызов.

Это код, который у меня есть на странице с объявлениями (вместе с контактной формой);

<%
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
%>

У меня также есть страница docallback.asp, которая обрабатывает отправку электронной почты;

<%
    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>" & "<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")
%>

Я задавался вопросом, может ли кто-нибудь определить, почему электронное письмо не отправляет конкретные сведения о собственности в электронном письме?

Извиняюсь за довольно длинный код.

Спасибо.


person doubleplusgood    schedule 06.10.2009    source источник
comment
Где находится поле request.Form("fldName")   -  person Preet Sangha    schedule 06.10.2009
comment
Добавление SQL, который запрашивает данные на второй странице, может помочь в отладке.   -  person Stu Pegg    schedule 06.10.2009
comment
@foriamstu Я только что добавил запрос sql, содержащийся на странице default.asp.   -  person doubleplusgood    schedule 06.10.2009


Ответы (3)


Кажется, вы повторно используете один и тот же набор результатов (rspropertyresults) как для отображения свойств, так и для отправки электронной почты.

Поскольку этот набор записей не принимает ContentID в качестве параметра (и вы все равно его не отправляете), электронное письмо будет отправлено с использованием свойств первой записи в наборе записей.

Добавьте скрытый ввод ContentID в каждую из ваших форм, создайте дополнительный набор записей по этой команде:

SELECT  *
FROM    VWTenantPropertiesResults
WHERE   ContentID = @ContentID

, откройте его и используйте для получения сведений о свойстве:

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
person Quassnoi    schedule 06.10.2009

Я не могу точно сказать, откуда вы получаете «rspropertyresults», похоже, что запроса нет. Возможно, вам потребуется убедиться, что данные потенциально находятся на начальной странице, сохранены и отправлены на страницу doCallBack.asp (через 's или аналогичный.

Кроме того, ваши поля ввода не имеют одинаковых имен в обеих половинах формы. Может быть, я что-то упускаю, но я думаю, вы хотите использовать такие вещи, как:

fldName             = replace(request.Form("txtName"),"'","")
fldTelephone    = replace(request.Form("txtTelephone"),"'","")
fldEmail            = replace(request.Form("txtEmail"),"'","")
person Amadiere    schedule 06.10.2009
comment
@Amadiere Поля ввода имеют txtName, txtTelephone и txtEmail следующим образом; ‹input id=form_input type=text name=txtName /›. Далее на странице есть SQL-запрос, который получает элементы, которые (на данный момент) просто выбирают все, что связано со свойством (включая адрес электронной почты и contentid). - person doubleplusgood; 06.10.2009
comment
Что говорит foriamstu, если вы не сохраните идентификатор записи из базы данных через отправку HTTP, то он будет потерян, и вы просто вернете первую запись в том, что возвращает ваш запрос. попробуйте добавить скрытое поле для хранения некоторой ссылки на свойство, а затем запросить его, когда вы перейдете к части электронной почты. Вам определенно нужно выполнить два запроса (или сохранить все данные для отправки). - person Amadiere; 06.10.2009

Не похоже, что вы отправляете ContentID на страницу docallback.asp в форме, и я предполагаю, что вы не фильтруете его, когда запрашиваете результаты на странице docallback.asp. Это означает, что вы всегда получите первый результат (а не тот, который вы хотите).

person Stu Pegg    schedule 06.10.2009