Avatar billede totalpc Seniormester
21. maj 2008 - 15:32 Der er 9 kommentarer og
1 løsning

avanceret sql - softspot har hjulpet indtil nu

i forbindelse med http://www.eksperten.dk/spm/823727
har jeg fået testet lidt mere.
Den sender stadig til for mange.
En lille test hvor den skulle sende til 1, nemlig opretter af blog indlæg sender den både til opretter og blogindlæg og ham der lige har skrevet kommentaren. Den skal skrive til alle undtagen ham der selv har skrevet indlægget.

<!--#include file="db.inc"-->
<%

aktiv="nej"

ID = Request.QueryString("id")

strsql = "SELECT blu.*, bl.overskrift " & _
"FROM ( " & _
  "SELECT u1.email, u1.brugernavn, b.id AS blogid " & _
  "FROM blog b " & _
  "INNER JOIN bruger u1 ON u1.brugernavn = b.forfatter " & _
  "WHERE b.id = " & ID & " " & _
  "AND u1.send_email = true " & _
"UNION " & _
  "SELECT u2.email, u2.brugernavn, k.blogid AS blogid " & _
  "FROM kommentar k " & _
  "INNER JOIN bruger u2 ON u2.brugernavn = k.forfatter " & _
  "WHERE k.blogid = " & ID & " " & _
  "AND u2.send_email = true " & _
") blu " & _
"INNER JOIN blog bl ON bl.id = blu.blogid "

'response.write strsql

set rs = Conn.Execute(strSQL)
num = 0
    while not rs.eof
    if rs("email") <> "" then
        Set JMail = Server.CreateObject("JMail.SMTPMail")
                JMail.ServerAddress = "localhost"
        JMail.ContentType = "text/html"
                JMail.Charset = "iso-8859-1"
                JMail.ContentTransferEncoding = "8bit"
                JMail.Sender = "robot@familiencaroe.dk"
                JMail.Subject = "Der er en ny kommentar til en nyhed du deltager i på familiencaroe.dk"
                JMail.AddRecipient rs("email")
                JMail.HTMLBody = "Hej"
                JMail.HTMLBody = "Hej "& rs("brugernavn") & "<br><br>Der er en ny kommentar til nyheden <b><i>" & rs("overskrift") &"</b></i> som du deltager i.<br>Log på <a

href=""http://v0011cvc/default.asp?sitepage=blogview_indlag&id="&id&""">http://www.familiencaroe.dk</a> og se kommentaren.<br><br>Mvh Kristian"
                JMail.Silent = True
                JMail.Logging = True
                JMail.Priority = 3
                If aktiv="ja" then
                    JMail.Execute
                  End if

response.write jmail.log


sWrite="<pre>" & JMail.Log & "</pre>"
sWrite=sWrite&rs("email")
sWrite=sWrite&"<br>"
sWrite=sWrite&JMail.ServerAddress
sWrite=sWrite&"<br>"
sWrite=sWrite&jmail.htmlbody
sWrite=sWrite&"<br>"

Response.Write sWrite
Conn.Execute("INSERT INTO [log] ([log],logtype) VALUES ('"&Replace(sWrite,"'","''")&"','kommentar_send_email')")

 
              set JMail = nothing
    else
    End If
  num = num + 1 ' tilføjer 1 til varariablen for hvert gennemløb
          rs.MoveNext
          Wend
          Response.write "<span class='text' align='center'>Nyhedsmailen blev sendt til <b>" & num & " </b> brugere<br>"
         
'Reset server objects
Conn.Close
Set Conn = Nothing
Set rs  = Nothing


'Response.Redirect "default.asp?sitepage=blogview_indlag&id=" & id


%>



Giver :

krc@xxx.dk
localhost
Hej Test

Der er en ny kommentar til nyheden Ny test som du deltager i.
Log på http://www.familiencaroe.dk og se kommentaren.

Mvh Kristian


kri@privat.dk
localhost
Hej Kristian

Der er en ny kommentar til nyheden Ny test som du deltager i.
Log på http://www.familiencaroe.dk og se kommentaren.

Mvh Kristian
Nyhedsmailen blev sendt til 2 brugere

