Avatar billede hifi4all Nybegynder
22. februar 2005 - 23:45 Der er 8 kommentarer og
1 løsning

Annonceagent - j.mail sender via inner join på database

Hej!

Kan nogen hjælpe med min problemstillingen, som er følgende:

Nedenstående script, skal sende mails til række brugere, som har indtastet et til flere søge ord i et felt kaldet KEYWORD i databasen, når der er intastet en nye annonce (som det handler om!)

Jeg har førsøgt mig længe, men er gået helt i står - jeg får fejl i linie 75 (End If???)

Kan nogen venligst være behjælpelig?
På forhånd tak!

Kode:

<!--#include file="Connections/conn.asp" -->
<!--#include file="includes/authorizedUsers.asp" -->
<%
Dim rsProfile__MMColParam
rsProfile__MMColParam = "1"
If (Session("MM_KSBUsername") <> "") Then
  rsProfile__MMColParam = Session("MM_KSBUsername")
End If
%>
<%
Dim rsProfile
Dim rsProfile_numRows

Set rsProfile = Server.CreateObject("ADODB.Recordset")
rsProfile.ActiveConnection = MM_connDUclassified_STRING
rsProfile.Source = "SELECT * FROM USERS WHERE U_ID = '" + Replace(rsProfile__MMColParam, "'", "''") + "'"
rsProfile.CursorType = 0
rsProfile.CursorLocation = 2
rsProfile.LockType = 1
rsProfile.Open()
rsProfile_numRows = 0
%>
<% If NOT rsprofile.EOF And NOT rsprofile.BOF Then %>
<%
'## EMAIL ALERT START
Dim rsAlert__MMColParam
rsAlert__MMColParam = "1"
if (Request.QueryString("id") <> "") then rsAlert__MMColParam = Request.QueryString("id")
Dim vSplit, addEmail, emailComp
vSplit = ","
If (emailComp = 1) OR (emailComp = 6) Then vSplit = ";"

set rsAlert = Server.CreateObject("ADODB.Recordset")
rsAlert.ActiveConnection = MM_conn_STRING
rsAlert.Source = "SELECT * FROM ADS, ALERT INNER JOIN USERS on ALERT.USER = USERS.U_ID WHERE AD_ID = " + Replace(rsAlert__MMColParam, "'", "''") + " AND U_LUKKET = 1 ORDER BY AD_ID DESC"
rsAlert.CursorType = 0
rsAlert.CursorLocation = 2
rsAlert.LockType = 3
rsAlert.Open()
rsAlert_numRows = 0

Dim rsAlert_numRows
rsAlert_numRows = 0
Dim Repeat1__numRows
Repeat1__numRows = -1
Dim Repeat1__index
Repeat1__index = 0
rsAlert_numRows = rsAlert_numRows + Repeat1__numRows
%>

<% While ((Repeat1__numRows <> 0) AND (NOT rsAlert.EOF)) %>

<%
If rsAlert("KEYWORD")="" Then

addEmail = addEmail & rsAlert("U_EMAIL")&vSplit

'ellers check keywords/type i ny annonce
Else

  If rsAlert("TYPE")="1" Then

  MyArray = replace(rsAlert("KEYWORD"), ",", "")
  MyArray = split(MyArray," ")

  For I=0 to Ubound(MyArray)

If rsAlert("BOTH")="y" Then
  If (InStr(1,AD_TITLE,MyArray(I),1) = 0) AND (InStr(1,AD_DESCRIPTION,MyArray(I),1) = 0) Then Exit For
  If I = Ubound(MyArray) Then addEmail = addEmail & rsAlert("U_EMAIL")&vSplit
ElseIf rsAlert("BOTH")<>"y" Then
  If (InStr(1,AD_TITLE,MyArray(I),1) = 0) Then Exit For
  If I = Ubound(MyArray) Then addEmail = addEmail & rsAlert("U_EMAIL")&vSplit
End If
End If

End if
%>
<%
  Repeat1__index=Repeat1__index+1
  Repeat1__numRows=Repeat1__numRows-1
  rsAlert.MoveNext()
Wend
%>
<%
'indeholder alle mails
If addEmail <> "" Then
addEmail = Left(addEmail, Len(addEmail) - 1)

