View Full Version : Resolved Reply button?
liamallan
03-29-2010, 01:47 PM
hey guys, i been trying to figure out how to create a reply button for a messaging script written in php. it feels like i have been googling forever to try find an answer but with no results! does anyone know how to go about this? or do u know of any good tutorials on the subject? help would be massively appreciated! thanx
Which part of the reply button are you having trouble with? The submit to database part, how it would find the right thread to go to, or something else?
liamallan
03-29-2010, 02:06 PM
the whole thing lol when a user recieves a message, they have to navigate to compose.php and remember the users name in order to reply.
here is compose.php:
<?php
session_start();
$user = $_SESSION['username'];
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>Blah blah you arent logged in and stuff, you should do that or something</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 users WHERE username='$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';
?>
<br>
<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 username FROM users WHERE username='$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 users WHERE username='$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 untill 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 users SET pm_count='$pm_count' WHERE username='$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, and don\'t make stuff up at random.';
}
}
}
//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>Username</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>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
}
}
?>
liamallan
03-29-2010, 02:07 PM
and viewmsg.php:
<?php
session_start();
$user = $_SESSION['username'];
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>Blah blah you arent logged in and stuff, you should do that or something</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 users WHERE username='$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
?>
<br>
<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 "../user/profile.php?user_name=$sender"; ?>"><?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>It appears you are trying to view someone else's private message. Please view your own private messages, or go away.</p>
<?php
}
}
?>
if u need more info, just let me know
So just do something like this:
<a href="compose.php">Reply</a>
Right? Or am I not getting something?
liamallan
03-29-2010, 02:14 PM
i was thinking about having the senders username pre-inserted into the reciever field so there is no need for user to look for the senders name
liamallan
03-29-2010, 02:21 PM
do u know how i could do that?
Well, do something like this:
<a href="compose.php?user=$_GET['username_reply']">Reply</a>
And then in compose.php the user would be that.
liamallan
03-29-2010, 04:33 PM
i tried your method, but no joy. i also tried various tinkering, with no joy.
this is where im at now:
<?php echo "<a href=\"compose.php?username=$sender\">Reply</a>"?>
still dont seem to work, you have to select a user from a dropdown menu, do u think that might have something to do with it?
it still loads the page and the url in status bar is '......compose.php?username=liamallan'
Well - once you do that, take the value of the "TO:" input, and do:
value="<?php echo htmlentities($_GET['username']); ?>"
liamallan
03-29-2010, 06:06 PM
thanx mate, it worked like a charm!!
Glad to help you! Your welcome!
It seems your topic is solved... Please set the status to resolved.. To do this:
Go to your first post ->
Edit your first post ->
Click "Go Advanced" ->
Then in the drop down next to the title, select "RESOLVED"
Powered by vBulletin® Version 4.2.2 Copyright © 2021 vBulletin Solutions, Inc. All rights reserved.