Men den skulle kun skrive til den første, for nr2 er ham der lige har oprettet kommentaren.
Avatar billede softspot Forsker
21. maj 2008 - 15:59 #1
Hvordan er det nu lige vi får fat i identifikationen af den der sender kommentaren, for det er nødvendigvis den oplysning der skal bruges for at kunne udelukke denne bruger fra modtagerlisten...?
Avatar billede totalpc Seniormester
21. maj 2008 - 20:03 #2
Der var du jo, dejligt :) Nu skal jeg nok følge den til dørs denne gang :)
Jamen .. den der indtaster kommentarer har jeg i en session("brugernavn") fx.
Avatar billede softspot Forsker
21. maj 2008 - 21:42 #3
Umiddelbart ville jeg jo mene at den aktuelle bruger kunne ekskluderes fra resultatet ved at tilføje ham (m/k) til SQL-sætningen således:

strsql = "SELECT blu.*, bl.overskrift " & _
"FROM ( " & _
  "SELECT u1.email, u1.brugernavn, b.id AS blogid " & _
  "FROM blog b " & _
  "INNER JOIN bruger u1 ON u1.brugernavn = b.forfatter " & _
  "WHERE b.id = " & ID & " " & _
  "AND u1.send_email = true " & _
"UNION " & _
  "SELECT u2.email, u2.brugernavn, k.blogid AS blogid " & _
  "FROM kommentar k " & _
  "INNER JOIN bruger u2 ON u2.brugernavn = k.forfatter " & _
  "WHERE k.blogid = " & ID & " " & _
  "AND u2.send_email = true " & _
  "AND u2.brugernavn <> '" & replace(session("brugernavn")&"","'","''") & "' " & _
") blu " & _
"INNER JOIN blog bl ON bl.id = blu.blogid "

Dette burde så kun fjerne vedkommende fra listen af brugere der skal have mails, hvis de sender en kommentar. Benyttes denne kode også til at sende selve hovedindlæget, så vil brugeren stadig selv få en mail... men du kan måske lure teknikken fra opslaget i kommentartabellen ;-)).
Avatar billede totalpc Seniormester
21. maj 2008 - 23:24 #4
Det virker i hvert fald. Jeg tester lige videre i morgen formiddag med andre kombinationer af flere brugere!
Avatar billede totalpc Seniormester
22. maj 2008 - 10:29 #5
Jeg har lavet et lille test senarie og der kommer en fejl når opretter laver en ny kommentar. Så sender den stadig mail til ham. Se her:
http://familiencaroe.dk/fejl.jpg
Avatar billede softspot Forsker
22. maj 2008 - 10:43 #6
Ja, det tror jeg er på grund af, at opretter selv jo findes i blog-tabellen, så der skal den kommenterende bruger også ekskluderes fra udtrækket fra blog-tabellen. Det må så betyde at din SQL skal se ud som følger:

strsql = "SELECT blu.*, bl.overskrift " & _
"FROM ( " & _
  "SELECT u1.email, u1.brugernavn, b.id AS blogid " & _
  "FROM blog b " & _
  "INNER JOIN bruger u1 ON u1.brugernavn = b.forfatter " & _
  "WHERE b.id = " & ID & " " & _
  "AND u1.send_email = true " & _
  "AND u1.brugernavn <> '" & replace(session("brugernavn")&"","'","''") & "' " & _
"UNION " & _
  "SELECT u2.email, u2.brugernavn, k.blogid AS blogid " & _
  "FROM kommentar k " & _
  "INNER JOIN bruger u2 ON u2.brugernavn = k.forfatter " & _
  "WHERE k.blogid = " & ID & " " & _
  "AND u2.send_email = true " & _
  "AND u2.brugernavn <> '" & replace(session("brugernavn")&"","'","''") & "' " & _
") blu " & _
"INNER JOIN blog bl ON bl.id = blu.blogid "
Avatar billede totalpc Seniormester
22. maj 2008 - 10:53 #7
damn mand... jeg kan slet ikke holde logikken fast, når jeg kigger på det der... Men klasse siger jeg bare... Min test senarie blev udvidet og den gør hvad der er meningen. Så der er vel bare at sige.. Endnu en gang mange tak for hjælpen. Smid er svar!
Avatar billede softspot Forsker
22. maj 2008 - 13:48 #8
Velbekomme :)
Avatar billede softspot Forsker
22. maj 2008 - 13:57 #9
Tak for point :)
Avatar billede totalpc Seniormester
22. maj 2008 - 14:12 #10
tak for hjælpen
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