Deceptive-Logic


Copy this code, make the neccessary changes, save as a .php file, upload to your server, and use <? include('filename.php'); ?> where ever you want it to show up (change filename.php to the files acctual name).

If you have any questions, just ask on the tutorial help forums.

<? 
#database info, or include a config.php file
$db_host 'localhost'#change to your host
$db_user 'username'#change to your user name
$db_password 'password'#change to your password
$db_name 'database_name'#change to your db name

mysql_connect($db_host,$db_user,$db_password) or die(mysql_error()); 
mysql_select_db($db_name) or die(mysql_error()); 

/* to keep a forum secret (i.e. a mods only forum) find, AND t.forum_id != 1, and change 1 to the forums id (according to your database)
to select a specific forum (i.e. news forum), find AND t.forum_id != 1, and change it to t.forum_id = 1 (where 1 = the forums id) */
$result mysql_query("SELECT DISTINCT t.topic_id, t.topic_title, t.topic_poster, t.topic_first_post_id, t.forum_id, t.topic_replies, u.user_id, u.username, s.post_id, s.post_text
FROM phpbb_posts p, phpbb_topics t, phpbb_users u, phpbb_posts_text s
WHERE p.topic_id = t.topic_id AND t.topic_poster = u.user_id AND t.topic_first_post_id = s.post_id AND t.forum_id != 1 AND u.user_id != -1
ORDER BY p.post_time desc LIMIT 10"
);

/* this function is used to limit the amount of text displayed, as well as replace any bbcode.
it also converts any new lines (enters/returns), to an acctual break for people to see
if you want bbcode displayed, remove the $text = preg_replace... line 
ONLY KEEP IF YOU ARE GOING TO DISPLAY THE BODY TEXT OF A POST */
function text($text$limit){
    
$text str_replace("\n""<br>"$text);
    
$text preg_replace("#\[(.*?)\].*?\[/(.*?)\]#si""<i>[bbcode]</i>"$text);
    if(
strlen($text)>$limit){
        
$text substr($text0$limit);
        
$text substr($text0, -(strlen(strrchr($text' '))))."...";
    }
    return 
$text;
}

while(
$r=mysql_fetch_array($result)){ 
/* change 100, to the number of characters you want to show
you only need the following line if you kept the above function */
$text text($r['post_text'], 100);

/* to change the display, edit this
also change both the <a> tags to the correct path to your forums, leave the part after /forum/ the same */
echo "<a href=/forum/viewtopic.php?t=".$r['topic_id']." target=_blank>".$r['topic_title']."</a><br>
by: <a href=/forum/profile.php?mode=viewprofile&u="
.$r['user_id']." target=_blank>".$r['username']."</a><br>
$text
<div align=\"right\">Replies: "
.$r['topic_replies']."</div>
<hr>"


#OPTIONAL, to save file size, delete the orange comments 
?>

Now to explain one of the non-normal things:

SELECT DISTINCT t.topic_id, t.topic_title, t.topic_poster, t.topic_first_post_id, t.forum_id, t.topic_replies, u.user_id, u.username, s.post_id, s.post_text FROM phpbb_posts p, phpbb_topics t, phpbb_users u, phpbb_posts_text s

On the SELECT line, you'll notice the word DISTINCT and the format for selecting is (letter).(column). The term DISTINCT, just means that if it finds 2 things that match the WHERE criteria, it will only select 1 of them. And the format goes with the FROM line. On the FROM line it has a format of "table variable", all that does is select the table and makes it so all the columns have the prefix of the letter(s) you added. For instance, i can change "phpbb_posts p" to "phpbb_posts z" and then i would have to change all the "p.columns" to "z.column". The choosen letter really has nothing to do with the database itself, just personal choice (but it is required to run the script)

As a final note, the query's used in this were set for the default installation of phpbb, if you changed your table prefix before or after the installation you will need to go through and change the queries to match.