Avatar billede MrGold Nybegynder
20. december 2009 - 12:40 Der er 15 kommentarer og
1 løsning

Intern mail-system / ASP / Acces

Jeg har fået lavet et lille community-system med funktionerne: Opret bruger, Se alle brugere og et login. Nu sidder jeg og bikser med et intern mail-system hvori bruger som er logget ind kan skrive til hinanden. Jeg har min acces-database (databse.mdb) hvori der er følgende:

Tabeller: Bruger, Mail

I (bruger) har jeg felterne: UserID (auto), profil, adgangskode, email.

og i (mail) har jeg felterne: MailID (auto), til, fra, emne, besked, læst.

Når en bruger har oprettet sin profil kan han/hun ved siden (default.asp) logge sig ind, hvorefter de lander på (dinside.asp)
kildekoden til dinside.asp er følgende:
----------------------------------------

<!--#include file="protect.inc"-->
  <%
' Databaseforbindelse - husk at angive sti til din database
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("database.mdb")
Conn.Open DSN

strSQL = "Select * From bruger Where UserID = " & Request.Querystring("UserID")
Set rs = Conn.Execute(strSQL)

response.write "<b>Velkommen:</b> " & rs("profil") & "<br>"
response.write "<a href='medlemmer.asp?UserID=" & rs("UserID") & "'>[ SØG ALLE PROFILER ]</a><br>"

'strSQL = "Select * From mail Where mailID = " & Request.Querystring("UserID")

response.write "<a href='mail.asp?UserID=" & rs("UserID") & "'>" & "Du har " & rs("Hvor mange mails man har?") & " beskeder i din anbakke</a>"



' Luk databaseforbindelse
Conn.Close
Set Conn = Nothing
%>
----------------------------------------

Mit spørgsmål:
Som i kan se har jeg prøvet selv at formulere sætningen til at udskrive et link der skal sige, eksempvis: "Du har 9 beskeder i indbakken" Og linket skal så åbne siden (mail.asp)

Nogen der kan hjælpe mig med at lave den rigtige sætning, og selve postsystemet på siden (mail.asp) Og kunne forestille mig, at man skal lave relationer i selve databasen mellem tabellerne: bruger og mail?

På forhånd tak
Avatar billede claes57 Ekspert
20. december 2009 - 13:31 #1
et par ting.
Til-feltet i (mail) skal indeholde UserId på modtager, og fra-feltet tilsvarende userid på afsender.
Læst skal være et ja/nej felt.


sSQL="SELECT COUNT(*) as ccount from  mail Where TIL = " & Request.Querystring("UserID") & " and læst=false"
set rs2=conn.execute(sSQL)

response.write "<a href='mail.asp?UserID=" & rs("UserID") & "'>" & "Du har " & rs2("ccount") & " beskeder i din indbakke</a>"
Avatar billede MrGold Nybegynder
20. december 2009 - 13:55 #2
Hvordan gør jeg så, at Til-feltet og fra-feltet indeholder UserID? Er det relationerne jeg skal ind og få til at passe, for det har jeg prøvet, og så kommer den med fejlmeddelelse. Ved ikke om jeg gør det korrekt.
Avatar billede MrGold Nybegynder
20. december 2009 - 13:59 #3
Når, du mener jeg skal lave et felt der hedder UserID Fra og UserID Til i tabellen mail?.. prøver det ihvertfald lige af :)
Avatar billede claes57 Ekspert
20. december 2009 - 14:37 #4
Feltet FRA skal indeholde en entydig adresse på afsender, og det er kun UserID på afsender (brugernavn osv kan vel rettes af bruger i en relevant side).
Tilsvarende med feltet TIL

På det sted, hvor bruger sender en mail til en anden, så vælger han vel modtager fra en liste over brugere - er det en combo-boks, så kan 'value' indeholder UserID, og teksten brugernavnet - fx
<select name="modtagere">
  <option value="1">admin</option>
  <option value="2">sigurd48</option>
  <option selected value="3">MrGold</option>
</select>
listen dannes med asp-udtræk af (bruger) tabellen
Så har du UserID på den valgte (sættes i TIL-feltet), og den, der er logget ind kender du jo i forvejen (han skal stå i FRA-feltet)
Avatar billede MrGold Nybegynder
24. december 2009 - 14:03 #5
Ok, nu er jeg begyndt at forstå princippet i det.. og har fået gjort sådan at medlemmer nu kan sende mails til hinanden.
Altså har fået lavet funktion hvor eksempelvis bruger1 kan sende en mail til bruger2

Men har lidt problemer med at lave den funktion du har postet hvor man kan se sine mails, her er koden jeg bikser med:
----------------------------------------------------------

<!--#include file="protect.inc"-->
  <%
' Databaseforbindelse - husk at angive sti til din database
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("database.mdb")
Conn.Open DSN

strSQL = "Select * From bruger Where UserID = " & Request.Querystring("UserID")
Set rs = Conn.Execute(strSQL)

response.write "<b>Velkommen:</b> " & rs("profil") & "<br>"
response.write "<a href='medlemmer.asp?UserID=" & rs("UserID") & "'>[ SØG ALLE PROFILER ]</a><br>"

