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 :: Замена URL на <title>

 PHP.SU

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


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

> Описание: как вместо ссылки на последнюю посещённую страницу отображать название этой страницы из её заголовка <title> ?
Строитель Модератор
Отправлено: 28 Мая, 2015 - 22:36:17
Post Id



Участник


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


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




Доброго времени суток! Я пишу скрипт, определяющий колличество онлайн-пользователей, их браузер, айпишник, время последнего обновления страницы, и адрес последней посещённой страницы. Данные пишем в текст-файл. Вопрос в следующем: как вместо ссылки на последнюю посещённую страницу (http://сайт.ру/index.php?voc=faml) отображать название этой страницы ("Семья") из её заголовка <title> ? (заголовок формируется динамически)

Надо осилить логику.

(Отредактировано автором: 28 Мая, 2015 - 23:03:40)

 
 Top
dcc0
Отправлено: 29 Мая, 2015 - 02:28:54
Post Id


Участник


Покинул форум
Сообщений всего: 1043
Дата рег-ции: Июль 2014  


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






-----
Март 2021. Бросил программирование
 
 Top
GoDr
Отправлено: 29 Мая, 2015 - 08:28:40
Post Id



Посетитель


Покинул форум
Сообщений всего: 446
Дата рег-ции: Янв. 2015  
Откуда: Тамбов


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




Строитель, берёшь код их 17-й строки и вставляешь его между 21-й и 22-й Радость
(Добавление)
.
а если логику, то ты сам её описал уже ! title у тебя динамический, а значит есть переменная или функция от куда берётся это значение. И что тебе мешает использовать её в своих целях?


-----
Система управления веб-содержимым Lotos CMS
 
 Top
Строитель Модератор
Отправлено: 29 Мая, 2015 - 10:59:48
Post Id



Участник


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


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




GoDr пишет:
Строитель, берёшь код их 17-й строки и вставляешь его между 21-й и 22-й Радость
(Добавление)
.
а если логику, то ты сам её описал уже ! title у тебя динамический, а значит есть переменная или функция от куда берётся это значение. И что тебе мешает использовать её в своих целях?


В $title значение формируется в зависимости от блока case:
к примеру, при переходе по ссылке http://сайт[dot]ру/index.php?plans=k[dot][dot][dot]s&act=online
в переменную $title запишется <Занятия с малышами>

PHP:
скопировать код в буфер обмена
  1. <?PHP
  2. if (isset($_GET['plans'])){
  3.     $switch = htmlspecialchars($_GET['plans']);
  4. }
  5.  
  6. switch($switch){
  7.     case 'kids':
  8.         $title = 'Занятия с малышами';
  9.         $content = '<a href="'. $_SERVER['HTTP_REFERER'] .'">Назад</a> | <b>Занятия с малышами</b> | '.
  10.                  '<a href="index.php">На главную</a><hr />';
  11.         $dir = scandir($_SERVER['DOCUMENT_ROOT'] .'/lesson_plans/classes_with_kids');
  12.         $all = sizeof($dir);
  13.         if ($all <= 3){
  14.             $content .= 'Материал в разработке.';
  15.         } else {
  16.             for($i = 0; $i < $all; $i++){
  17.                 if($dir[$i] == '..' || $dir[$i] == '.'|| is_dir($dir[$i]) || $dir[$i] == '.htaccess') continue;
  18.                 //Выводим содержимое всех файлов в поток
  19.                 $content .= file_get_contents('http://'.$_SERVER['SERVER_NAME']
  20.                          .'/lesson_plans/classes_with_kids/'. $dir[$i]) .'<br />';
  21.             }
  22.         }
  23.         $content .= '<hr /><a href="index.php">На главную</a>';
  24.         break;
  25. }
  26.  
  27. //////////////////////////////////////////////////
  28. /*
  29.    Так вот как мне извлечь значение из $title для его отображения в другом блоке сайта?
  30.    Нужно, чтобы при переходе по ссылке <a href="'. $url .'act=online"><b>'. sizeof(file($file)) .'</b></a>
  31.    отображалось название соответствующей страницы из $title , а не просто ссылка полученная из пары
  32.    суперглобальных массивов $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] ?
  33. */
  34. $file = 'session.txt';
  35. $s_id = session_id();
  36.  
  37. if (!empty($s_id)){
  38.     $time = time();
  39.     $time_online = time() - 1800;
  40.     $user_agent = $_SERVER['HTTP_USER_AGENT'];
  41.     $ip = $_SERVER['REMOTE_ADDR'];
  42.     $date = date('H:i:s', time() + 10800);
  43.     $ref = 'http://'. $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
  44.     $str = $s_id .'|'. $time .'|'. $user_agent .'|'. $ip .'|'. $date .'|'. $ref ."\n";
  45.    
  46.     if (!file_exists($file)){
  47.         file_put_contents($file, NULL);
  48.         }
  49.    
  50.     $arr_file = file($file);
  51.    
  52.     for ($i = 0, $j = 0; $i < sizeof($arr_file); $i++, $j++){
  53.         $arr_expl = explode('|', $arr_file[$i]);
  54.         if ($arr_expl[1] > $time_online){
  55.             $rec_file[$j] = $arr_file[$j];
  56.         }
  57.     }
  58.    
  59.     for ($i = 0; $i < sizeof($rec_file); $i++){
  60.         $arr_rec = explode('|', $rec_file[$i]);
  61.         if ($arr_rec[0] == $s_id){
  62.             $arr_rec[1] = $time;
  63.             $arr_rec[2] = $user_agent;
  64.             $arr_rec[3] = $ip;
  65.             $arr_rec[4] = $date;
  66.             $arr_rec[5] = $ref."\n";
  67.             $rewrite = TRUE;
  68.         }
  69.         $rec_file[$i] = implode('|', $arr_rec);
  70.     }
  71.        
  72.     $fp = fopen($file, 'w');
  73.     for ($i = 0; $i < sizeof($rec_file); $i++){
  74.         fputs($fp, $rec_file[$i]);
  75.     }
  76.     fclose($fp);
  77.    
  78.     if (!$rewrite){
  79.         file_put_contents($file, $str, FILE_APPEND);
  80.     }
  81. }
  82.  
  83. if ($_GET['act'] == 'online'){
  84.     $arr_file = file($file);
  85.     $online = '';
  86.     for ($i = 0, $j = 1; $i < sizeof($arr_file); $i++, $j++){
  87.         $arr_online = explode('|', $arr_file[$i]);
  88.         if ($arr_online[0] == $s_id){
  89.             $online .= '<ul><li><span style="border-bottom: 2px solid red; border-radius: 30%;">'. $j .' : '. $arr_online[2] .'</span></li>';
  90.             $online .= '<li>IP : '. $arr_online[3] .'</li>';
  91.             $online .= '<li>Время : '. $arr_online[4] .'</li>';
  92.             $online .= '<li>На странице: <a href="'. $arr_online[5] .'">'. $arr_online[5] .'</a></li></ul>';
  93.         }
  94.         if ($arr_online[0] == $s_id){
  95.             continue;
  96.         }
  97.         $online .= '<ul><li>'. $j .' : '. $arr_online[2] .'</li>';
  98.         $online .= '<li>IP : '. $arr_online[3] .'</li>';
  99.         $online .= '<li>Время : '. $arr_online[4] .'</li>';
  100.         $online .= '<li>На странице: <a href="'. $arr_online[5] .'">'. $arr_online[5] .'</a></li></ul>';
  101.     }
  102.     $online .= '<a href="'. $_SERVER['HTTP_REFERER'] .'">назад</a>';
  103. } else {
  104.     $url='?';
  105.     if ($_SERVER['QUERY_STRING']){
  106.         foreach($_GET as $key => $value){
  107.             if($key !='act'){
  108.                 $url.=$key.'='.$value.'&';
  109.             }
  110.         }
  111.     }
  112.  
  113.     $online = 'На сайте: <a href="'. $url .'act=online"><b>'. sizeof(file($file)) .'</b></a>';
  114. }

(Отредактировано автором: 29 Мая, 2015 - 22:41:52)

 
 Top
Строитель Модератор
Отправлено: 29 Мая, 2015 - 22:44:37
Post Id



Участник


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


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




Всё ещё актуально.
 
 Top
Ts.Saltan
Отправлено: 29 Мая, 2015 - 23:02:23
Post Id



Посетитель


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


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




Строитель пишет:
в другом блоке сайта?

что подразумевается под другим блоком?
приведённый код это код какой-то функции или класса?

Если используется процедурный стиль - хранить значение title в глобальной переменной.
Если объекты - в публичном свойстве класса
 
 Top
Строитель Модератор
Отправлено: 29 Мая, 2015 - 23:21:43
Post Id



Участник


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


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




Ts.Saltan пишет:
Строитель пишет:
в другом блоке сайта?

что подразумевается под другим блоком?
приведённый код это код какой-то функции или класса?

Если используется процедурный стиль - хранить значение title в глобальной переменной.
Если объекты - в публичном свойстве класса


Стиль процедурный. Ок, допустим $title глобальная - как дальше извлекать из неё необходимое название страницы? Я честно говоря, что только не пробовал... И cURL, и запись в текстовый файл... Это же вроде бы простая задача?
 
 Top
Ts.Saltan
Отправлено: 30 Мая, 2015 - 15:21:08
Post Id



Посетитель


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


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




Так, не сразу до меня дошло, что именно требовалось.
Получается, в этом посте два разных скрипта?
Если так, то в тайтл можно хранить в сессии
PHP:
скопировать код в буфер обмена
  1.  
  2. switch($switch){
  3.     case 'kids':
  4.         $_SESSION['title'] = $title = 'Занятия с малышами';


другой скрипт
PHP:
скопировать код в буфер обмена
  1. if ($_GET['act'] == 'online'){
  2.    //...
  3.             $online .= 'Title: '.$_SESSION['title'];
  4.  
 
 Top
Строитель Модератор
Отправлено: 30 Мая, 2015 - 15:26:36
Post Id



Участник


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


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




Привожу реальный пример, может быть так будет понятнее:
При просмотре внизу страницы "Кто на сайте" вместо
На странице: http://drzoom[dot]url[dot]ph/index.php?p[dot][dot][dot]l&act=online
должно быть
На странице: Самодостаточное владение

(Добавление)
Ts.Saltan пишет:
Так, не сразу до меня дошло, что именно требовалось.
Получается, в этом посте два разных скрипта?
Если так, то в тайтл можно хранить в сессии
PHP:
скопировать код в буфер обмена
  1.  
  2. switch($switch){
  3.     case 'kids':
  4.         $_SESSION['title'] = $title = 'Занятия с малышами';


другой скрипт
PHP:
скопировать код в буфер обмена
  1. if ($_GET['act'] == 'online'){
  2.    //...
  3.             $online .= 'Title: '.$_SESSION['title'];
  4.  




Код написан в одном файле (index.php), но в браузер возвращается значение, в зависимости от того, по какой ссылке перешёл пользователь.
 
 Top
Ts.Saltan
Отправлено: 30 Мая, 2015 - 15:48:04
Post Id



Посетитель


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


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




В начале файла пусть будет массив с данными о title страниц
PHP:
скопировать код в буфер обмена
  1.  
  2. $titles = [
  3.    'avrl' => 'Самодостаточное владение',
  4.    'kids' => 'Занятия с малышами'
  5. ];
  6.  


потом везде, где надо, берём из этого массива данные
PHP:
скопировать код в буфер обмена
  1.  
  2.         $title = $titles[$switch];
  3.  


PHP:
скопировать код в буфер обмена
  1.  
  2. if ($_GET['act'] == 'online'){
  3.    //тут уже придётся достать из HTTP_REFERER значение plans
  4. parse_str(parse_url($_SERVER['HTTP_REFERER'], PHP_URL_QUERY), $p);
  5.  
  6.    $online .= 'Title: '.$titles[$p['plans']];

(Добавление)
а вообще, хранись это всё в базе данных, ИМХО, было бы меньше проблем и костылей
 
 Top
Строитель Модератор
Отправлено: 30 Мая, 2015 - 15:54:01
Post Id



Участник


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


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




Ts.Saltan пишет:
В начале файла пусть будет массив с данными о title страниц
PHP:
скопировать код в буфер обмена
  1.  
  2. $titles = [
  3.    'avrl' => 'Самодостаточное владение',
  4.    'kids' => 'Занятия с малышами'
  5. ];
  6.  


потом везде, где надо, берём из этого массива данные
PHP:
скопировать код в буфер обмена
  1.  
  2.         $title = $titles[$switch];
  3.  


PHP:
скопировать код в буфер обмена
  1.  
  2. if ($_GET['act'] == 'online'){
  3.    //тут уже придётся достать из HTTP_REFERER значение plans
  4. parse_str(parse_url($_SERVER['HTTP_REFERER'], PHP_URL_QUERY), $p);
  5.  
  6.    $online .= 'Title: '.$titles[$p['plans']];

(Добавление)
а вообще, хранись это всё в базе данных, ИМХО, было бы меньше проблем и костылей


Я понял, спасибо! Улыбка
 
 Top
Ts.Saltan
Отправлено: 30 Мая, 2015 - 16:00:19
Post Id



Посетитель


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


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




и еще, необходимо фильтровать все поступающие от пользователя переменные, в т.ч. user-agent, т.к. его можно подделать и подсунуть туда вредоносный код
 
 Top
Строитель Модератор
Отправлено: 30 Мая, 2015 - 16:02:36
Post Id



Участник


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


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




Ts.Saltan пишет:
и еще, необходимо фильтровать все поступающие от пользователя переменные, в т.ч. user-agent, т.к. его можно подделать и подсунуть туда вредоносный код


Фильтровать htmlspecialchars() ? Или этого не достаточно?
 
 Top
Ts.Saltan
Отправлено: 30 Мая, 2015 - 16:03:35
Post Id



Посетитель


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


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




Строитель пишет:
Фильтровать htmlspecialchars() ? Или этого не достаточно?

думаю, этого хватит
 
 Top
Строитель Модератор
Отправлено: 31 Мая, 2015 - 14:52:45
Post Id



Участник


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


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




Задача решена. Но параллельно возник ещё один вопрос:
Значения title (массив) записаны в $_SESSION, и при первом заходе на сайт они в браузер не выводятся. Как это исправить?
 
 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