Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Сообщение в модальном окне

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (2): [1] 2 »   

> Описание: Не получается помечать сообщение прочитанным
val
Отправлено: 06 Октября, 2011 - 22:12:37
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Окт. 2011  


Помог: 0 раз(а)




Здравствуйте, такая проблема:
сообщения хранятся в базе, выводятся на страничку скриптом, приведённым ниже. Непрочитанные сообщения имеют флажок red=1, прочитанные red=0. Хочу сделать, чтобы после открытия в модальном (всплывающем) окне открытое сообщение помечалось прочитанным, но никак не соображу, как это сделать. По условию:
PHP:
скопировать код в буфер обмена
  1. if ("document.getElementById('light_msg$msg_id').style.display='block';document.getElementById('fade').style.display='block'" == TRUE)

не только выбранное, а все сообщения помечаются прочитанными. Я уже понял, что это условие неверно, т.к. var_dump('any_string' == true); => bool(true).
Помогите, пожалуйста, решить проблему, как сделать так, чтобы помечалось то сообщение, для которого было открыто окно по ссылке.
Весь скрипт:
PHP:
скопировать код в буфер обмена
  1.  <?
  2.  #    Выборка сообщений для получателя    
  3. $query = mysql_query("select a.id, a.author, a.message, a.red from messages a, users b
  4. where a.author = b.login and poluchatel = '$name' order by date desc;") or die(mysql_error());
  5.  if(empty($query)){
  6.  echo "Нет сообщений";
  7.  } else {
  8.  #    Список полученных сообщений в цикле
  9. while ($row=mysql_fetch_array($query)) {
  10.      $msg_id = $row['id'];
  11.      $message = $row['message'];
  12.  # Печатаем на страничке сообщения в виде ссылок
  13.     if ($row[red] == 1)
  14.      {
  15.      # Если Red = 1, то сообщение НЕ помечено, как ПРОЧИТАННОЕ и оно толстое
  16.     print <<< HERE
  17.      <a href = "javascript:void(0)" onclick = "document.getElementById('light_msg$msg_id').style.display='block';document.getElementById('fade').style.display='block';">
  18.  HERE;
  19.      echo '<b>'.$msg_id.' '.$message.'</b>
  20.     </a>';
  21.          if ("document.getElementById('light_msg$msg_id').style.display='block';document.getElementById('fade').style.display='block'" == TRUE)
  22.          {
  23.          $mark = mysql_query("update messages set red = 0 where id = '$msg_id';") or die(mysql_error());
  24.          }
  25.      } else {
  26.      # Если Red = 0, то сообщение помечено, как ПРОЧИТАННОЕ и оно тонкое
  27.     print <<< HERE
  28.      <a href = "javascript:void(0)" onclick = "document.getElementById('light_msg$msg_id').style.display='block';document.getElementById('fade').style.display='block'">
  29.  HERE;
  30.      echo $message;
  31.      echo '</a>';
  32.      }
  33.  }
  34.  ?>
 
 Top
JohnnyB
Отправлено: 07 Октября, 2011 - 08:13:41
Post Id


Новичок


Покинул форум
Сообщений всего: 49
Дата рег-ции: Сент. 2011  


Помог: 2 раз(а)




val пишет:
document.getElementById('light_msg$msg_id')

а где этот элемент в html?
 
 Top
val
Отправлено: 07 Октября, 2011 - 08:23:55
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Окт. 2011  


Помог: 0 раз(а)




JohnnyB пишет:
а где этот элемент в html?

Так вот же, строки 17-20. И ниже они подвергаются логической обработке - если модальное окно открывалось, то апдейтим поле red, иначе оставляем как есть.

(Отредактировано автором: 07 Октября, 2011 - 08:26:43)

 
 Top
JohnnyB
Отправлено: 07 Октября, 2011 - 08:37:08
Post Id


Новичок


Покинул форум
Сообщений всего: 49
Дата рег-ции: Сент. 2011  


Помог: 2 раз(а)




я имею ввиду где элемент с id="light_msg..."?
 
 Top
val
Отправлено: 07 Октября, 2011 - 09:41:55
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Окт. 2011  


Помог: 0 раз(а)




JohnnyB пишет:
я имею ввиду где элемент с id="light_msg..."?

А-а-а, ну вот так он выглядит в коде модального окна:
CODE (html):
скопировать код в буфер обмена
  1.  
  2. <div id="light_msg<?php echo $msg_id;?>" class="white_msg">
  3. <div class="window_top">
  4. <div class="window_top_l"></div>
  5. <a href = "javascript:void(0)" onclick = "document.getElementById('light_msg<?php echo $msg_id;?>').style.display='none';document.getElementById('fade').style.display='none'">
  6. <div class="window_top_r"></div>
  7. </a>
  8. </div>
  9. <div class="window_body">
  10. Что-то в окне
  11. </div>
  12. </div>
  13.  

(Отредактировано автором: 07 Октября, 2011 - 09:43:09)

 
 Top
JohnnyB
Отправлено: 07 Октября, 2011 - 09:51:27
Post Id


Новичок


Покинул форум
Сообщений всего: 49
Дата рег-ции: Сент. 2011  


Помог: 2 раз(а)




val пишет:
PHP:
скопировать код в буфер обмена
  1. if ("document.getElementById('light_msg$msg_id').style.display='block';document.getElementById('fade').style.display='block'"==TRUE)

Тут надо разницу видеть между php и javascript, php исполняется на стороне сервера, а js на стороне браузера, и эта строка js в вашем php рассматривается не как js а просто как набор букв, и если хотите использовать js для изменения в базе используйте ajax.

php будет видеть эту строку всегда TRUE, поэтому вы просто по циклу перебираете все id у которых значения $red=1 и меняете на 0.

(Отредактировано автором: 07 Октября, 2011 - 09:54:07)

 
 Top
snikers987
Отправлено: 07 Октября, 2011 - 09:53:42
Post Id



Участник


Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011  
Откуда: Крым


Помог: 25 раз(а)




PHP:
скопировать код в буфер обмена
  1. if ("document.getElementById('light_msg$msg_id').style.display='block';document.getElementById('fade').style.display='block'" == TRUE)
  2.          {
  3.          $mark = mysql_query("update messages set red = 0 where id = '$msg_id';") or die(mysql_error());
  4.          }
  5.      }


это условие на JS по вашему должен обработать php интерпритатор? тоесть клиентский скрипт выполнить на сервере?


-----
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
 
My status
 Top
val
Отправлено: 07 Октября, 2011 - 10:11:44
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Окт. 2011  


Помог: 0 раз(а)




snikers987 пишет:
PHP:
скопировать код в буфер обмена
  1. if ("document.getElementById('light_msg$msg_id').style.display='block';document.getElementById('fade').style.display='block'" == TRUE)
  2.          {
  3.          $mark = mysql_query("update messages set red = 0 where id = '$msg_id';") or die(mysql_error());
  4.          }
  5.      }