Dim msgTo, msgBcc, msgSubject, msgBody
            msgTo = "noreply_KSB@mitdomæne.dk"
            msgBcc = addEmail
            msgSubject = "Annonce Alarm "
              msgBody = "Der er kommet en ny annonce der opfinde de kriterier du har opsat i din annonce agent.<br>klik på linket nedest, for at se annoncen" & vbCrLf & vbCrLf
            msgBody = msgBody & URL HER&"details.asp?type="&Request.QueryString("type")"&id="&Request.QueryString("id") & vbCrLf & vbCrLf
            msgBody = msgBody &webName & vbCrLf
%>
<!--#include file="mail.asp" -->
<%
  Call SendMail(emailComp)
End If
rsAlert.close
set rsAlert = nothing
%>
Avatar billede kjulius Novice
23. februar 2005 - 00:23 #1
For I=0 to Ubound(MyArray)

If rsAlert("BOTH")="y" Then
  If (InStr(1,AD_TITLE,MyArray(I),1) = 0) AND (InStr(1,AD_DESCRIPTION,MyArray(I),1) = 0) Then Exit For
  If I = Ubound(MyArray) Then addEmail = addEmail & rsAlert("U_EMAIL")&vSplit
ElseIf rsAlert("BOTH")<>"y" Then
  If (InStr(1,AD_TITLE,MyArray(I),1) = 0) Then Exit For
  If I = Ubound(MyArray) Then addEmail = addEmail & rsAlert("U_EMAIL")&vSplit
End If
End If

If ovenstående kodesektion synes der at mangle en "Next I" instruktion.
Avatar billede hifi4all Nybegynder
23. februar 2005 - 00:30 #2
Hej kjulius

Du har ret - jeg forsøger mig lige frem.
Men kom endelig med forslag, såfremt der er nogen der kan genneskue mit problem?

Tak igen! :O)
Avatar billede kjulius Novice
23. februar 2005 - 00:48 #3
Hmm... Lidt kryptisk kommentar. Det hjalp dig ikke af med fejlen, eller...? Det ku' ellers godt lyde som om det var, fordi du ikke havde den next med, at du fik en fejl, når den nåede ned til den efterfølgende End If.

Eller var det ikke fejlen, men funktionen generelt, du ønsker hjælp til?
Avatar billede hifi4all Nybegynder
23. februar 2005 - 00:58 #4
Beklager - det var ikke ment sådan.
Det er faktisk funktionen genrelt jeg gerne vil have hjælp til!

Beklager, hvis jeg har udtrykt mig forkert!!!

Anyway, nu har jeg tilføjet "next - kode" til ovenstånde, men nusynes min inner join af være den der fejler - eller hele connection til database?

Foregående fejl er i hvert fald ikke længere eksisterende!

Fejlen er nu:
Microsoft JET Database Engine error '80040e10'
No value given for one or more required parameters.
/ksb/done.asp, line 54

Ny kode:

<!--#include file="Connections/conn.asp" -->
<!--#include file="includes/authorizedUsers.asp" -->
<%
Dim webName
Dim website
Dim weburl
Dim emailComp
Dim msgFrom
Dim emailhost

webName  =  "mit domæne"
website  =  "min webadresse"
weburl  =  "direkte url"
emailComp  = 5
msgFrom  =  "email@domæne.dk"
emailhost  = "mail.xx.dk"
%>
<%
Dim rsProfile__MMColParam
rsProfile__MMColParam = "1"
If (Session("MM_KSBUsername") <> "") Then
  rsProfile__MMColParam = Session("MM_KSBUsername")
End If
%>
<%
Dim rsProfile
Dim rsProfile_numRows

Set rsProfile = Server.CreateObject("ADODB.Recordset")
rsProfile.ActiveConnection = MM_conn_STRING
rsProfile.Source = "SELECT * FROM USERS WHERE U_ID = '" + Replace(rsProfile__MMColParam, "'", "''") + "'"
rsProfile.CursorType = 0
rsProfile.CursorLocation = 2
rsProfile.LockType = 1
rsProfile.Open()
rsProfile_numRows = 0
%>
<% If NOT rsprofile.EOF And NOT rsprofile.BOF Then %>
<%
'## EMAIL ALERT START
Dim rsAlert__MMColParam
rsAlert__MMColParam = "1"
if (Request.QueryString("id") <> "") then rsAlert__MMColParam = Request.QueryString("id")
Dim vSplit, addEmail
vSplit = ","
If (emailComp = 1) OR (emailComp = 6) Then vSplit = ";"

