Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.73/11: Рейтинг темы: голосов - 11, средняя оценка - 4.73
1 / 1 / 1
Регистрация: 19.12.2013
Сообщений: 161

Личные сообщения | Все сообщения одному человеку | Сессии

02.12.2015, 12:55. Показов 2188. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите пожалуйста, у меня проблема. Пишу код личных сообщений, все хорошо, но я не могу понять как можно в сессию записать разные значения из БД в соответствии с тем по какой кликнули кнопке. Есть кнопка Подробнее, кликнув по которой получают подробное личное сообщение. В сессию сохраняю - сообщение, заголовок, от кого, дату и айдишник данного сообщения. Конечно, может есть лучше вариант сохранения - я сессию только писать начал, собственно поэтому и прошу помощи. Вот код.

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<?php
include ("database.php");
/**
 * Номер пользователя,для которого отображать сообщения
 */
session_start();
//выполнение запроса на выборку данных из базы
$query = mysql_query('select * from messages where `to` = "Владимир"');
//Делаем представление выборки в виде массива
while($arr = mysql_fetch_assoc($query)){
    $data = date('d.m H:i:s', strtotime($arr['data'])); //делаем нужную нам дату для вывода пользователю в сообщении
    $title = $arr['title']; // Берем заголовок из базы данных для письма
        echo "<div class='p_mess' style='width: 300px; background-color: lightgray;'>
        Дата получения: ".$data."<br/>
        Заголовок письма: <span style='font-weight: bold; font-size: 20px;'>".$title."</span><br/>
        <div>"; // делаем форму личных сообщений с классом p_mess
        echo "<form action='read_mess.php' method='post'>
            <input type='submit' name='subbut' value='Подробнее'/>
        </form>";//Форма кнопки "Подробнее"     
 
}
        if($_POST['subbut']){
            $_SESSION['u_id_db'] = $arr['id'];
            $_SESSION['u_to_db'] = $arr['to'];
            $_SESSION['u_from_db'] = $arr['from'];
            $_SESSION['u_data_db'] = $arr['data'];
            $_SESSION['u_title_db'] = $arr['title'];
            $_SESSION['u_msg_db'] = $arr['message'];
        }
  echo "<pre>";
  print_r($_SESSION);
 
  echo "</pre>";        
 
mysql_close(); 
?>
То что она после while идет можете не обращать внимания я пробовал и в цикле это проделать - фигня. Буду рад любой помощи, к мануалам не посылать, так как в них моей проблемы нет, но тем не менее я их и так прочитываю. Если всё же пошлете - то скажите что именно в нем прочесть. Так же у меня проблема со вторым кодом - после удаления сессии - в сессию переменные не назначаются. Вот код:

PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php
//подключение файла с подключением к базе
include("database.php");
session_start();
  echo "<pre>";
 
  print_r($_SESSION);
 
  echo "</pre>";
$id = $_SESSION['u_id_db'];
$to = $_SESSION['u_to_db']; 
$from = $_SESSION['u_from_db']; 
$data = $_SESSION['u_data_db'];
$title = $_SESSION['u_title_db'];
$msg = $_SESSION['u_msg_db'];
/*
//выполнение запроса на выборку данных из базы
$query = mysql_query('select * from messages where `to` = "Владимир" and `id` = "'.$id.'"');
//Делаем представление выборки в виде массива
while($arr = mysql_fetch_array($query)){
    */
    //$data = date('d.m H:i:s', strtotime($arr['data'])); //делаем нужную нам дату для вывода пользователю в сообщении
        echo "<div class='p_mess' style='width: 300px; background-color: lightgray;'>
        Дата получения: ".$data."<br/>
        Вам пришло письмо от ".$from.":<br/>
        <h2>".$title."</h2><br/>
        ".$msg."
        <div>
        <form action='mess.php' method='post'>
        <input type='submit' value='Перейти обратно к списку сообщений' name='back'/>
        </form>"; // делаем форму личного сообщения с классом p_mess
/*}*/
session_destroy();
mysql_close();
?>
В основном у меня три проблемы: проблема с изменением сессии(зависящее от кнопки), проблема с выводом данных в зависимости от того кнопку какого сообщения нажали и учет возврата к списку, чтобы сессии нормально изменяли информацию.

Благодарю за любую оказанную помощь)
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
02.12.2015, 12:55
Ответы с готовыми решениями:

