Форума ми бачкаше на следния принцип:
При прочитане/отваряне на тема правя проверка дали дадената тема е била отваряна от потребителя, ако е отваряна просто правя UPDATE на въпросния ред /id/, ако не съществува такъв запис в таблицата правя заявка INSERT.
PHP:
$is_read = mysql_query("SELECT `id` FROM `reads` WHERE user_id = '{$user_id}' AND topic_id ='{$topic_id}';") or die(mysql_error());
if (mysql_num_rows($is_read) > 0) {
mysql_query("INSERT INTO `reads` (user_id, topic_id, date) VALUES ('{$user_id}','{$topic_id}', UNIX_TIMESTAMP());") or die(mysql_error());
} else {
mysql_query("UPDATE `reads` SET date = UNIX_TIMESTAMP() WHERE user_id = '{$user_id}' AND topic_id = '{$topic_id}';") or die(mysql_error());
}
Като променливите:
$user_id = променливата на вписания потребител
$topic_id = променливата на темата
date .. е времето..
Смяната на иконата дали е прочетена или не в даден форум я правя по следния начин:
PHP:
<?php
$f_id = (int)$_GET['id'];
$query = mysql_query("SELECT * FROM `topics` WHERE `f_id`='{$f_id}';")or die(mysql_error());
if(mysql_num_rows($query) > 0) {
while($row = mysql_fetch_object($query)) {
$topic_id = $row->id;
$fdate = $row->date;
if ($user_id) {
$timeout = time() - 43200;
if ($fdate < $timeout) {
$read = 'прочетена';
} else {
$read_status = mysql_query("SELECT `id` FROM `reads` WHERE `user_id` ='{$user_id}' AND topic_id ='{$topic_id}' AND date > '{$fdate}';") or die(mysql_error());
if (mysql_num_rows($read_status) > 0) {
$read = 'прочетена';
} else {
$read = 'непрочетена';
}
}
} else {
$read = 'прочетена';
}
echo "Темата е: {$read}";
}
} else {
echo "В този форум няма прочетени теми";
}
?>
Не се сещам, как ще стане с бисквитки, но това е вариант също. :?:
Таблицата предполагам сам можеш да си е напишеш. Ако имаш няк'ви въпроси казвай.