sSQL="SELECT COUNT(*) as ccount from  mail Where TIL = " & Request.Querystring("UserID") & " and læst=false"
set rs2=conn.execute(sSQL)

response.write "<a href='mail.asp?UserID=" & rs("UserID") & "'>" & "Du har " & rs2("ccount") & " beskeder i din indbakke</a>"


' Luk databaseforbindelse
Conn.Close
Set Conn = Nothing



%>
Avatar billede MrGold Nybegynder
27. december 2009 - 16:20 #6
!bump!
Avatar billede claes57 Ekspert
28. december 2009 - 14:28 #7
feltet
læst
lav det om til et heltalsfelt, og default til 0
så bruger vi 0 for 'ikke læst mail' og 1 til læst.
ret linjen
sSQL="SELECT COUNT(*) as ccount from  mail Where TIL = " & Request.Querystring("UserID") & " and læst=false"
til
sSQL="SELECT COUNT(*) as ccount from  mail Where TIL = " & Request.Querystring("UserID") & " and læst=0"

brugeren (dvs modtager) skal på sin side have mulighed for at markere, at mail er læst, og dermed at værdien i læst sættes til 1
Avatar billede MrGold Nybegynder
29. december 2009 - 15:06 #8
Jeg har gjort som du har skrevet, men den giver mig stadig fejl, min side ser sådan ud:
----------------------------

<!--#include file="protect.inc"-->
  <%
' Databaseforbindelse - husk at angive sti til din database
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("database.mdb")
Conn.Open DSN

strSQL = "Select * From bruger Where UserID = " & Request.Querystring("UserID")
Set rs = Conn.Execute(strSQL)

response.write "<b>Velkommen:</b> " & rs("profil") & "<br>"
response.write "<a href='medlemmer.asp?UserID=" & rs("UserID") & "'>[ SØG ALLE PROFILER ]</a><br>"


sSQL="SELECT COUNT(*) as ccount from mail Where TIL = " & Request.Querystring("UserID") & " and læst=0"

set rs2=conn.execute(sSQL)

response.write "<a href='mail.asp?UserID=" & rs("UserID") & "'>" & "Du har " & rs2("ccount") & " beskeder i din indbakke</a>"


' Luk databaseforbindelse
Conn.Close
Set Conn = Nothing

%>
Avatar billede claes57 Ekspert
29. december 2009 - 15:56 #9
hvilken fejl-kode/tekst?
Jeg gider ikke gætte i al evighed.
Avatar billede MrGold Nybegynder
29. december 2009 - 16:42 #10
den siger bare: An error occurred on the server when processing the URL. Please contact the system administrator.
If you are the system administrator please click here to find out more about this error.
Avatar billede claes57 Ekspert
29. december 2009 - 16:59 #11
og da du er dig, så klik ved ordet 'here'
If you are the system administrator please click here to find out more about this error.

du kan også lige udskifte
set rs2=conn.execute(sSQL)
med
response.write "<hr>" & sSQL & "<hr>"

så får du kaldet skrevet ud på svarsiden - denne linje kopiere du så også herind, tak.
Avatar billede MrGold Nybegynder
29. december 2009 - 20:56 #12
Nu siger den:
----------------

Velkommen: admin
[ SØG ALLE PROFILER ]

--------------------------------------------------------------------------------
SELECT COUNT(*) as ccount from mail Where TIL = 1 and læst=0
--------------------------------------------------------------------------------
An error occurred on the server when processing the URL. Please contact the system administrator.
If you are the system administrator please click here to find out more about this error.
Avatar billede MrGold Nybegynder
29. december 2009 - 21:06 #13
Okay, fandt ud af hvordan jeg gjorde så den viser selve fejlen.. nu siger den:
---------------
Velkommen: admin
[ SØG ALLE PROFILER ]

Microsoft OLE DB Provider for ODBC Drivers fejl '80040e07'

[Microsoft][ODBC Microsoft Access-driver] Datatyperne stemmer ikke overens i kriterieudtrykket.

/dinside.asp, linje 19
------------------------------

Linje 19 er: set rs2=conn.execute(sSQL)
Avatar billede claes57 Ekspert
29. december 2009 - 21:18 #14
dine to data
TIL = 1
læst=0
mindst den ene af dem har du oprettet som tekst.
Når det er tekst, så skal der ' omkring værdien - dvs
sSQL="SELECT COUNT(*) as ccount from mail Where TIL = '" & Request.Querystring("UserID") & "' and læst='0'"
eller
sSQL="SELECT COUNT(*) as ccount from mail Where TIL = '" & Request.Querystring("UserID") & "' and læst=0"
eller
sSQL="SELECT COUNT(*) as ccount from mail Where TIL = " & Request.Querystring("UserID") & " and læst='0'"

en af dem skal virke.
Avatar billede MrGold Nybegynder
29. december 2009 - 21:26 #15
Perfekt, nu virker det :) Tak for hjælpen, du smider bare et svar :)
Avatar billede claes57 Ekspert
30. december 2009 - 11:25 #16
ok - husk nu forskellen på tal og tekst  (tekst-felter skal have ' omkring data).
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