StianBak Skrevet 10. september 2007 Del Skrevet 10. september 2007 Holder på å kode et forum fra scratch i PHP og alt har gått knirkefritt helt fram til jeg møtte et problem jeg ikke hadde tenkt så mye over. Jeg skal ha noe ala det systemet det er på dette forumet, hvor uleste emner vises med et bilde o.l. Når man leser dette emnet så vil ikonet forandres for å vise at det ikke er noen uleste poster i det forumet osv. Jeg har tenkt litt rundt dette, og har ikke funnet frem til noen god løsning på hvordan dette kan løses... Eks: Noen som har ideer? Bruker omtrent samme databasestruktur som phpbb forumet. Det er ikke så viktig at uregistrerte brukere har denne funksonen. Det viktigste er at brukere som logger inn kan ha en oversikt over uleste emner. Lenke til kommentar
Flin Skrevet 10. september 2007 Del Skrevet 10. september 2007 Tja, jeg regner med at du har en id for hvert innlegg. Du kan jo gjør det slik at når en bruker går inn i et emne blir iden til emnet lagret i database. Så kan du bare sjekke id i tabellen opp mot id til emne. Finnes id i tabellen vis et bilde hvis ikke et annet. Har aldri tenkt noe over dette noe særlig så jeg vet ikke hvordan det er med ressurser og ytelse. Lenke til kommentar
NorskFirefox Skrevet 10. september 2007 Del Skrevet 10. september 2007 Hvor avansert har du lyst til å gjøre dette? Som Invision power board, eller phpBB? Forskjellen? phpBB sjekker kun innlegg etter sist innlogging. Det gjør det mye lettere å ta for seg nye innlegg, da uten så mange database tilkoblinger. IPB: De har en annen funksjon hvor det blir lagret i en database hvilke tråder du har lest.. Dette er en tung funksjon som vil kreve mye vedlikehold. Om du sier hvilken måte du vil ha det, så kan jeg gi noen kode eksempler. Lenke til kommentar
LostOblivion Skrevet 10. september 2007 Del Skrevet 10. september 2007 Lagre siste id i en kake ( ) og sjekk kaken opp mot siste id i databasen. Er det samme id, er det ingen nye, er det ikke den samme, er det minst én ny. Lenke til kommentar
Gjest Slettet+142 Skrevet 11. september 2007 Del Skrevet 11. september 2007 Lagre siste id i en kake ( ) og sjekk kaken opp mot siste id i databasen. Er det samme id, er det ingen nye, er det ikke den samme, er det minst én ny. 9469701[/snapback] Hva om man bruker flere pcer til samme bruker da? Da vil joikke det virke Lenke til kommentar
StianBak Skrevet 11. september 2007 Forfatter Del Skrevet 11. september 2007 Hvor avansert har du lyst til å gjøre dette? Som Invision power board, eller phpBB?Forskjellen? phpBB sjekker kun innlegg etter sist innlogging. Det gjør det mye lettere å ta for seg nye innlegg, da uten så mange database tilkoblinger. IPB: De har en annen funksjon hvor det blir lagret i en database hvilke tråder du har lest.. Dette er en tung funksjon som vil kreve mye vedlikehold. Om du sier hvilken måte du vil ha det, så kan jeg gi noen kode eksempler. 9468377[/snapback] Jeg har ikke tenkt til å gjøre det så mye mer avansert en phpBB sin funksjon. Lenke til kommentar
NorskFirefox Skrevet 11. september 2007 Del Skrevet 11. september 2007 Ok; Da må du ha en funksjon som oppdaterer en session hver gang du leser et innlegg. Ikke sikker på hvor mye du kan innen php, men litt teoretisk nå. Først er du nødt til å lage en session med når brukeren sist ble logget ut, for å gjøre det enklest mulig oppdaterer du en egen rad i databasen som så blir hentet når personen logger inn (Eller etter 30 minutters inaktivitet elns om du har på automatisk innlogging) Så tar du og sjekker alle trådenes siste innlegg opp mot denne siste innloggingstiden. Alle innleggene som er nyere enn tiden vil i utgangspunktet være nye. Men hva om brukeren har lest innlegget? Når en person leser en tråd sjekker du igjen om den er ny, om den er det lagrer du en array i en session som du også må sjekke opp mot i spørringen i forrige avsnitt. I den arrayen må du lagre id og tiden på det siste innlegget. Sitter på skolen nå, så har ikke kodene jeg har hjemme. Men om du lurer på noe så kan jeg hjelpe. (litt lite å gjøre nå) Lenke til kommentar
StianBak Skrevet 11. september 2007 Forfatter Del Skrevet 11. september 2007 Fint at du kan hjelpe Her er forumet sålangt: http://www.photoshopaid.net/?page=forums Jeg har allerede en rad i databasen med sessions. Hva om noen poster et innlegg mens brukeren er logget inn? Det hadde vært kjekt om jeg kunne få sett php koden Lenke til kommentar
NorskFirefox Skrevet 11. september 2007 Del Skrevet 11. september 2007 (endret) Ok, skal se om jeg får laga noe her på skolen nå.. Oppdatert Ok, nå har jeg fått inn noe kode. Enkelt testet på skolen, med variabelnavn litt blanda mellom norsk og engelsk.. Men håper du forstår litt av opplegget rundt det. Databasen jeg brukte CREATE TABLE `test` ( `id` int(11) NOT NULL auto_increment, `last_post_time` int(11) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=3 ; INSERT INTO `test` (`id`, `last_post_time`) VALUES (1, 1189502513), (2, 1189502513); PHP <?php // starter session session_start(); // Debug only! - Sletter sessions if($_GET['mod']) { session_destroy(); header("Location: ". $_SERVER['PHP_SELF']); } ?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-2"> <title>Untitled Document</title> </head> <body> <!-- DEBUG ONLY --> Create session: <form name="form1" method="post" action=""> <label> <input type="text" name="textfield" id="textfield" value="<?= time()-60; ?>"> </label> <input type="submit" name="button" id="button" value="Go"> </form> <?php // Debug only! - Setter en session til tiden personen var på sist (Les post over) if($_POST['button']) $_SESSION['t'] = $_POST['textfield']; // Enkel db tilkobling mysql_connect('localhost', 'root',''); mysql_select_db('board'); // Sjekker enkelt om "posten" leses, om den gjør det, oppdater $_SESSION['sess'] if(is_numeric($_GET['ab'])) { $id = (int)$_GET['ab']; // Finner tiden på trådens siste post $tid = mysql_result(mysql_query("SELECT last_post_time FROM test WHERE id = '". $id ."'"), 0); // Legger den inn i session $_SESSION['sess'][$id] = $tid; } // Henter alle innleggene $sql = mysql_query("SELECT * FROM test"); // Går gjennom databasen while($rad = mysql_fetch_array($sql)) { // Sjekker om innlegget er eldre enn sist brukeren var innlogget, eller om det er lest. if($_SESSION['sess'][$rad['id']] == $rad['last_post_time'] || $rad['last_post_time'] < $_SESSION['t']) echo '<br><a href="?ab='. $rad['id'] .'">old</a>'; // Hvis ikke så er det jo et nytt innlegg else echo '<br><a href="?ab='. $rad['id'] .'">new</a>'; } ?> <!-- DEBUG ONLY! --> <pre> <?php // Debug only! - Printer ut hele $_SESSION arrayen print_r($_SESSION); ?> <!-- DEBUG ONlY! --> </pre> <a href="?mod=del">Delete all sessions</a> </body> </html> Endret 11. september 2007 av NorskFirefox Lenke til kommentar
Peter Skrevet 11. september 2007 Del Skrevet 11. september 2007 Hvorfor har du AUTO_INCREMENT satt til 3, og hvorfor setter du manuelt inn id når du har auto_increment, forsvinner ikke litt av poenget da? Lenke til kommentar
NorskFirefox Skrevet 11. september 2007 Del Skrevet 11. september 2007 Hva? Tenker du på sql-spørringa? I såfall er det en eksportering fra databasen jeg brukte. Eksporterte med dataen bare for å gjøre det litt lettere. Der vil alle feltene automatisk bli eksportert, og AUTO_INCREMENT blir satt til det neste nummeret som skal bli lagt inn. Det er mysql sin måte å huske den neste id-en som skal legges til i feltet hvor auto increment er slått på Lenke til kommentar
Peter Skrevet 11. september 2007 Del Skrevet 11. september 2007 Hva? Tenker du på sql-spørringa? I såfall er det en eksportering fra databasen jeg brukte. Eksporterte med dataen bare for å gjøre det litt lettere. Der vil alle feltene automatisk bli eksportert, og AUTO_INCREMENT blir satt til det neste nummeret som skal bli lagt inn. Det er mysql sin måte å huske den neste id-en som skal legges til i feltet hvor auto increment er slått på 9475219[/snapback] Da er jeg med Tenkte ikke på at det var en mysql-eksport. (Reagerte dog litt på at du spesifiserte noe veldig på opprettelsen av den tabellen) Lenke til kommentar
Runar Skrevet 11. september 2007 Del Skrevet 11. september 2007 Jeg vurderte å lage en lignende tråd siden jeg prøver å utvikle mitt eget enkle forum selv. Vil en funksjon som phpBB og PunBB har (at "nye tråder" går etter forrige innlogging) fungere bra for de fleste brukere? Eller forventer man at trådene skal markeres etter at de er lest? Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå