Jag har skapat en formulärsida som listar upp ett antal poster ur en databas till en egen checkbox för varje post. Tjena Micke! Hej, Tackar...det fungerade. Ush!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>
Databas: Access 2002 (XP)
Plattform: ASP
Språk: VBSv: Hur delar jag upp multipla formulärdata för matchning mot en datab
Du kanske kan använda Split. Eftersom ID:na är separerade med kommatecken kan du dela upp dom i en array med Split-funktionen.
strID = Request.Form("Kontakta")
arrayID = Split(strID, ",")
Sen kan du stega igenom denna array och hämta adressen för varje ID.
SvenneSv: Hur delar jag upp multipla formulärdata för matchning mot en datab
Eller en for each-loop:
<code>
Set JMail = Server.CreateObject("JMail.Message")
JMail.From = "epost@domain.com"
JMail.FromName = "Coach"
For each kontaktID in Request.Form("Kontakta")
Set RS = Server.CreateObject("ADODB.Recordset")
Texter = "SELECT SMS FROM spelartrupp WHERE ID = " & kontaktID & " "
RS.Open Texter, Connect, adOpenStatic, adLockOptimistic
JMail.AddRecipient RS("SMS") & "@esms.nu"
RS.Close
Set RS = Nothing
Next
Connect.Close
Set Connect = Nothing
</code>
/JockeSv: Hur delar jag upp multipla formulärdata för matchning mot en datab
Tänk så enkelt det kan vara bara man tänker efter lite.Sv: Hur delar jag upp multipla formulärdata för matchning mot en datab
Du kan ju lösa det med en SQL sats. Tänk oxå på att skydda mot infogande av egna SQL vilkor:
<code>
<!-- #include file="../adovbs.inc" -->
<%
Dim rs
Dim Connect
Dim varTemp
Dim strIN
Dim strSQL
For Each varTemp In Request.Form("Kontakta")
If IsNumeric("" & varTemp) Then
strIN = strIN & ", " & strIN
Response.Write varTemp & "<br>" & vbCrLf
Else
Response.Write "[Not OK]" & varTemp & "<br>" & vbCrLf
End If
End If
If Len(strIN) > 0 Then
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Server.MapPath("databas.mdb") & ";"
strSQL = "SELECT SMS" & vbCrLf & _
"FROM spelartrupp" & vbCrLf & _
"WHERE ID IN " & Mid(strIN, 3)
Set RS = Server.CreateObject("ADODB.Recordset")
RS.Open strSQL, Connect
If RS.EOF Then
Response.write "Inga mottager funna!"
Else
Set JMail = Server.CreateObject("JMail.Message")
JMail.From = "epost@domain.com"
JMail.FromName = "Coach"
JMail.Subject = ""
JMail.Body = Request("Meddelande")
JMail.Priority = 3
Do Until RS.EOF
JMail.AddRecipient RS("SMS") & "@esms.nu"
End If
JMail.Send "mail.domain.com"
End If
RS.Close
Set RS = Nothing
Connect.Close
Set Connect = Nothing
Else
Response.write "Du har inte markerat några mottagare!"
End If
%>
</code>