set rsAlert = Server.CreateObject("ADODB.Recordset")
rsAlert.ActiveConnection = MM_conn_STRING
rsAlert.Source = "SELECT * FROM ADS, ALERT INNER JOIN USERS on ALERT.USERS = USERS.U_ID WHERE AD_ID = " + Replace(rsAlert__MMColParam, "'", "''") + " AND U_LUKKET = 1 ORDER BY AD_ID DESC"
rsAlert.CursorType = 0
rsAlert.CursorLocation = 2
rsAlert.LockType = 3
rsAlert.Open()
rsAlert_numRows = 0

Dim rsAlert_numRows
rsAlert_numRows = 0
Dim Repeat1__numRows
Repeat1__numRows = -1
Dim Repeat1__index
Repeat1__index = 0
rsAlert_numRows = rsAlert_numRows + Repeat1__numRows
%>

<% While ((Repeat1__numRows <> 0) AND (NOT rsAlert.EOF))

'-If no keywords add email to email message
If rsAlert("KEYWORD")="" Then

addEmail = addEmail & rsAlert("U_EMAIL")&vSplit

'Else check keywords/type to new Ad
Else

  If rsAlert("TYPE")="1" Then

  MyArray = replace(rsAlert("KEYWORD"), ",", "")
  MyArray = split(MyArray," ")

  For I=0 to Ubound(MyArray)

  If NOT InStr(1,AD_TITLE,MyArray(I),1) = 0 Then
  addEmail = addEmail & rsAlert("U_EMAIL")&vSplit
  Exit For
  ElseIf (rsAlert("BOTH")="y") AND (NOT InStr(1,AD_DESCRIPTION,MyArray(I),1) = 0) Then
  addEmail = addEmail & rsAlert("U_EMAIL")&vSplit
  Exit For
  End If

  Next

  ElseIf rsAlert("TYPE")="2" Then

  MyArray = replace(rsAlert("KEYWORD"), ",", "")
  MyArray = split(MyArray," ")

  For I=0 to Ubound(MyArray)

If rsAlert("BOTH")="y" Then
  If (InStr(1,AD_TITLE,MyArray(I),1) = 0) AND (InStr(1,AD_DESCRIPTION,MyArray(I),1) = 0) Then Exit For
  If I = Ubound(MyArray) Then addEmail = addEmail & rsAlert("U_EMAIL")&vSplit
ElseIf rsAlert("BOTH")<>"y" Then
  If (InStr(1,AD_TITLE,MyArray(I),1) = 0) Then Exit For
  If I = Ubound(MyArray) Then addEmail = addEmail & rsAlert("U_EMAIL")&vSplit
End If

  Next

  ElseIf rsAlert("TYPE")="3" Then

  If NOT InStr(1,AD_TITLE,rsAlert("U_EMAIL"),1) = 0 Then
  addEmail = addEmail & rsAlert("U_EMAIL")&vSplit
  ElseIf (rsAlert("BOTH")="y") AND (NOT InStr(1,AD_DESCRIPTION,rsAlert("KEYWORD"),1) = 0) Then
  addEmail = addEmail & rsAlert("U_EMAIL")&vSplit
  End If

  End If

End If
%>
<%
  Repeat1__index=Repeat1__index+1
  Repeat1__numRows=Repeat1__numRows-1
  rsAlert.MoveNext()
Wend
%>
<%
'indeholder alle mails
If addEmail <> "" Then
addEmail = Left(addEmail, Len(addEmail) - 1)

Dim msgTo, msgBcc, msgSubject, msgBody
            msgTo = "noreply_KSB@mitdomæne.dk"
            msgBcc = addEmail
            msgSubject = "Annonce Alarm "
              msgBody = "Der er kommet en ny annonce der opfylder de kriterier du har opsat i din annonce agent.<br>Klik på linket nedest, for at se annoncen" & vbCrLf & vbCrLf
            msgBody = msgBody & weburl&"Annonce.asp?type="&(Request.QueryString("type"))&"&id="&(Request.QueryString("id")) & vbCrLf & vbCrLf
            msgBody = msgBody &webName & vbCrLf

