(495) 925-0049, ITShop интернет-магазин 229-0436, Учебный Центр 925-0049
  Главная страница Карта сайта Контакты
Поиск
Вход
Регистрация
Рассылки сайта
 
 
 
 
 

PHP скрипт сообщений

Источник: php-include

При помощи 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 можно подсвечивать новые/непрочитанные сообщения.

Задавайте ваши вопросы. Все скрипты приаттачены к статье,качайте. На этом всё :)

Ссылки по теме


 Распечатать »
 Правила публикации »
  Написать редактору 
 Рекомендовать » Дата публикации: 07.02.2012 
 

Магазин программного обеспечения   WWW.ITSHOP.RU
Delphi Professional Named User
Enterprise Connectors (1 Year term)
Allround Automation Direct Oracle Access Standard license
Quest Software. Toad for SQL Server Development Suite
Oracle Database Standard Edition 2 Processor License
 
Другие предложения...
 
Курсы обучения   WWW.ITSHOP.RU
 
Другие предложения...
 
Магазин сертификационных экзаменов   WWW.ITSHOP.RU
 
Другие предложения...
 
3D Принтеры | 3D Печать   WWW.ITSHOP.RU
 
Другие предложения...
 
Новости по теме
 
Рассылки Subscribe.ru
Информационные технологии: CASE, RAD, ERP, OLAP
Новости ITShop.ru - ПО, книги, документация, курсы обучения
СУБД Oracle "с нуля"
OS Linux для начинающих. Новости + статьи + обзоры + ссылки
Новые материалы
Каждый день новые драйверы для вашего компьютера!
Windows и Office: новости и советы
 
Статьи по теме
 
Новинки каталога Download
 
Исходники
 
Документация
 
 



    
rambler's top100 Rambler's Top100