это условие на JS по вашему должен обработать php интерпритатор? тоесть клиентский скрипт выполнить на сервере?


Ну, как бы, по моему разумению, на сервере php должен вставить в это JS условие значение переменной $msg_id и сравнить получившуюся ссылку с той, которую нажали. Где-то я неправ, но не понимаю где...
(Добавление)
JohnnyB пишет:
Тут надо разницу видеть между php и javascript, php исполняется на стороне сервера, а js на стороне браузера, и эта строка js в вашем php рассматривается не как js а просто как набор букв, и если хотите использовать js для изменения в базе используйте ajax.

Эх, придётся всё-таки ajax учить... Не понял

(Отредактировано автором: 07 Октября, 2011 - 10:12:40)

 
 Top
snikers987
Отправлено: 07 Октября, 2011 - 10:21:01
Post Id



Участник


Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011  
Откуда: Крым


Помог: 25 раз(а)




ну подставит php значение переменной в строку , а что с чем Php должен сравнивать? как он должен сравнивать, в момент когда браузер получает страницу PHP уже ЗАВЕРШИЛ работу, тебе нужно из клиентской программы (js) отправить запрос на сервер, на внесение изменений в базу, клиентские приложения НЕ работают с базой из соображений безопасности.


-----
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
 
My status
 Top
