Система за съобщения между потребителите

Автор: chalgoman

Ако имате сайт на PHP с MySQL база данни обаче няма възможност за изпращане на саъобщения между потребителите на сайта, тогава можете да използвате този class. Не ви гарантирам обаче, че няма никакви бъгове, понеже все още не е тестван по обстойно и не мога да бъда сигурен, но ако се появи някой бъг, пишете тук в коментарите и аз ще го оправя :). Така ето го и самият скрипт:
Създавате си файл в който да сложите следният скрипт (например messages.class.php):

<?php

class messages {
var $real_or_get=1;
var $url="index.php?page=messages";
var $db_host="localhost";
var $db_user="user";
var $db_pass="pass";
var $db_name="msg_system";
var $users_table="users";
var $usrnm_field="username";

function show_menu($usr,$new_msg,$inbox,$outbox,$sent,$recylce_bin,$drafts,$razdelitel) {
mysql_connect($this->db_host,$this->db_user,$this->db_pass) or die ( 'Error with MySQL!' );
mysql_select_db($this->db_name) or die( "Cannot find DB!");

if ($this->real_or_get==0) {
$vars="?mode=";
}
if ($this->real_or_get==1) {
$vars="&mode=";
}

if (isset($new_msg)) {
print "<a href=\"".$this->url.$vars."new_msg\">".$new_msg."</a>";
}
print $razdelitel;
if (isset($inbox)) {
print "<a href=\"".$this->url.$vars."inbox\">";

$sql="SELECT * FROM messages WHERE `to`='".$usr."' AND `mode2`='3'";
$query=mysql_query($sql);
$a1=mysql_num_rows($query);
$sql="SELECT * FROM messages WHERE `to`='".$usr."' AND `mode2`='2'";
$query=mysql_query($sql);
$u=mysql_num_rows($query);
$a=$a1+$u;
printf ($inbox,$a,$u);
print "</a>";
}
print $razdelitel;
if (isset($outbox)) {
print "<a href=\"".$this->url.$vars."outbox\">".$outbox."</a>";
}
print $razdelitel;
if (isset($sent)) {
print "<a href=\"".$this->url.$vars."sent\">".$sent."</a>";
}
print $razdelitel;
if (isset($recylce_bin)) {
print "<a href=\"".$this->url.$vars."recycle_bin\">".$recylce_bin."</a>";
}
print $razdelitel;
if (isset($drafts)) {
print "<a href=\"".$this->url.$vars."drafts\">".$drafts."</a>";
}

}

function show_main($usr,$receiver,$w_msg,$r_size,$t_size,$cols,$rows,$sub_but,$dr_or_not,$title) {
mysql_connect($this->db_host,$this->db_user,$this->db_pass) or die ( 'Error with MySQL!' );
mysql_select_db($this->db_name) or die( "Cannot find DB!");
if ($this->real_or_get==0) {
$vars="?mode=";
}
if ($this->real_or_get==1) {
$vars="&mode=";
}

if (isset($_GET['mode'])) {
if ($_GET['mode']=="new_msg") {
if (!$_GET['msg_id']) {
echo "<form action=\"".$this->url.$vars."new_msg\" method=\"POST\">";
echo $receiver." <input type=\"text\" name=\"receiver\" size=\"".$r_size."\">";
echo "<input type=radio name=\"drmode\" value=\"0\" checked> ".$dr_or_not." <input type=\"radio\" name=\"drmode\" value=\"1\">";
echo "<BR>";
echo $title."<input type=\"text\" name=\"title\" size=\"".$t_size."\">";
echo "<BR>";
echo $w_msg." <textarea name=\"message\" cols=\"".$cols."\" rows=\"".$rows."\"></textarea>";
echo "<BR>";
echo "<input type=\"hidden\" name=\"send\" value=\"1\">";
echo "<input type=\"submit\" value=\"".$sub_but."\">";
echo "</form>";
} else {
$sql="SELECT * FROM messages WHERE `ID`='".$_GET[msg_id]."' AND (`from`='".$usr."' OR `to`='".$usr."')";
$query=@mysql_query($sql);
$rows2=@mysql_num_rows($query);
if ($rows2==0) { echo "There is no such message or it's not your!"; }
else {
echo "<form action=\"".$this->url.$vars."new_msg\" method=\"POST\">";
echo $receiver." <input type=\"text\" name=\"receiver\" size=\"".$r_size."\" value=\"".mysql_result($query,0,to)."\">";
echo "<input type=radio name=\"drmode\" value=\"0\" checked> ".$dr_or_not." <input type=\"radio\" name=\"drmode\" value=\"1\">";
echo "<BR>";
echo $title."<input type=\"text\" name=\"title\" size=\"".$t_size."\" size=\"".$r_size."\" value=\"".mysql_result($query,0,title)."\">";
echo "<BR>";
echo $w_msg." <textarea name=\"message\" cols=\"".$cols."\" rows=\"".$rows."\">".mysql_result($query,0,message)."</textarea>";
echo "<BR>";
echo "<input type=\"hidden\" name=\"send\" value=\"1\">";
echo "<input type=\"submit\" value=\"".$sub_but."\">";
echo "</form>";
}
}
if ($_POST['send']==1) {
if ($_POST['drmode']==0 && !$_POST['receiver']) {
echo "<BR>Please enter Receiver!";
$error=1;
}
if (!$_POST['title']) {
echo "<BR>Please enter Title!";
$error=1;
}
if (!$_POST['message']) {
echo "<BR>Please enter Message!";
$error=1;
}
if ($_POST['receiver']==$usr) {
echo "<BR>You cannot send messages to you!";
$error=1;
}
if (!$error) {
$sql="SELECT * FROM ".$this->users_table." WHERE ".$this->usrnm_field."='".$_POST['receiver']."'";
$query=mysql_query($sql);
if (mysql_num_rows($query)==0 && $_POST['drmode']==0) {
echo "There is no such user!";
} else {
if ($_POST['drmode']==0) {
$date=date(Y."-".m."-".d." ".H.":".i.":".s);
$title=str_replace ("<", "<",$_POST['title']);
$title=str_replace (">", ">",$_POST['title']);
$message=str_replace ("<", "<",$_POST['message']);
$message=str_replace (">", ">",$_POST['message']);
$sql="INSERT INTO messages (`from`,`to`,`mode1`,`mode2`,`date`,`title`,`message`) VALUES ('".$usr."','".$_POST['receiver']."','2','2','".$date."','".$title."','".$message."')";
$query=mysql_query($sql);
if (!$query) die (mysql_error());
echo "Message was sent successful!";
}
if ($_POST['drmode']==1) {
$date=date(Y."-".m."-".d." ".H.":".i.":".s);
$title=str_replace ("<", "<",$_POST['title']);
$title=str_replace (">", ">",$_POST['title']);
$message=str_replace ("<", "<",$_POST['message']);
$message=str_replace (">", ">",$_POST['message']);

$sql="INSERT INTO messages (`from`,`to`,`mode1`,`mode2`,`date`,`title`,`message`) VALUES ('".$usr."','','4','0','".$date."','".$title."','".$message."')";
$query=mysql_query($sql);
if (!$query) die (mysql_error());
echo "Message was sent successful!";
}
}
}
}
}
if ($_GET['mode']=="inbox") {
$sql="SELECT * FROM messages WHERE `to`='".$usr."' AND (`mode2`='3' OR `mode2`='2')";
$query=mysql_query($sql);
$rows=mysql_num_rows($query);
for ($i=0; $i<$rows; $i++) {
if (mysql_result($query,$i,mode2)==2){
print "<a href=\"".$this->url.$vars."read_msg&msg_id=".mysql_result($query,$i,ID)."\"><B>From: ".mysql_result($query,$i,from)." - ".mysql_result($query,$i,title)." - ".mysql_result($query,$i,date)."</B></a> - <a href=\"".$this->url.$vars."strb&msg_id=".mysql_result($query,$i,ID)."\">Delete</a> - <a href=\"".$this->url.$vars."stdr&msg_id=".mysql_result($query,$i,ID)."\">Send to Drafts</a><BR>";
}
if (mysql_result($query,$i,mode2)==3){
print "<a href=\"".$this->url.$vars."read_msg&msg_id=".mysql_result($query,$i,ID)."\">From: ".mysql_result($query,$i,from)." - ".mysql_result($query,$i,title)." - ".mysql_result($query,$i,date)."</a> - <a href=\"".$this->url.$vars."strb&msg_id=".mysql_result($query,$i,ID)."\">Delete</a> - <a href=\"".$this->url.$vars."stdr&msg_id=".mysql_result($query,$i,ID)."\">Send to Drafts</a><BR>";
}

}

}

if ($_GET['mode']=="outbox") {
$sql="SELECT * FROM messages WHERE `from`='".$usr."' AND `mode1`='2'";
$query=mysql_query($sql);
for ($i=0; $i<mysql_num_rows($query); $i++) {
print "<a href=\"".$this->url.$vars."read_msg&msg_id=".mysql_result($query,$i,ID)."\">From: ".mysql_result($query,$i,from)." - ".mysql_result($query,$i,title)." - ".mysql_result($query,$i,date)."</a> - <a href=\"".$this->url.$vars."strb&msg_id=".mysql_result($query,$i,ID)."\">Delete</a> - <a href=\"".$this->url.$vars."stdr&msg_id=".mysql_result($query,$i,ID)."\">Send to Drafts</a><BR>";
}
}

if ($_GET['mode']=="sent") {
$sql="SELECT * FROM messages WHERE `from`='".$usr."' AND `mode1`='3'";
$query=mysql_query($sql);
for ($i=0; $i<mysql_num_rows($query); $i++) {
print "<a href=\"".$this->url.$vars."read_msg&msg_id=".mysql_result($query,$i,ID)."\">From: ".mysql_result($query,$i,from)." - ".mysql_result($query,$i,title)." - ".mysql_result($query,$i,date)."</a> - <a href=\"".$this->url.$vars."strb&msg_id=".mysql_result($query,$i,ID)."\">Delete</a> - <a href=\"".$this->url.$vars."stdr&msg_id=".mysql_result($query,$i,ID)."\">Send to Drafts</a><BR>";
}
}

if ($_GET['mode']=="recycle_bin") {
$sql="SELECT * FROM messages WHERE (`from`='".$usr."' AND `mode1`='1') OR (`to`='".$usr."' AND `mode2`='1')";
$query=mysql_query($sql);
for ($i=0; $i<mysql_num_rows($query); $i++) {
print "<a href=\"".$this->url.$vars."read_msg&msg_id=".mysql_result($query,$i,ID)."\">From: ".mysql_result($query,$i,from)." - ".mysql_result($query,$i,title)." - ".mysql_result($query,$i,date)."</a> - <a href=\"".$this->url.$vars."restore&msg_id=".mysql_result($query,$i,ID)."\">Restore</a> - <a href=\"".$this->url.$vars."del&msg_id=".mysql_result($query,$i,ID)."\">Delete</a><BR>";
}
}

if ($_GET['mode']=="drafts") {
$sql="SELECT * FROM messages WHERE (`from`='".$usr."' AND `mode1`='4') OR (`to`='".$usr."' AND `mode2`='4')";
$query=mysql_query($sql);
for ($i=0; $i<mysql_num_rows($query); $i++) {
print "<a href=\"".$this->url.$vars."read_msg&msg_id=".mysql_result($query,$i,ID)."\">From: ".mysql_result($query,$i,from)." - ".mysql_result($query,$i,title)." - ".mysql_result($query,$i,date)."</a> - <a href=\"".$this->url.$vars."strb&msg_id=".mysql_result($query,$i,ID)."\">Delete</a> - <a href=\"".$this->url.$vars."new_msg&msg_id=".mysql_result($query,$i,ID)."\">Send</a><BR>";
}
}

if ($_GET['mode']=="read_msg") {
$sql="SELECT * FROM messages WHERE `ID`='".$_GET[msg_id]."' AND (`from`='".$usr."' OR `to`='".$usr."')";
$query=@mysql_query($sql);
if (mysql_num_rows($query)==0) {
print "There is no such message or you are not it's owner!";
} else {
echo "From: ".mysql_result($query,0,from)."<BR>";
if (mysql_result($query,0,to)<>"") {
echo "To: ".mysql_result($query,0,to)."<BR>";
} else {
echo "To: No receiver<BR>";
}
echo "Date: ".mysql_result($query,0,date)."<BR>";
echo "Title: ".mysql_result($query,0,title)."<BR>";
$msg_to_output=str_replace (" "," ",mysql_result($query,0,message));
echo "Message: ".nl2br($msg_to_output);
if (mysql_result($query,0,mode2)==2 && mysql_result($query,0,to)==$usr) {
$sql2="UPDATE messages SET `mode2`='3' WHERE `ID`='".$_GET['msg_id']."'";
$query2=@mysql_query($sql2);
}
if (mysql_result($query,0,mode1)==2 && mysql_result($query,0,to)==$usr) {
$sql2="UPDATE messages SET `mode1`='3' WHERE `ID`='".$_GET['msg_id']."'";
$query2=@mysql_query($sql2);
}
}

}
if ($_GET['mode']=="strb") {
$sql="SELECT * FROM messages WHERE `ID`='".$_GET[msg_id]."'";
$query=@mysql_query($sql);
$rows=mysql_num_rows($query);
if ($rows==0) { echo "There is no such message!"; } else {
if (mysql_result($query,0,to)==$usr) {
$sql="UPDATE messages SET `mode2`='1' WHERE `to`='".$usr."' AND ID='".$_GET[msg_id]."'";
}
if (mysql_result($query,0,from)==$usr) {
$sql="UPDATE messages SET `mode1`='1' WHERE `from`='".$usr."' AND ID='".$_GET[msg_id]."'";
}
$query=mysql_query($sql);
if ($query) {echo "Message has been sent to the Recycle bin.";} else {echo "I can't find this message or it's not your!";}
}
}
if ($_GET['mode']=="del") {
$sql="SELECT * FROM messages WHERE `ID`='".$_GET[msg_id]."'";
$query=@mysql_query($sql);
$rows=mysql_num_rows($query);
if ($rows==0) { echo "There is no such message!"; } else {
if (mysql_result($query,0,to)==$usr) {
$sql="UPDATE messages SET `mode2`='0' WHERE `to`='".$usr."' AND ID='".$_GET[msg_id]."'";
}
if (mysql_result($query,0,from)==$usr) {
$sql="UPDATE messages SET `mode1`='0' WHERE `from`='".$usr."' AND ID='".$_GET[msg_id]."'";
}
$query=mysql_query($sql);
if ($query) {echo "Message has been deleted.";} else {echo "I can't find this message or it's not your!";}
}
}
if ($_GET['mode']=="restore") {
$sql="SELECT * FROM messages WHERE `ID`='".$_GET[msg_id]."'";
$query=@mysql_query($sql);
$rows=mysql_num_rows($query);
if ($rows==0) { echo "There is no such message!"; } else {
if (mysql_result($query,0,to)==$usr) {
$sql="UPDATE messages SET `mode2`='3' WHERE `to`='".$usr."' AND ID='".$_GET[msg_id]."'";
}
if (mysql_result($query,0,from)==$usr) {
$sql="UPDATE messages SET `mode1`='3' WHERE `from`='".$usr."' AND ID='".$_GET[msg_id]."'";
}
$query=mysql_query($sql);
if ($query) {echo "Message has been restored.";} else {echo "I can't find this message or it's not your!";}
}
}
if ($_GET['mode']=="stdr") {
$sql="SELECT * FROM messages WHERE `ID`='".$_GET[msg_id]."'";
$query=@mysql_query($sql);
$rows=mysql_num_rows($query);
if ($rows==0) {
print "There is no such message!";
} else {
if (mysql_result($query,0,to)==$usr) {
$sql="UPDATE messages SET `mode2`='4' WHERE `to`='".$usr."' AND ID='".$_GET[msg_id]."'";
}
if (mysql_result($query,0,from)==$usr) {
$sql="UPDATE messages SET `mode1`='4' WHERE `from`='".$usr."' AND ID='".$_GET[msg_id]."'";
}
$query=mysql_query($sql);
if ($query) {echo "Message has been sent to the Drafts.";};
}
}
}
}
}

