+7 (495) 229-0436   shopadmin@itshop.ru 119334, г. Москва, ул. Бардина, д. 4, корп. 3
 
 
Вход
 
 
Каталог
 
 
Подписка на новости
Новости ITShop
Windows 7 и Office: Новости и советы
Обучение и сертификация Microsoft
Вопросы и ответы по MSSQLServer
Delphi - проблемы и решения
Adobe Photoshop: алхимия дизайна
 
Ваш отзыв
Оцените качество магазина ITShop.ru на Яндекс.Маркете. Если вам нравится наш магазин - скажите об этом Google!
 
 
Способы оплаты
 
Курс расчета
 
 1 у.е. = 91.78 руб.
 
 Цены показывать:
 
 
 
 
  
Новости, статьи, акции
 

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

07.02.2012 11:16

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

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

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

  
Помощь
Задать вопрос
 программы
 обучение
 экзамены
 компьютеры
Бесплатный звонок
ICQ-консультанты
Skype-консультанты

Общая справка
Как оформить заказ
Тарифы доставки
Способы оплаты
Прайс-лист
Карта сайта
 
Бестселлеры
Курсы обучения "Atlassian JIRA - система управления проектами и задачами на предприятии"
Microsoft Windows 10 Профессиональная 32-bit/64-bit. Все языки. Электронный ключ
Microsoft Office для Дома и Учебы 2019. Все языки. Электронный ключ
Курс "Oracle. Программирование на SQL и PL/SQL"
Курс "Основы TOGAF® 9"
Microsoft Office 365 Персональный 32-bit/x64. 1 ПК/MAC + 1 Планшет + 1 Телефон. Все языки. Подписка на 1 год. Электронный ключ
Курс "Нотация BPMN 2.0. Ее использование для моделирования бизнес-процессов и их регламентации"
 

О нас
Интернет-магазин ITShop.ru предлагает широкий спектр услуг информационных технологий и ПО.

На протяжении многих лет интернет-магазин предлагает товары и услуги, ориентированные на бизнес-пользователей и специалистов по информационным технологиям.

Хорошие отзывы постоянных клиентов и высокий уровень специалистов позволяет получить наивысший результат при совместной работе.

В нашем магазине вы можете приобрести лицензионное ПО выбрав необходимое из широкого спектра и ассортимента по самым доступным ценам. Наши менеджеры любезно помогут определиться с выбором ПО, которое необходимо именно вам. Также мы проводим учебные курсы. Мы приглашаем к сотрудничеству учебные центры, организаторов семинаров и бизнес-тренингов, преподавателей. Сфера сотрудничества - продвижение бизнес-тренингов и курсов обучения по информационным технологиям.



 

О нас

 
Главная
Каталог
Новинки
Акции
Вакансии
 

Помощь

 
Общая справка
Как оформить заказ
Тарифы доставки
Способы оплаты
Прайс-лист
Карта сайта
 

Способы оплаты

 

Проекты Interface Ltd.

 
Interface.ru   ITShop.ru   Interface.ru/training   Olap.ru   ITnews.ru  
 

119334, г. Москва, ул. Бардина, д. 4, корп. 3
+7 (495) 229-0436   shopadmin@itshop.ru
Проверить аттестат
© ООО "Interface Ltd."
Продаем программное обеспечение с 1990 года