Группировать и сортировать личные сообщения
Как сгруппировать сообщения? Делаю так: $qMess = mysqli_query($connect,&quot;SELECT * FROM `messages` WHERE (m_to='&quot;.$user.&quot;')...

Личные сообщения. Что делать с большими словами?
Возможно ошибся разделом. :( Сообщения отображаются в блоке шириной 590px. Если пользователь вводит что-то длиннее и без пробелов, то это...

Личные сообщения
Подскажите, как реализовываются личные сообщения на сайте?Я думал, но не понял, а гугл ничего недал...

7
 Аватар для UchihaSV
285 / 234 / 113
Регистрация: 08.06.2013
Сообщений: 725
02.12.2015, 14:10
Лучший ответ Сообщение было отмечено And_Smi как решение

Решение

Зачем передавать данные сообщения через пост для его подробного отображения.
Просто передавай id сообщения через гет, и делай выборку из базы данных, при подробном отображении.

И зачем в базе в таблице messages, полю to давать имя пользователя? А если пользователь имя сменит или еще что? Туда лучше ложить id пользователя.

В коде изменить на такое:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//Это mess.php
.......
.......
//Это ссылка на подробное сообщение вместо формы
echo "<a href='read_mess.php?id=".$arr['id']."'>Подробнее</a>";
.......
.......
----------------------------------------------------------------------------------
//Это read_mess.php
include("database.php");
$query = mysql_query("select * from messages where `id` = ".$_GET['id']);
//Ну и тут отображаем данные из сообщения
.......
.......
//Ставим ссылку на список сообщений вместо формы
echo "<a href='mess.php'>Назад к списку сообщений</a>";
И сессии тут не нужны.
1
1 / 1 / 1
Регистрация: 19.12.2013
Сообщений: 161
02.12.2015, 14:22  [ТС]
UchihaSV, спасибо большущее))) Да и вправду не нужны.... Чет я не допер до такого. Ещё раз спасибо)

Добавлено через 3 минуты
UchihaSV, единственный вопрос остался незакрытый - если удобнее использовать id пользователя, то как вытаскивать его имя? Вот у меня есть:

HTML5
1
2
3
4
5
6
7
8
9
10
11
12
<form action="send_mess.php" method="post" enctype="multipart/form-data">
    Адресат: <br />
    <select name="to">
        <option value="Алексей">Алексей</option>
        <option value="Виталий">Виталий</option>
        <option value="Владимир">Владимир</option>
        <option value="Сергей">Сергей</option>
    </select><br/>
    Заголовок письма: <br/><input type="text" name="title" size="20"/><br/>
    Текст сообщения: <br /><textarea name="message"></textarea><br />
    <input type="submit"  value="Отправить" />
</form>
Вместо имен в валью опций были как раз 1-4, но мне интересно как мне тогда в самом сообщении прописать не 1 скажем, а Алексей или не 4 а Сергей? А так да, я тоже считаю удобным способом по id делать.
0
162 / 161 / 66
Регистрация: 28.06.2015
Сообщений: 576
02.12.2015, 14:26
Цитата Сообщение от And_Smi Посмотреть сообщение
если удобнее использовать id пользователя, то как вытаскивать его имя?
Я думаю UchihaSV имел ввиду что по id который у вас храниться в бд, вы будете вытаскивать всю остальную информацию о пользователе, а получать этот id как раз из этой формы
0
1 / 1 / 1
Регистрация: 19.12.2013
Сообщений: 161
02.12.2015, 14:39  [ТС]
Xenox, то есть я правильно понимаю, что для этого уже нужна другая таблица где есть непосредственно айди и имя человека под этим айди?
0
162 / 161 / 66
Регистрация: 28.06.2015
Сообщений: 576
02.12.2015, 14:42
Ну если у вас есть таблица пользователей, у них же есть уникальные id? Вот их и можно использовать
0
1 / 1 / 1
Регистрация: 19.12.2013
Сообщений: 161
02.12.2015, 14:44  [ТС]
Xenox, понял) спасибо. Просто я сейчас чисто модуль делал личных сообщений и пользователей как таковых нету что в БД что на фронте)
0
Фрилансер
Эксперт PythonЭксперт JSЭксперт PHP
 Аватар для Azdeman
1871 / 1362 / 604
Регистрация: 12.01.2011
Сообщений: 5,470
02.12.2015, 14:47
Пишешь id как говорили выше.. а потом по этому id когда отображаешь письмо вытягиваешь по id имя пользователя.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
02.12.2015, 14:47
Помогаю со студенческими работами здесь

Личные сообщения php
Всем привет. Заметил на одном сайте такую интересную вещь: скажем я зарегистрировался на сайте и захожу в личные сообщения, ссылка этой...

В файле mail.tpl не выводится заголовок сообщения {$subject} и текст сообщения {$message}
ребят помогите разобраться, изначально у меня все выводилось через функцию popupWindow вот сама функция JS function...

Передача "id" сообщения, в ссылку внутри текста сообщения
Доброго времени суток ув.программисты, вобщем такая ситуация, пользователю пришло сообщение с предложением, ПРИНЯТь или ОТКЛОНИТЬ...

Удаление сообщения с БД (Передача того самого $n сообщения и удаление)
Пишу легкий чатик, но возникла идея - удаление сообщения (-й) Вообщем, с помощью данного кода: $query = mysql_query(&quot;SELECT * FROM...

Личные сообщения
делаю обмен личными сообщениями сделал в MySQL базу данных типа: id | from | to | message | read ну отправка сообщений это...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка. Рецензия / Мнение/ Перевод https:/ / **********/ gallery/ thinkpad-x220-tablet-porn-gzoEAjs . . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru