Avatar billede fcknet Nybegynder
24. oktober 2003 - 15:11 Der er 13 kommentarer og
1 løsning

Nye posts

Hejsa...

Jeg har et forum og jeg vil gerne have bygget en funktion på som kan vise nye posts...

Jeg vil bare have en funktion som viser "Ny" hvis der er nye beskeder som ikke er læst eller siden der sidst blev trykket "Marker alle som læst"...

Problemet er at jeg ikke ved hvordan jeg skal opbygge denne funktion... Rent struktur-mæssigt.

Nogen som kan give mig et hint til hvordan jeg skal opbygge det her system? Jeg kan godt selv klare programmeringen.
Avatar billede r_brejnholt Nybegynder
24. oktober 2003 - 15:17 #1
Hvis ALLE brugere skal have denne funktion tilgængelig er der forskellige muligheder:

- Cookie: Dataene gemmes som cookie på brugerens maskine ( laest[34]=1, laest[45]=1) og så brug (if (isset($least[$id])) { læst...} else{ ikke læsest }
og så sætte dem  når brugeren ser dem
ELLER:
- Login-data: Hvis brugerne skal logge ind for at skrive, kan du jo gemme hvilke poster læseren har set i database sammen med brugerne (riiimelig mange poster i en tabel som så hedder
|usrid as int|laest as int|
- og så joine dataene med brugerid'ene
Avatar billede Slettet bruger
24. oktober 2003 - 15:20 #2
Hvad med noget i stil med det her:

id    post_id    bruger_id    laest


Og så sætte en værdi ind her hver gang en bruger har læst en besked.

id er bare en autonummerering, post_id henviser til den post som det drejer sig om, bruger_id er brugerens id, og laest er bare 1
Avatar billede fcknet Nybegynder
24. oktober 2003 - 15:20 #3
Det skal kun være for brugere som er logget ind...
Avatar billede fcknet Nybegynder
24. oktober 2003 - 15:22 #4
Jeg har for noget tid skrevet en funktion til at gemme hvornår en bruger har læst et post. Den gemmer i denne form: "<1>;<2>;" osv.. hvor 1 og 2 er brugerid...
Problemet er at den bliver tømt når der er nogen som svarer, men jeg kan vel bare lave en kopi til at feltet, og så den ikke bliver slettet.
Avatar billede r_brejnholt Nybegynder
24. oktober 2003 - 15:25 #5
- og hvis du ikke gider have krydsrelaterede elementer i enkelte mysql-forespørgsler kan du jo også lægge brugerdataene ind som en kommaadskilt streng for brugeren i et tekstfelt og splitte det op i en array og køre is_in_array i PHP for hvert login og gemme den i en session (men det er ikke den "rigtige" måde). Men bedste løsning må være som ovenstående

mysql-tabellen kommer i dette tilfælde til at ligne noget alá

Brugere:
usrid|navn|password|osv
1|PoulNyrup|123|andet
2|AnderFogh|34|andet

Indlæg:
id|titel|indhold


Hvis PoulNyrup så læser artikel 5 sættes:

Læstdata:
usrid|artikelid
1|5

- Resultatet i mysql-db'en hvis AndersFogh læser indlæg med id 78 bliver samlede læstdata til:

usrid|artikelid
1|5
2|78
Avatar billede fcknet Nybegynder
24. oktober 2003 - 15:28 #6
Det er vist den måde jeg har haft fat i der er den smarteste, ikke!?
Avatar billede r_brejnholt Nybegynder
24. oktober 2003 - 15:28 #7
- og hvis du skulle få lyst kan du indsætte autodata i læstdata-tabellen, og så køre statistik over hvem der har læst hvilken artikel for første gang hvornår...:)
Avatar billede fcknet Nybegynder
24. oktober 2003 - 15:29 #8
hehe
Avatar billede r_brejnholt Nybegynder
24. oktober 2003 - 15:36 #9
Din metode BURDE fungere ganske OK - og du kan jo bare opdatere læstfeltet med ("SET laest=CONCATE(laest,$data) wHERE...") når du opdaterer - jeg kan ikke forstå hvorfor den forsvinder. MEN Problemet med at lægge dataene ind som kommaaskilt streng som dette er, at man så skal lave en masse strengmanipulation med PHP - specielt hvis man skal "markere som ulæst" skal man hente det hele ind som array, og så slette et element, lægge det hele tilbage som tekststreng og stoppe det hele ind i db'en igen
Desuden skal dataene lægges i et tekst-felt i mysql-db'en- dvs. man får færre muligheder for at udbygge systemet med f.eks. førnævnte BigBrother-statistik mm. som kan være meget lærerig - "hvem har læst flest artikler i dag " og sådannoget...
Avatar billede fcknet Nybegynder
24. oktober 2003 - 15:39 #10
Nu har jeg lavet så den indsætter BrugerID i databasen...

Problemet er nu at jeg er bange for at det vil tage forfærdeligt lang tid at parse
Avatar billede r_brejnholt Nybegynder
24. oktober 2003 - 16:15 #11
Forespørgslerne KAN tage lang tid, hvis de bliver skrevet bøvlet, men man skal kunne joine dem (ved ikke helt lige hvordan lige nu)
Det er vistnok noget med leftjoin, som du så skal bruge i forespørgslen på hentning af dine indlæg
http://www.mysql.com/doc/en/JOIN.html


- ellers kan du jo bare vælge amatørmetoden (som jo nok er lidt langsommere)

function ischk($usrid,$id) {
$r=mysql_fetch_array(mysql_query("SELECT count(*) as antal FROM laest WHERE usrid='$usrid' AND articleid='$id' LIMIT 1"))
if ($r["antal"]>0)
return(true);
else
return(false);
}

når du så kører dataene:

while ($r=mysql_fetch_array($q)) {
if (ischk($_SESSION["loginid"],$r["id"]))
echo "<b>læstitem</b>";
else
echo "Ikke læst";

}
Avatar billede fcknet Nybegynder
29. november 2003 - 12:39 #12
Det hele kører nu uden problemer på fcknet.dk
Jeg brugte modellen med at lave et felt i hvert post som satte ID ind på den bruger som læste beskeden.

Nu bliver det spændende at se hvor meget det kommer til at fylde når der er 300 brugere som har læst 3000 forskellige forum posts :)
Avatar billede fcknet Nybegynder
25. december 2003 - 17:15 #13
Skal jeg selv tage pointsne eller....`??????
Avatar billede fcknet Nybegynder
07. januar 2004 - 17:53 #14
Når I ikke svarer tager jeg dem selv...
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
Vi tilbyder markedets bedste kurser inden for webudvikling

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