Следващото нещо което трябва да направите е да настроите скрипта според вашите нужди, а именно:

public $real_or_get=1; – Tук ако адреса до файла за съобщенията ще е например http://sait.com/messages.php, тогава пишете 0, а ако ще е например http://sait.com/index.php?page=messages тогава пишете 1.

public $url=“index.php?page=messages“; – Тук пишете самия адрес (не адреса до файла съдържащ горният код, а до един друг който ще създадем малко по късно).

public $db_host=“localhost“; – Тук се пише хоста на базата данни

public $db_user=“user“; – Тук потребителското и име

public $db_pass=“pass“; – а тук паролата за базата данни

public $db_name=“msg_system“; – тук пишете името на базата данни

public $users_table=“users“; – тук се пише името на таблицата в базата данни в която се записват потребителите

public $usrnm_field=“username“; – а тук точно това поле в тази таблица, в което се записват потребителските имена на потребителите.

Сега трябва да създадем една таблица в базата данни на сайта:

CREATE TABLE `messages` (
`ID` tinyint(12) NOT NULL auto_increment,
`from` varchar(100) collate latin1_general_ci NOT NULL default '',
`to` varchar(100) collate latin1_general_ci NOT NULL default '',
`mode1` tinyint(1) NOT NULL default '0',
`mode2` tinyint(1) NOT NULL default '0',
`date` datetime NOT NULL default '0000-00-00 00:00:00',
`title` varchar(100) collate latin1_general_ci NOT NULL default '',
`message` text collate latin1_general_ci NOT NULL,
PRIMARY KEY (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=1 ;

Така, вече сме почти готови. Сега остана само да създадем един файл например messages.php (този файл на който написахте адреса в конфигурацията по-горе).
Този файл си е с дизайна на сайта, и вътр пишем първо:

$test=new messages();

След това където искаме да е менюто на системата пишем следното:

$test->show_menu("test","New message","Inbox (%d/%d)","Outbox","Sent","Recycle bin","Drafts"," | ");

Като тук замествате следните неща:
test – На това място слагате някоя променлива в която се записва потребителското име на потребителя като влезе в сайта. Това е подателя на съобщението.
New message – Какъв да е линкът за ново съобщение в менюто.
Inbox (%d/%d) – Същото като предното, обаче за входящата кутия. Тук в менюто вместо първото %d ще се появи броя на всички входящи съобщения, а вместо второто – броят на непрочетените.
Следващите няколко са за същото както и предните 2.
| – Това е разделител между линковете в менюто. Можете да сложите например <BR> и тогава линковете ще са един под друг.

След това добавяте реда следващия ред, там където искате да се появяват опциите, например формата за писане на съобщение, самите съобщения и т.н.:

$test->show_main("test","Send to:  ","Message:",25,30,23,10,"Send...","or Save in drafts:","Title:        ");

Тук test е същото както и в предния ред.
Следващите са за това как да изглежда формата за писане на съобщение. Само за нея съм направил така да може да се променя, защото за другите ме домързя 🙂 . Всичко е на английски защото така повече ми хареса (не съм сигурен дали няма грешки), но вие можете лесно да си го преведете.

Е това е. Ако имате някакви въпроси можете да питате тук. Надявам се да ви хареса.

Вашият коментар