JohnnyB
Отправлено: 07 Октября, 2011 - 10:33:58
Post Id


Новичок


Покинул форум
Сообщений всего: 49
Дата рег-ции: Сент. 2011  


Помог: 2 раз(а)




val пишет:
Эх, придётся всё-таки ajax учить... Не понял

http://javascript[dot]ru/ajax/intro
 
 Top
snikers987
Отправлено: 07 Октября, 2011 - 10:34:45
Post Id



Участник


Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011  
Откуда: Крым


Помог: 25 раз(а)




CODE (javascript):
скопировать код в буфер обмена
  1. $(document).ready(function(){
  2.     $('#button').click(function (){
  3.         $.ajax({
  4.             url : 'update.php', //Файл в который отсылаем данные
  5.             dataType : 'text', //  Тип данных
  6.             data : {id : $('#name').val()}, // Переменная
  7.             type : POST, // Как передаем POST or GET
  8.             success : function (){ // Функция при успешном выполнении
  9.                 alert('Успешно');
  10.             }
  11.         });
  12.     });
  13. });


фаил update.php

PHP:
скопировать код в буфер обмена
  1. mysql_query("update messages set red = 0 where id = ".$_POST['id']."") or die(mysql_error());


в общем чтото такое, я не говорю что это рабочее решение, пишу со смартфона.


-----
Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
 
My status
 Top
val
Отправлено: 07 Октября, 2011 - 10:41:51
Post Id


Новичок


Покинул форум
Сообщений всего: 7
Дата рег-ции: Окт. 2011  


Помог: 0 раз(а)




snikers987, JohnnyB, огромное спасибо за помощь! Буду копать в этом направлении.
 
 Top
JohnnyB
Отправлено: 07 Октября, 2011 - 10:43:58
Post Id


Новичок


Покинул форум
Сообщений всего: 49
Дата рег-ции: Сент. 2011  


Помог: 2 раз(а)




Если на jQuery, то изменить надо чуть чуть:
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2.     $(document).ready(function(){
  3.         $('div.white_msg').each(function (){
  4.         $(this).click(function(){        
  5.         $.ajax({
  6.                 url : 'update.php', //Файл в который отсылаем данные
  7.                 dataType : 'text', //  Тип данных
  8.                 data : {id : <?php echo $msg_id;?>}, // Переменная
  9.                 type : POST, // Как передаем POST or GET
  10.                 success : function (){ // Функция при успешном выполнении
  11.                     $(this).remove(); //Удаляем DOM элемент
  12.                 }
  13.             });
  14.          });
  15.         });
  16.     });
  17.  

Чтобы элемент удалить из DOM по окончанию.
 
 Top
Viper
Отправлено: 07 Октября, 2011 - 11:28:57
Post Id



Активный участник


Покинул форум
Сообщений всего: 4555
Дата рег-ции: Февр. 2007  
Откуда: Симферополь


Помог: 98 раз(а)




JohnnyB а each зачем вы можете объяснить? Не быстрее ли после показа модального окна, обратиться к элементу по которому кликнули для показа и отослать его параметры серверу, а при success удалить модальное окно!?

PS! Вместо $.ajax не проще $.post ?


-----
Список фильмов с описанием, блекджеком и... для Joomla? -> https://киноархив[dot]com
Демо нового движка для сайта php.su -> php[dot]su, проект на гитхабе
 
 Top
JohnnyB
Отправлено: 07 Октября, 2011 - 12:17:32
Post Id


Новичок


Покинул форум
Сообщений всего: 49
Дата рег-ции: Сент. 2011  


Помог: 2 раз(а)




Viper пишет:
JohnnyB а each зачем вы можете объяснить? PS! Вместо $.ajax не проще $.post ?

Я написал имея ввиду уже существующий макет, так то конечно лучше сделать одно окно и для него подставлять инфу при клике. А какая разница в $.post и $.ajax ?
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB