Gå til innhold

Nytt innlegg (Forum)


Anbefalte innlegg

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:

6292747.jpg

 

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
Videoannonse
Annonse

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

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
Gjest Slettet+142
Lagre siste id i en kake ( :p ) 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. :thumbup:

9469701[/snapback]

Hva om man bruker flere pcer til samme bruker da? Da vil joikke det virke :hmm:

Lenke til kommentar
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

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

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 av NorskFirefox
Lenke til kommentar

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
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

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...