Jump to content

Adding a reply link & reply page to my message system


jcruze10

Recommended Posts

Hey guys, hopefully your brilliant minds will be able to enlighten me with a solution to adding a reply link to my current message system and creating a reply page similiar to the compose page. I have yet to build a "reply.php" page so anything you can help me out with would be great.

 

All I'm really needing is for the original sender's member name to echo into the "Send Message To:" field so that the user won't have to retype the sender's name in. Thank you in advance for any assistance you guys can provide. Here's the coding for my "compose.php" & "viewmsg.php" pages:

 

viewmsg.php

<?php
session_start();
$user = $_SESSION['SESS_LOGIN'];
    
    include 'db.php';
    
    //This checks to see if a user is logged in or not by seeing if the sessioned username varialble exists.
	//You could change this check to however you want to validate your members, this is just how I did it.
    if(!$user)
        {
        echo "<br><p>Please login to view your messages.</p><br>";
        }
        
    else
        {
        //We need to grab the msg_id variable from the URL.
        $msg_id = $_REQUEST['msg_id'];
        
        //Get all of the information about the message with the id number sent through the URL
        $view_msg = mysql_query("SELECT * FROM messages WHERE id = '$msg_id'");
        $msg = mysql_fetch_array($view_msg);
        
        $reciever = $msg['reciever'];
        $sender = $msg['sender'];
        $subject = $msg['subject'];
        $message = $msg['message'];
        
        //If the person who is supposed to recieve the message is the currently logged in user everything is good
        if($reciever == $user)
            {
            //The message was recieved, so lets update the message in the database so it wont show up in the sent page any more
            mysql_query("UPDATE messages SET recieved='1' WHERE id = '$msg_id'");
            
            //Query the database to see how many messages the logged in user has, then do a little math
			//Find the percentage that your inbox is full (message count divided by 50)
			//50 messages maximum, you can change that
			$sql = mysql_query ("SELECT pm_count FROM members WHERE login='$user'");
			$row = mysql_fetch_array ($sql);
			$pm_count = $row['pm_count'];
			
			//This is the math to figure out the percentage.
			//The message could divided by 50 then multiplied by 100 so we dont have a number less than 1
			$percent = $pm_count/'50';
			$percent = $percent * '100';
            
            //Now we will display the little navigation thing, the fullness of the inbox, then display message information stuff, like who its from, the subject, and the body
            ?>
<center>
            <b><p><a href="inbox.php">Inbox</a> | <a href="compose.php">Compose</a> | <a href="sent.php">Sentbox</a></b>
            <b><p><?php echo "$pm_count"." of 50 Total  |  "."$percent"."% full"; ?></p></b>
            </center>
            <br>
            
            <table width="80%">
              <tr>
                <td width="120px"><p>From:</p></td>
                <td width=""><p><a href = "<?php echo "../profiles/$sender.php"; ?>"><?php echo $sender; ?></a></p></td>
              </tr>
              
              <tr>
                <td width="120px"><p>Subject:</p></td>
                <td width=""><p><?php echo $subject; ?></p></td>
              </tr>
              
              <tr>    
                <td width="120px"><p>Message Body:</p></td>
                <td width=""><p><?php echo $message; ?></p></td>
              </tr>
            </table>
            </center>
            <?php
            }
        //Everything is not good, someone tried to look at somone else's private message
        else
            {
            ?>
            <p>Invalid message. Please log out and log back in.</p>
            <?php
            }
        }
    ?>

compose.php

