При помощи php можно "отправлять сообщения" друг другу. Предположим что у на сайте есть пользователи и необходимо организовать систему личных сообщений.
Для реализации этого нам потребуются: таблица в БД для сообщений, скрипт для отправки сообщений и скрипт для чтения сообщений.
Идем по порядку-таблица. В таблице будут следующие поля: id, дата отправки, отправитель, получатель, содержимое сообщения и флаг.
Код создания таблицы будет выглядеть так, назовем её messages.
Дамп таблицы
CREATE TABLE IF NOT EXISTS `messages` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`data` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`from` int(11) NOT NULL,
`to` int(11) NOT NULL,
`message` text NOT NULL,
`flag` int(11) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
В поле data будет дата отправки сообщения,поле from-уникальный номер отправителя,to-номер получателя,message-само сообщение и поле flag-отметка о том-прочтено сообщение или ещё нет.
Теперь займемся клиентской частью-напишем форму отправки сообщения и php обработчик формы отправки.
Форма отправки и обработчик
В форме отправки нам потребуется ввести сам текст сообщения и выбрать адресата. В форме укажем обработчик и метод передачи.
Подробнее о формах в phpчитайте тут.
Форма ввода сообщения
<form action="send_mess.php" method="post" enctype="multipart/form-data">
Адресат: <br />
<select name="to">
<option value="1">Костик
<option value="2">Васёк
<option value="3">Колька
<option value="4">Инокентий
</select>
Текст сообщения: <br /><textarea name="message"></textarea><br />
<input type="submit" value="Отправить" />
</form>
Обработчик отправки сообщения
Обработчик должен принять данные формы и записать их в БД.
/**
* Принимаем постовые данные. Очистим сообщение от html тэгов
* и приведем id получателя к типу integer
*/
$message= htmlspecialchars($_POST['message']);
$to=(int)$_POST['to'];
/**
* Я использую библиотеку PDO
*/
$db_user='db_username';
$db_name='db_name';
$db_pass='db_userpassword';
$db = new PDO('mysql:dbname='.$db_name.'; host=localhost',$db_user,$db_pass);
$db->exec("SET CHARACTER SET utf8");
$sql="insert into messages (u_from,u_to,message,flag) values
(:u_from,:u_to,:message,:flag)";
$sth=$db->prepare($sql);
$sth->bindValue(':u_from', 1);// тут 1-это номер отправителя
$sth->bindValue(':u_to', $to);
$sth->bindValue(':message', $message);
$sth->bindValue(':flag', 0);
$sth->execute();
$error=$sth->errorInfo();
/**
* Проверка результата запроса
*/
if($error[0]==0){
echo 'Сообщение успешно отправлено';
}else{
echo 'Ошибка отправки сообщения';
}
Вот таким образом можно отправить сообщение одному пользователю от другого.
В моем скрипте сообщение отправляется от пользователя с id=1. В вашем случае адрес отправителя берется из массива $_SESSION или $_COOKIE, смотря как у вас устроен сайт.
Теперь напишем скрипт, который выведет все сообщения,адресованные конкретному пользователю. Опять же подтягивайте номер пользователя из сессии или куки.
/**
* Номер пользователя,для которого отображать сообщения
*/
$u_id=1;
$db_user='db_username';
$db_name='db_name';
$db_pass='db_userpassword';
$db = new PDO('mysql:dbname='.$db_name.'; host=localhost',$db_user,$db_pass);
$db->exec("SET CHARACTER SET utf8");
/**
* Достаем сообщения
*/
$sql="select * from messages where u_to=? order by id desc";
$sth=$db->prepare($sql);
$sth->bindParam(1,$u_id,PDO::PARAM_INT);
$sth->execute();
$res=$sth->fetchAll(PDO::FETCH_ASSOC);
foreach ($res as $row){
И наконец последний скрипт, предназначенный для чтения сообщения из базы и отображения его пользователю.
Чтение сообщения
/**
* Номер пользователя
*/
$u_id=1;
/**
* Получаем номер сообщения. Приводим его типу Integer
*/
$id_mess=(int)$_GET['id'];
$db_user='db_username';
$db_name='db_name';
$db_pass='db_userpassword';
$db = new PDO('mysql:dbname='.$db_name.'; host=localhost',$db_user,$db_pass);
$db->exec("SET CHARACTER SET utf8");
/**
* Достаем сообщение. Помимо номера сообщения ориентируемся и на id пользователя
* Это исключит возможность чтения чужого сообщения, методом подбора id сообщения
*/
$sql="select * from messages where u_to = :u_to and id = :id_mess";
$sth=$db->prepare($sql);
$sth->bindParam(':u_to',$u_id,PDO::PARAM_INT);
$sth->bindParam(':id_mess',$id_mess,PDO::PARAM_INT);
$sth->execute();
$res=$sth->fetch(PDO::FETCH_ASSOC);
/**
* Установим флаг о прочтении сообщения
*/
$sql="update messages set flag = 1 where u_to = :u_to and id = :id_mess";
$sth=$db->prepare($sql);
$sth->bindParam(':u_to',$u_id,PDO::PARAM_INT);
$sth->bindParam(':id_mess',$id_mess,PDO::PARAM_INT);
$sth->execute();
/**
* Выводим сообщение с датой отправки
*/
if($res['id']<>''){
echo '<div>'.$res['message'].'</div>Дата отправки: '.$res['data'];
}else{
echo 'Данного сообщения не существует или оно предназначено не вам.';
}
echo 'Сообщение №'.$row['id'].' <a href="read_mess.php?id='.$row['id'].'">О
Вот и всё. Если вы поняли как Всё это работает - вы сможете сами сделать список отправленных сообщений. С помощью поля flag можно подсвечивать новые/непрочитанные сообщения.
Задавайте ваши вопросы. Все скрипты приаттачены к статье,качайте. На этом всё :)
Ссылки по теме