%>
<!--#include file="mail.asp" -->
<%
  Call SendMail(emailComp)
End If
rsAlert.close
set rsAlert = nothing
%>
Avatar billede hifi4all Nybegynder
23. februar 2005 - 01:05 #5
Hov - ALERT.USERSskulle rettes til = ALERT.USER!!!

Siden går fejlfrit igennem, men sender desværre ingen mails!
Nu er det vist J-mail der skal kigges på, eller???

Nogen forlsag?
Avatar billede kjulius Novice
23. februar 2005 - 01:25 #6
rsAlert.Source = "SELECT * FROM ADS, ALERT INNER JOIN USERS on ALERT.USERS = USERS.U_ID WHERE AD_ID = " + Replace(rsAlert__MMColParam, "'", "''") + " AND U_LUKKET = 1 ORDER BY AD_ID DESC"

Ser lidt mærkeligt ud. Du bør ikke mixe formaterne. Enten bør du skrive alle filerne med komma imellem, og specificere tilknytningskriterierne i where delen, eller også bør du specificere alle filerne med INNER JOIN ... ON ...
Her har du specificeret tabellerne ADS og ALERT med komma, for efterfølgende at skrive INNER JOIN til USERS.

Skriv hellere enten:

rsAlert.Source = "SELECT * FROM ADS, ALERT, USERS WHERE ALERT.USERS = USERS.U_ID AND AD_ID = " + Replace(rsAlert__MMColParam, "'", "''") + " AND U_LUKKET = 1 ORDER BY AD_ID DESC"

eller.. - men her opdager jeg, at du slet ikke har noget sammenknytningskriterie mellem tabellerne ADS og ALERT. Er det ikke en fejl?

Desuden, hvis du specificerer *, hvor du bruger flere joinede tabeller, bør du specificere hvilken tabel du mener, f.eks.
SELECT ADS.*, ALERT.*, USERS.* FROM ADS, ALERT, USERS... hvis du vil have alle felter med fra alle tabellerne.

Okay, aner ikke om det hjælper dig, men det er da forsøget værd...
Sengen kalder; jeg er begyndt at se dobbelt, så jeg er vist ikke til megen hjælp for øjeblikket.
Avatar billede hifi4all Nybegynder
23. februar 2005 - 14:37 #7
meningen med denne string, er at ADS kun skal referer til den aktuelle annonce, som specificeres via (Request.QueryString("id"). Der skal så søges efter de keywords, brugeren har indtastet i ALERT (KEYWORD).

Efterfølgende skal ALERT, hvor søgeord matcher med de 2 felter i ADS (AD_TITLE og AD_DESCRIPTION) sende en mail til brugeren, hvor id (USER) i tabellen ALERT er = med email adresse i tyballen USERS felt, U_USERS..

Jeg får ikke længere nogen fejl side, men noget tyder på at det ikke spiller som det skal, da ikke sendes nogen mails.

Jeg har nu forsøgt forskellige SELECT løsninger, men den eneste, som syne at gå igennem er nedenstående - bortset fra det vigtige element, at den ikke sender den forbistrede mails :O(

STRING:
rsAlert.Source = "SELECT * FROM ADS, ALERT INNER JOIN USERS on ALERT.USER = USERS.U_ID WHERE AD_ID = " + Replace(rsAlert__MMColParam, "'", "''") + " AND U_LUKKET = 1 ORDER BY AD_ID DESC"

Al hjælp er meget velkommen!!!!!
På forhånd tak!
Avatar billede hifi4all Nybegynder
23. februar 2005 - 14:42 #8
rsAlert.Source = "SELECT * FROM ADS, ALERT, USERS WHERE ALERT.USERS = USERS.U_ID AND AD_ID = " + Replace(rsAlert__MMColParam, "'", "''") + " AND U_LUKKET = 1 ORDER BY AD_ID DESC"

Gav i øvrigt samme reusltat som ovenstående...
Den går fint igennem, men ingen mail...
Avatar billede hifi4all Nybegynder
18. maj 2005 - 10:26 #9
Lukket
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