<?php
session_start();
$user = $_SESSION['SESS_LOGIN'];
    
    include 'db.php';
    
    //This checks to see if a user is logged in or not by seeing if the sessioned username varialble exists.
	//You could change this check to however you want to validate your members, this is just how I did it.
    if(!$user)
        {
        echo "<br><p>Please login to compose a message.</p><br>";
        }
        
    else
        {
        //Query the database to see how many messages the logged in user has, then do a little math
		//Find the percentage that your inbox is full (message count divided by 50)
		//50 messages maximum, you can change that
		$sql = mysql_query ("SELECT pm_count FROM members WHERE login='$user'");
		$row = mysql_fetch_array ($sql);
		$pm_count = $row['pm_count'];
		
		//This is the math to figure out the percentage.
		//The message could divided by 50 then multiplied by 100 so we dont have a number less than 1
		$percent = $pm_count/'50';
		$percent = $percent * '100';
        ?>
<center>
        <b><p><a href="inbox.php">Inbox</a> | <a href="compose.php">Compose</a> | <a href="sent.php">Sentbox</a></b>
        <b><p><?php echo "$pm_count"." of 50 Total  |  "."$percent"."% full"; ?></p></b>
        </center>
        <br>
        <?php
        //So here we get the variable submitted through the form to this page
        $reciever = $_POST['username'];
        $subject = $_POST['subject'];
        $message = $_POST['message'];
        $error = '0';
        
        //If they are all blank we jsut say to compose a message
        if(!$reciever AND !$subject AND !$message)
            {
            ?>
            <p><b>Please compose a message.</b></p>
            <br>
            <?php
            }
        
        //Since this form was partially filled out we need to return an error message
        else
            {
            if (!$reciever)
                {
                $error = 'You must enter a reciever to your message';
                }
            
            if (!$subject)
                {
                $error = 'You must enter a subject';
                }
            
            if (!$message)
                {
                $error = 'You must enter a message';
                }
            
            //If the variable error is not set to zero, we have a problem and should show the error message
            if($error != '0')
                {
                echo "<p>$error</p><br>";
                }
            
            //There are no errors so far which means the form is completely filled out    
            else
                {
                //Are the trying to send a message to a real user or to something they just made up?
                $user_check = mysql_query("SELECT login FROM members WHERE login='$reciever'");
                $user_check = mysql_num_rows($user_check);
                
                //The user is real and not made up if this is true
                if($user_check > '0')
                    {
                    //There might already be a sessioned time variable, if so we need to get it for the flood check
                    $time = $_SESSION['time'];
                    
                    //If there is a time variable already, set it to the varialbe $old_time
                    if($time > '0')
                        {
                        $old_time = $time;
                        }
                    
                    //Here we get the minutes and seconds on the server time using the date function, and set that to the $time variable
                    //Now we find the difference between this time ($time) and the time that the page was submitted ($old_time)
                    $time = date('is');
                    $difference = $time - $old_time;
                    
                    $_SESSION['time'] = $time;
                    
                    //If the two times have a difference greater or equal to 15, which is 15 seconds, they can submit the message, this is for flood protection
                    if($difference >= '15')
                        {
                        //Get their private message count
                        $sql = mysql_query ("SELECT pm_count FROM members WHERE login='$reciever'");
                        $row = mysql_fetch_array ($sql);
                        $pm_count = $row['pm_count'];
                        
                        //You cant have more than 50 private messages, if they try sending a message to a user with a full inbox return an error message
                        if(pm_count == '50')
                            {
                            $error = 'The user you are trying to send a message to has 50 private messages, sorry but we cant send your message until that user deletes some of their messages.';
                            }
                            
                        else
                            {    
                            //And now we stick the message in the database with all the correct information
                            mysql_query("INSERT INTO messages (reciever, sender, subject, message) VALUES('$reciever', '$user', '$subject', '$message')") or die (mysql_error());
							//Add 1 to the pm count, update the reciever with the new pm count
							$pm_count++;
							mysql_query("UPDATE members SET pm_count='$pm_count' WHERE login='$reciever'");
                            }
                            
                        //Let the user know everything went ok.
                        echo "<p><b>You have successfully sent a private message!</b></p><br>";
                        }
                    
                    //Since they are trying to send messages faster than every 15 seconds, give them an error message    
                    else
                        {
                        $error = 'You must wait 15 seconds before sending another private message';
                        }
                    }
                
                //If they mis spelled or, made up a username, then give an error message telling them its wrong.
                else
                    {
                    $error = 'That username does not exist, please try again. Remember to check your spelling.';
                    }
                }
            }
            
        //Since we may have set the error variable to something while trying to send the messae, we need another error check
        if($error != '0')
            {
            echo "<p>$error</p><br>";
            }
            
        else
            {
            //Here's the form for the input
            ?>
            <form name="send" method="post" action="compose.php">
            <table width="80%">
              <tr>
                <td width="150px" align="left" valign="top"><p>Send Message To:</p></td>
                <td width="" align="left" valign="top"><input name="username" type="text" id="username" value="<?php echo "$reciever"; ?>"></td>
              </tr>
              
              <tr>
                <td width="150px" align="left" valign="top"><p>Message Subject:</p></td>
                <td width="" align="left" valign="top"><input name="subject" type="text" id="subject" value="<?php echo "$subject"; ?>"></td>
              </tr>
              
              <tr>
                <td width="150px" align="left" valign="top"><p>Message Body:</p></td>
                <td width="" align="left" valign="top"><textarea name="message" type="text" id="message" value="" cols="50" rows="10"></textarea></td>
              </tr>
                  
              <tr>  
                <td></td>
                <td><input type="submit" name="Submit" value="Send Message"></td>
              </tr>
            </table>
            </center>
            </form>
            <?php
            }
        }    
    ?>

I'm not a professional coder by any means so I suppose I need to ask if I should set up a new variable in compose.php ? I must be missing something...

 

I added the $_GET['replyto'] here:

<tr>
                <td width="150px" align="left" valign="top"><p>Send Message To:</p></td>
                <td width="" align="left" valign="top"><input name="username" type="text" id="username" value="<?php echo $_GET['replyto'];?>"></td>
              </tr>

When the reply link is clicked it places "$sender" in the field and not the actual value of the member's username...

The link should look like this (in context in viewmsg.php

            <b><p><a href="inbox.php">Inbox</a> | <a href="compose.php">Compose</a> |<a href="compose.php?replyto=<?php echo $sender?>">Reply to this message</a> | <a href="sent.php">Sentbox</a></b>
            <b><p><?php echo "$pm_count"." of 50 Total  |  "."$percent"."% full"; ?></p></b>

Then in compose try something like:

       else
            {
            if ($_GET['replyto']!='') $receiver=$_GET['replyto'];
            //Here's the form for the input
            ?>

Okay....nevermind, I see what you were saying there. The $_GET command never worked for me, but what I was able to do was:

 

- Created a compose2.php page which was simply a duplicate of compose.php.

- Changed the reply link to:

<a href="compose2.php?replyto=<?php echo $sender?>">

------- as you suggested :)

 

 

And then finally changed the value of the sender form to:

<input name="username" type="text" id="username" value="<?php echo $_GET['replyto'];?>">

So now it officially works and I didn't have to alter the original compose.php page! I probably just wasn't placing your $_GET code in the correct spot, but this seems to be working efficiently.

 

I greatly appreciate your help, you certainly led me to a quick fix. Thank you so much Freak Dr.

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.