Jag har skapat en formulärsida som listar upp ett antal poster ur en databas till en egen checkbox för varje post. Kanske att du kan loopa dig igenom databasen och skicka ett mail vid varje loop? Har inte denna fråga farit uppe tidigare. Känner igen den. På vilket sätt är de effektivare? Jag ställer bara en SQL fråga. Vilket inte var fallet i frågeställarens kod. Hur delar jag upp multipla formulärdata för matchning mot en databas
Om jag väljer fler checkboxar och formuläret använder sig av POST, så radas dessa värden (som i mitt fall är ID) upp med kommaseparering.
Nu till mitt problem:
Jag skall i actionsidan ta emot dessa värden och skapa ett mail för varje ID men hämta en adress från samma databas igen.
Jag får inte till detta och hoppas att någon hjälpsam själ kan komma med något tips.
Sidan som tar emot all data ser ut så här:
<code>
<!-- #include file="../adovbs.inc" -->
<%
Set Connect = Server.CreateObject("ADODB.Connection")
DSNName = "DRIVER={Microsoft Access Driver (*.mdb)};"
DSNName = DSNName & "DBQ=" & Server.MapPath("databas.mdb")
Connect.Open DSNName
Set JMail = Server.CreateObject("JMail.Message")
JMail.From = "epost@domain.com"
JMail.FromName = "Coach"
For I = 1 To Request.Form("Kontakta").Count
Response.Write Request.Form("Kontakta")(I)
Set RS = Server.CreateObject("ADODB.Recordset")
Texter = "SELECT SMS FROM spelartrupp WHERE ID = " & Request("Kontakta") & " "
RS.Open Texter, Connect, adOpenStatic, adLockOptimistic
JMail.AddRecipient RS("SMS") & "@esms.nu"
' Dim MyArray, MyRSCount
' MyArray = RS.GetRows
' MyRSCount = RS.RecordCount
RS.Close
Set RS = Nothing
Next
Connect.Close
Set Connect = Nothing
JMail.Subject = ""
JMail.Body = Request("Meddelande")
JMail.Priority = 3
JMail.Send( "mail.domain.com" )
%>
</code>
Formulärsidan ser ut så här:
<code>
<FORM METHOD="POST" NAME="myForm" ACTION="smssend.asp">
<table border="0" cellspacing="0" cellpadding="0" width="100%">
<tr>
<%
Set Connect = Server.CreateObject("ADODB.Connection")
DSNName = "DRIVER={Microsoft Access Driver (*.mdb)};"
DSNName = DSNName & "DBQ=" & Server.MapPath("databas.mdb")
Connect.Open DSNName
Set RS = Server.CreateObject("ADODB.Recordset")
SQL = "SELECT ID,FNAMN,ENAMN,PERSONNR FROM spelartrupp WHERE Truppmedlem = 1 AND SMS <> Null ORDER BY Left(PERSONNR, 2) DESC, ENAMN ASC, FNAMN ASC"
RS.Open SQL, Connect, 3, 1
Dim MyArray, MyRSCount
MyArray = RS.GetRows
MyRSCount = RS.RecordCount
RS.Close
Connect.Close
Set RS = Nothing
Set Connect = Nothing
Dim i, Antal
i = 0
Antal = 0
Do Until Antal = MyRSCount
If i < 3 Then
%>
<td width="265"><input type="checkbox" value="<%= MyArray(0,Antal) %>" name="Kontakta"><%= MyArray(1,Antal) %> <%= MyArray(2,Antal) %>, <%= Left(MyArray(3,Antal), 2) %> </td>
<%
i = i + 1
Else
%>
</tr>
<tr>
<%
i = 0
End If
Antal = Antal + 1
Loop
set MyArray=Nothing
set MyRSCount=Nothing
%>
</tr>
</table>
<BR>
Meddelande (Max. 150 tecken):<BR>
<TEXTAREA NAME="Meddelande" COLS="40" ROWS="5"></TEXTAREA>
<BR>
<INPUT TYPE="submit" VALUE="Skicka SMS">
</FORM>
</code>Sv: Hur delar jag upp multipla formulärdata för matchning mot en datab
Isf:
<code>
KontaktThis = REPLACE(TRIM(Request.Form("Kontakta")),", ",",")
</code>
Sen efter varje loop:
<code>
KontaktThisOne = LEFT(KontaktThis,InStr(KontaktThis,",")-1)
KontaktThis = RIGHT(KontaktThis,LEN(KontaktThis) - InStr(KontaktThis,","))
Texter = "SELECT SMS FROM spelartrupp WHERE ID = " & KontaktThisOne & " "
RS.Open Texter, Connect, adOpenStatic, adLockOptimistic
</code>Sv: Hur delar jag upp multipla formulärdata för matchning mot en datab
<code>
<!-- #include file="../adovbs.inc" -->
<%
Dim vTemp
Dim strIN
Dim strSQL
Dim JMail
Dim Connect
For Each vTemp In Request.Form("Kontakta")
If IsNumeric("" & vTemp) Then
strIN = strIN & ", " & vTemp
End If
Next
If Len(strIN) > 0 Then
Set JMail = Server.CreateObject("JMail.Message")
JMail.From = "epost@domain.com"
JMail.FromName = "Coach"
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "DRIVER={Microsoft Access Driver (*.mdb)};" & _
"DBQ=" & Server.MapPath("databas.mdb")
Set RS = Server.CreateObject("ADODB.Recordset")
RS.Open "SELECT SMS" & vbCrLf & _
"FROM spelartrupp" & vbCrLf & _
"WHERE ID IN (" & Mid(strIN, 3) & ")" , Connect
Do Until RS.EOF
JMail.AddRecipient RS("SMS") & "@esms.nu"
RS.MoveNext
Loop
RS.Close
Set RS = Nothing
Connect.Close
Set Connect = Nothing
JMail.Subject = ""
JMail.Body = Request("Meddelande")
JMail.Priority = 3
JMail.Send "mail.domain.com"
Else
Response.Write "<h3>Du har inte markerat några poster</h3>"
End If
%>
</code>
Detta är ett mycket effektivare sätt att göra det på!Sv: Hur delar jag upp multipla formulärdata för matchning mot en datab
Sv: Hur delar jag upp multipla formulärdata för matchning mot en datab
Dessutom kontrollerar jag värdet som skickas för att hindra SQL inject.