SitePoint Sponsor

User Tag List

Results 1 to 2 of 2

Hybrid View

  1. #1
    SitePoint Evangelist
    Join Date
    Dec 2006
    Posts
    430
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Moving forum posts to the top

    Hi Guys,

    iv made a fairly basic forum type script , it works great apart from 1 thing, whenever a user posts a reply to a topic that topic stays exactly where it was posted , it doesnt move to the top (like when you post a message in these forums)

    PHP Code:
    <?php
         
    // grab the nzb id...///////////////////////////////////////////////////////////////
         
    $forum_id $_GET['id'];
         
         
    ## deal with the reply #############################################################
         
    if ($_GET['action'] == "replied") {
         
         
    ## grab the data ###################################################################
         
    $the_replier $_POST['repliedby'];
         
    $the_top_id $_POST['topicid'];
         
    $the_body CleanPosts($_POST['body'], 1);
         
    $the_fid $_POST['fid'];
              
         
    ## error check #####################################################################
         
    if(empty($the_body)) {
         
         
    stderr("Error""You never entered anything in the reply field.");
         include(
    "includes/footer.php");
         exit;
         
         }
              
         
    ####################################################################################
         # insertion
         ####################################################################################
         
         
    $q2 "INSERT INTO `forum_posts` (`id`,`topic_id`,`user_id`,`date`,`post_body`) VALUES ('','$the_top_id','$the_replier',now(),'$the_body')";
         
    $r2 mysql_query($q2) or die (mysql_error());
         
         
    ## update the post count ###########################################################
         
    $q_sections2 "UPDATE `forum_sections` SET `post_count`=post_count+1 WHERE `id`='$the_fid'";
         
    $r_sections2 mysql_query($q_sections2) or die (mysql_error());
         
         
    $q_sections3 "UPDATE `forum_topics` SET `replies`=replies+1 WHERE `id`='$the_top_id'";
         
    $r_sections3 mysql_query($q_sections3) or die (mysql_error());         
         
         
    ####################################################################################
         # insertion
         ####################################################################################
         
         ## update this topic as the last post read #########################################
         
    mysql_query("UPDATE `forum_topics` SET `last_post`='$the_top_id' WHERE `id`='$the_top_id'");
       
         
    stderr("Success""Stand by....");
         echo 
    "<meta http-equiv=\"refresh\" content=\"0;URL=viewforum.php?action=viewtopic&topicid=$the_top_id\">";
         include(
    "includes/footer.php");
         exit;
         
         }
         
         
    ## reply topic #####################################################################
         
    if ($_GET['action'] == "reply") {
         
         
    ## grab the get data ###############################################################
         
    $reply_topic_id $_GET['topicid'];
         
         
    ## GET TOPIC NAME ##################################################################
         
    $q4 "SELECT * FROM `forum_topics` WHERE `id`='$reply_topic_id'";
         
    $r4 mysql_query($q4) or die (mysql_error());
         
    $r mysql_fetch_array($r4) or die (mysql_error());
         
    $subj $r['subject'];
         
    $fid $r['forum_id'];
         
         
    ## get the logged in users details #################################################
         
    $q_uid "SELECT `id` FROM `membership` WHERE `username`='$member'";
         
    $r_uid mysql_query($q_uid) or die (mysql_error());
         
    $liuid mysql_fetch_array($r_uid);
         
    $u_id $liuid['id'];
         
         
    ## make the reply box ##############################################################
         
    echo '<br />';
         echo 
    '<b>Your about to reply to the topic: <a href="viewforum.php?action=viewtopic&topicid='.$reply_topic_id.'">'.$subj.'</a></b>';
         echo 
    '<br /><br />
               <table width="80%" border="1" cellspacing="0" cellpadding="10"><tr><td align="center">
               <form method="POST" action="?action=replied">
               <input type="hidden" name="forumid" value='
    .$forumid.'>
               <br />
               <table class="forum_border" border="1" cellspacing="0" cellpadding="5">
               <tr>
               <td class="forum_border" align="right" valign="top"><b>Body</b></td><td class="forum_border" align=left style=\'padding: 0px\'><textarea name="body" cols="100" rows="20" style=\'border: 0px\'></textarea></td>
               </tr>
               <tr>
               <td class="forum_border" colspan="2" align="center"><input type=submit class="btn" value=\'Submit Reply\'>                                                               
                                                                   <input type="hidden" name="topicid" value="'
    .$reply_topic_id.'">
                                                                   <input type="hidden" name="fid" value="'
    .$fid.'">
                                                                   <input type="hidden" name="repliedby" value="'
    .$u_id.'">
               </td>
               </tr>
               </td>
               </tr>
               </table>
               </form>    
               </table><br />'
    ;
               
         
    ## update last poster ##############################################################
               
         
    include("includes/footer.php");
         exit;
         
         }
         
         
    ## view topic ######################################################################
         
    if ($_GET['action'] == "viewtopic") {
         
         
    ## grab the post data ##############################################################
         
    $the_topic_id $_GET['topicid'];
         
         
    ## ERROR ###########################################################################
         
    if(empty($the_topic_id)) {
         
         
    stderr("Error""Bad ID, or the topic no longer exhists.");
         include(
    "includes/footer.php");
         exit;
         
         }
         
         
    ## also update the views ###########################################################
         
    $query_update_views "UPDATE `forum_topics` SET `views`=views+1 WHERE `id`='$the_topic_id'";
         
    $result_update_views mysql_query($query_update_views) or die (mysql_error());
         
         
    ## get and display the topic and relevant data #####################################
         
    $query_db1 "SELECT * FROM `forum_topics` WHERE `id`='$the_topic_id'";
         
    $result_db1 mysql_query($query_db1) or die (mysql_error());
         
    $row mysql_fetch_array($result_db1) or die (mysql_error());
         
    $subject $row['subject'];
         
    $user_id $row['user_id'];
         
    $forum_id $row['forum_id'];
         
         
    ## get the posters details #########################################################
         
    $query_poster "SELECT * FROM `membership` WHERE `id`='$user_id'";
         
    $result_poster mysql_query($query_poster) or die (mysql_error()); 
         
    $rows mysql_fetch_array($result_poster) or die (mysql_error()); 
         
    $poster_id $rows['id'];
         
    $poster_name $rows['username'];
         
    $avatar $rows['avatar'];
         
    $user_class $rows['user_class'];
         
         
    ## more info date etc ##############################################################
         
    $query_top "SELECT * FROM `forum_posts` WHERE `topic_id`='$the_topic_id'";
         
    $result_top mysql_query($query_top) or die (mysql_error());
         
    $top mysql_fetch_array($result_top);
         
    $post_topic_id $top['id'];
         
    $post_body $top['post_body'];
         
    $post_date $top['date'];
         
         
    ## 1 more ##########################################################################
         
    $q "SELECT * FROM `forum_sections` WHERE `id`='$forum_id'";
         
    $r mysql_query($q) or die (mysql_error());
         
    $row3 mysql_fetch_array($r) or die (mysql_error()); 
         
    $f_name $row3['forum_name'];
         
         
    //$query_again_top = "SELECT * FROM `forum_posts` WHERE `topic_id`='$post_topic_id'";
         //$result_again_top = mysql_query($query_again_top) or die (mysql_error());
         //$t = mysql_fetch_array($result_again_top) or die (mysql_error()); 
         //$t_date = $t['date'];
         
         
    echo "<br /><b><a href=\"viewforum.php?id=$forum_id\">$f_name</a> >>> $subject</b><br /><br />";
              
         
    ####################################################################################
         
    $query_replies "SELECT * FROM `forum_posts` WHERE `topic_id`='$the_topic_id'";
         
    $result_replies mysql_query($query_replies) or die (mysql_error());
         
         while(
    $row_replies mysql_fetch_array($result_replies)) {
         
         
    ## VARS
         
         
    $fp_id $row_replies['id'];
         
    $ft_uid $row_replies['user_id'];
         
    $ft_date $row_replies['date'];
         
    $post_body $row_replies['post_body'];
         
         
    $q3 "SELECT * FROM `membership` WHERE `id`='$ft_uid'";
         
    $r3 mysql_query($q3) or die (mysql_error());
         
    $qr mysql_fetch_array($r3) or die (mysql_error());
         
    $replier_id $qr['id'];
         
    $replier_name $qr['username'];
         
    $replier_user_class $qr['user_class'];
         
    $avatar $qr['avatar'];
         
         
    ####################################################################################
         
    echo '<table width="750" border="20" bordercolor="#8f0002" cellpadding="5" cellspacing="0"> 
               <tr> 
               <td bgcolor="#0055A4" class="details" valign="top"><table width="100%" border="1" cellpadding="5" cellspacing="0"> 
               </tr> 
               <tr>
               <td bgcolor="#EEEEEE" class="forum_border" class="forum_border" colspan="2" align="left" class="details">By <a href="userdetails.php?id='
    .$replier_id.'">'.$replier_name.'</a> (<b>'.$replier_user_class.'</b>)<br />Posted on '.$ft_date.'</td><td bgcolor="#EEEEEE" class="forum_border" align="right">[<a href="">EDIT</a>]-[<a href="">DELETE</a>]</td>
               </tr>
               <tr>
               <td class="forum_border" colspan="2" width="30%" align="center" valign="top">'
    ;
               if(empty(
    $avatar)) {
               
               echo 
    "<img src=\"images/default_avatar.gif\" />";  
               
               } else {
               
               echo 
    "<img src=\"avatars/$avatar\" />";
               
               } 
         echo 
    '</td><td class="forum_border" width="70%" align="left" valign="top">'.$post_body.'</td>
               </tr>
               </table></table><br />'
    ;
                    
         
    ####################################################################################
         
    }
         
         
    ## reply button ####################################################################
         
    echo '<form method="get" action="?">
               <input type="hidden" name="action" value="reply">
               <input type="hidden" name="topicid" value='
    .$the_topic_id.'>
               <input type="submit" value=\'Add Reply\' class=btn>
               </form>'
    ;
               
         
    ## update this topic as the last post read #########################################
         
    mysql_query("UPDATE `forum_topics` SET `last_post`='$the_topic_id' WHERE `id`='$the_topic_id'");
         
         
    ####################################################################################
         # we really need the latest post id so while loop it
         ####################################################################################
         
    $query_the_post_id "SELECT `id` FROM `forum_posts`";
         
    $result_the_post_id mysql_query($query_the_post_id) or die (mysql_error());
         while(
    $rowid mysql_fetch_array($result_the_post_id)) {
         
         
    $new_id $rowid['id'];
         
         }
         
         
    ## last read post ##################################################################
         
    mysql_query("INSERT INTO `forum_last_post` (`id`,`user_id`,`topic_id`,`last_read_post`) values ('','$replier_id','$the_topic_id','$new_id')");

         include(
    "includes/footer.php");
         exit; 
         
         }
         
         if (
    $_GET['action'] == "post") {
         
         
    $subject CleanPosts($_POST['subject'], 1);
         
    $body CleanPosts($_POST['body'], 1);
         
    $poster $_POST['poster'];
         
    $for_id $_POST['forums_id'];
         
    $topical_id $_POST['topic_id'];
         
         
    ## error check #####################################################################
         
    if(empty($subject)) {
         
         
    stderr("Error""You never entered a subject.");
         include(
    "includes/footer.php");
         exit;
         
         }
         
         if(empty(
    $body)) {
         
         
    stderr("Error""You never entered anything in the message body.");
         include(
    "includes/footer.php");
         exit;
         
         }
         
         
    ## cap the subject length ##########################################################
         
    if(strlen($subject) > 50) {
         
         
    stderr("Error""Sorry, the subject can't be any longer that 50 characters.");
         include(
    "includes/footer.php");
         exit;     
         
         }
         
         
    ####################################################################################
         # insertions
         ####################################################################################
         
         ## more insertion ##################################################################
         
         
    $query_insert "INSERT INTO `forum_topics` (`id`,`user_id`,`subject`,`forum_id`) VALUES ('','$poster','$subject','$for_id')";
         
    $result_insert mysql_query($query_insert) or die (mysql_error());
         
         
    ## need the topic id :) ############################################################
         
    $query "SELECT `id` FROM `forum_topics`";
         
    $result mysql_query($query) or die (mysql_error());
         
         while(
    $row mysql_fetch_array($result)) {
         
         
    $id2 $row['id']; 
         
         }
         
         
    $query_insert_2 "INSERT INTO `forum_posts` (`id`,`topic_id`,`user_id`,`date`,`post_body`) VALUES ('','$id2','$poster',now(),'$body')";
         
    $result_insert_2 mysql_query($query_insert_2) or die (mysql_error());
         
         
    $q_sections "UPDATE `forum_sections` SET `topic_count`=topic_count+1 WHERE `id`='$for_id'";
         
    $r_sections mysql_query($q_sections) or die (mysql_error());
         
         
    ## all good then do the insertion ##################################################
         
         ####################################################################################
         # insertions
         ####################################################################################
         
    stderr("Success""Stand by....");
         echo 
    "<meta http-equiv=\"refresh\" content=\"0;URL=viewforum.php?id=$for_id\">";
         include(
    "includes/footer.php");
         exit;
         
         }
         
         
    ## the gets ########################################################################
         
    if ($_GET['action'] == "newtopic") {
         
         
    ## forum id ########################################################################
         
    $forumid $_GET['forumid'];
         
    $topicid $_GET['topicid'];
         
         
    ## ERROR ###########################################################################
         
    if(empty($forumid)) {
         
         
    stderr("Error""Bad ID :(");
         include(
    "includes/footer.php");
         exit;
         
         }
         
         
    ## get the forum name ##############################################################
         
    get_forum_name($forumid);
         
         
    ## get the posters id ##############################################################
         
    $query_poster "SELECT `id` FROM `membership` WHERE `username`='$member'";
         
    $result_poster mysql_query($query_poster) or die (mysql_error());
         
    $user_id mysql_fetch_array($result_poster) or die (mysql_error());
         
    $poster_id $user_id['id'];
         
         
    ## make the new topic box ##########################################################
         
    echo '<br />';
         echo 
    '<b>Adding a new topic in the forum: <a href="viewforum.php?id='.$forumid.'">'.get_forum_name($forumid).'</a></b>';
         echo 
    '<br /><br />
               <table width="80%" border="1" cellspacing="0" cellpadding="10"><tr><td align="center">
               <form method="POST" action="?action=post">
               <input type="hidden" name="forumid" value='
    .$forumid.'>
               <br />
               <table class="forum_border" border=1 cellspacing=0 cellpadding=5>
               <tr>
               <td class="forum_border"><b>Subject</b></td><td class="forum_border" align=left style=\'padding: 0px\'><input type=text size="100" maxlength="60" name="subject" style=\'border: 0px; height: 19px\'></td>
               </tr>
               <tr>
               <td class="forum_border" align="right" valign="top"><b>Body</b></td><td class="forum_border" align=left style=\'padding: 0px\'><textarea name="body" cols="100" rows="20" style=\'border: 0px\'></textarea></td>
               </tr>
               <tr>
               <td class="forum_border" colspan="2" align="center"><input type="submit" class="btn" value=\'Submit Topic\'>
                                                                   <input type="hidden" name="poster" value="'
    .$poster_id.'">
                                                                   <input type="hidden" name="forums_id" value="'
    .$forumid.'">
               </td>
               </tr>
               </td>
               </tr>
               </table>
               </form>    
               </table><br />'
    ;
         
         include(
    "includes/footer.php");
         exit;
         
         }
         
         
    ## forum name ######################################################################
         
    $forum_query "SELECT * FROM `forum_sections` WHERE `id`='$forum_id'";
         
    $forum_result mysql_query($forum_query) or die (mysql_error());
         
    $row mysql_fetch_array($forum_result) or die (mysql_error());
         
         
    ## vars ############################################################################
         
    $forum_name $row['forum_name'];
         
         
    ## echo ############################################################################
         
    echo "<br /><h4>$forum_name</h4>";
         
            
    ## Pagination start #############################################################
            
    echo "<center>";
            
    // If current page number, use it 
            // if not, set one! 
            
            
    if(!isset($_GET['page'])){ 
                
    $page 1
            } else { 
                
    $page $_GET['page']; 
            } 
            
            
    // Define the number of results per page 
            
    $max_results 25;         
            
            
    // Figure out the limit for the query based 
            // on the current page number. 
            
    $from = (($page $max_results) - $max_results);  
            
            
    // Perform MySQL query on only the current page number's results 
            
            
    $sql mysql_query("SELECT * FROM `forum_topics` WHERE `forum_id`='$forum_id' ORDER BY `id` DESC LIMIT $from$max_results"); 
            
            
    ## Pagination start #############################################################
         
         ####################################################################################
         
    echo '<table border="1" cellspacing="0" cellpadding="5">
               <tr>
               <td colspan="2" class="colhead" align="left">Topic</td><td class="colhead">Replies</td><td class="colhead">Views</td><td class="colhead" align="center">Author</td><td class="colhead" align="center">Date Posted</td>
               </tr>'
    ;
                        
         while(
    $row mysql_fetch_array($sql)) {
         
         
    ## vars 
         
    $for_subj $row['subject'];
         
    $for_ti $row['id'];
         
    $for_views $row['views'];
         
    $for_user_id $row['user_id'];
         
         
    ## post user details ###############################################################
         
    $q6 "SELECT * FROM `membership` WHERE `id`='$for_user_id'";
         
    $r6 mysql_query($q6) or die (mysql_error());
         
    $r2 mysql_fetch_array($r6) or die (mysql_error());
         
    $postid $r2['id'];
         
    $postname $r2['username'];
         
         
    ## post count ######################################################################
         
    $q5 "SELECT * FROM `forum_posts` WHERE `topic_id`='$for_ti'";
         
    $r5 mysql_query($q5) or die (mysql_error());
         
    $date mysql_fetch_array($r5);
         
    $postdate $date['date'];
         
    $postcount mysql_num_rows($r5);
         
         
    ## grab the user_id ################################################################
         
    $q8 "SELECT * FROM `membership` WHERE `id`='$need_user_id'";
         
    $r8 mysql_query($q8) or die (mysql_error());
         
    $r4 mysql_fetch_array($r8);
         
    $last_post_id $r4['id'];
         
    $last_post_name $r4['username'];
         
         
    ## replies #########################################################################
         
    $q12 "SELECT `replies` FROM `forum_topics` WHERE `id`='$for_ti'";
         
    $r12 mysql_query($q12) or die (mysql_error());
         
    $rep_count mysql_fetch_array($r12);
         
    $replies $rep_count['replies'];
         
         echo 
    '<tr><td class="forum_border" align="center"><img src=images/forum_1337.gif></td><td align="left" class="forum_border"><a href=?action=viewtopic&topicid='.$for_ti.'><b>'.$for_subj.'</b></a></td><td align="center" class="forum_border">'.$replies.'</td><td align="center" class="forum_border">'.$for_views.'</td><td align="center" class="forum_border"><a href="userdetails.php?id='.$postid.'"><b>'.$postname.'</b></a></td><td align="center" class="forum_border"><font size="1">'.$postdate.'</font></td></tr>';
         
         }     
         echo 
    '</table>';
         
    ####################################################################################
         
    echo '<br />
               <table class="details" border="0" cellspacing="0" cellpadding="5">
               <tr>
               <td><img src=images/1337(b).gif style=\'margin-right: 5px\'></td><td>New Posts</td><td><img src=images/locked.gif style=\'margin-left: 10px; margin-right: 5px\'></td><td>Locked Topic</td>
               </tr>
               </table><br />'
    ;
         
             
    ## Pagination end ###############################################################
            
            // Figure out the total number of results in DB: 
            
    $total_results mysql_result(mysql_query("SELECT COUNT(*) as Num FROM `forum_topics` WHERE `forum_id`='$forum_id'"),0); 
            
            
    // Figure out the total number of pages. Always round up using ceil() 
            
    $total_pages ceil($total_results $max_results); 
            
            
    // Build Previous Link 
            
    if($page 1){ 
                
    $prev = ($page 1); 
                echo 
    " <a href=\"".$_SERVER['PHP_SELF']."?id=$forum_id&amp;page=$prev\"><<<&nbsp;</a> "
            } 
            
            for(
    $i 1$i <= $total_pages$i++){ 
                if((
    $page) == $i){ 
                    echo 
    "[<b>$i</b>] "
                    } else { 
                        echo 
    "<a href=\"".$_SERVER['PHP_SELF']."?id=$forum_id&amp;page=$i\">$i</a> "
                } 
            } 
            
            
    // Build Next Link 
            
    if($page $total_pages){ 
                
    $next = ($page 1); 
                echo 
    "<a href=\"".$_SERVER['PHP_SELF']."?id=$forum_id&amp;page=$next\"> >>></a>"
            } 
            echo 
    "<br /><br />"
            
            
    ## Pagination end ###############################################################
         ## buttons #########################################################################
         
    echo '<form method="get" action=?><input type="hidden" name="action" value="newtopic"><input type="hidden" name="forumid" value="'.$forum_id.'"><input type=submit value=\'New Topic\' class=btn style=\'margin-left: 10px\'></form>';
    ?>
    the VERY bottom part of the code echoes out the forum tables etc im not sure what i should be doing to make the posted in topic jump to the top, any ideas would be great

    cheers

    Graham

  2. #2
    SitePoint Enthusiast
    Join Date
    Jul 2006
    Posts
    83
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Since you made your own script, im assuming that you know where to change the codes. Here is what you should do. There is no changes needed at the post script. Get to the forum listing script, look at the select query and change the order by to the last post's date. I think your current setting leads it to order by thread date instead of post's date.

    Any url for reference?
    My Network
    Deluxe Web Directory
    FontCubes Free Fonts


Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •