Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.08.2016, 12:47   #1
чебургатор
Пользователь
 
Регистрация: 06.09.2008
Сообщений: 41
По умолчанию Могу ли я изменять элемент $_SERVER['REQUEST_URI']

Могу ли я производить какие то изменения с элементом $_SERVER['REQUEST_URI']? То есть мне нужно на странице ставить ссылку которая отличается от текущего адреса на +1. Если например открыта страница site.ru/stranica-1.html то на ней должна выводится ссылка site.ru/stranica-2.html и так далее.
чебургатор вне форума Ответить с цитированием
Старый 06.08.2016, 01:51   #2
predefined
Форумчанин
 
Регистрация: 01.08.2016
Сообщений: 182
По умолчанию

$_SERVER['REQUEST_URI'] - это PHP-переменная сервера, в которой содержится url, запрошенный с сервера браузером пользователя.
В ответ на этот запрос, сервер присылает браузеру страницу, на которой могут быть ЛЮБЫЕ ссылки.

Посмотрите в адресную строку - у вас в браузере открыта страница www.programmersforum.ru/showthread.php?t=296319
А вот вам ссылка на страницу www.programmersforum.ru/showthread.php?t=296320, на 1 больше, как вы и хотели.
И заметьте, я совершенно не трогал переменную $_SERVER['REQUEST_URI'], поскольку у меня нет доступа к PHP-скрипту на сервере.

Последний раз редактировалось predefined; 06.08.2016 в 01:58.
predefined вне форума Ответить с цитированием
Старый 06.08.2016, 03:43   #3
uberchel
Участник клуба
 
Аватар для uberchel
 
Регистрация: 19.01.2009
Сообщений: 1,453
По умолчанию

Переменные без разницы локальные они или глобальные - менять можно, это не константы
uberchel вне форума Ответить с цитированием
Старый 06.08.2016, 11:53   #4
чебургатор
Пользователь
 
Регистрация: 06.09.2008
Сообщений: 41
По умолчанию

Так вопрос то и был в том, как мне средствами php вывести на странице ссылку, которая отличается на +1 от того, что выдаёт элемент $_SERVER['REQUEST_URI'] на определённой странице. То есть как в РНР прописать функцию, которая на странице www.programmersforum.ru/showthread.php?t=296319 выведет ссылку www.programmersforum.ru/showthread.php?t=296320
чебургатор вне форума Ответить с цитированием
Старый 06.08.2016, 12:02   #5
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от чебургатор Посмотреть сообщение
То есть как в РНР прописать функцию, которая на странице www.programmersforum.ru/showthread.php?t=296319 выведет ссылку www.programmersforum.ru/showthread.php?t=296320
PHP код:
<a href="www.programmersforum.ru/showthread.php?t=<?=($_GET['t'] + 1); ?>">Some link +1</a>
Andkorol вне форума Ответить с цитированием
Старый 06.08.2016, 15:04   #6
predefined
Форумчанин
 
Регистрация: 01.08.2016
Сообщений: 182
По умолчанию

Вот код от Andkorol, адаптированный под ваш формат url ('site.ru/stranica-1.html'):
PHP код:
$num preg_replace('/.+\-(\d+)\.html.*/'"\$1"$_SERVER['REQUEST_URI']); // Ловим номер из $_SERVER['REQUEST_URI']
echo "<a href='//site.ru/stranica-".($num+1).".html'>следующая страница</a>"// Выводим ссылку на следующую страницу 

Последний раз редактировалось predefined; 06.08.2016 в 15:06.
predefined вне форума Ответить с цитированием
Старый 06.08.2016, 16:24   #7
чебургатор
Пользователь
 
Регистрация: 06.09.2008
Сообщений: 41
По умолчанию

Я пока остановился на таком варианте:
PHP код:
<?php
$url 
substr($_SERVER['REQUEST_URI'], 0, -5);
$url_prev $url_next explode('-'$url);
$url_prev[1] -= 1;
$url_next[1] += 1;
$url_prev implode('-'$url_prev).'.html';
$url_next implode('-'$url_next).'.html';
?>
Ну и потом переменные $url_prev и $url_next можно вставлять в обычный HTML, например
Код:
<a href="<?=$url_prev?>">Предыдущая</a>
чебургатор вне форума Ответить с цитированием
Старый 06.08.2016, 16:32   #8
чебургатор
Пользователь
 
Регистрация: 06.09.2008
Сообщений: 41
По умолчанию

predefined, объясните пожалуйста, функция
PHP код:
preg_replace('/.+\-(\d+)\.html.*/'"\$1" 
обрезает из переменной site.ru/stranica-1.html всё кроме 1? А если адрес например будет выглядеть как site.ru/stranica-123.html нужно ли будет вносить изменения в preg_replace?
чебургатор вне форума Ответить с цитированием
Старый 07.08.2016, 00:25   #9
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от чебургатор Посмотреть сообщение
predefined, объясните пожалуйста, функция
PHP код:
preg_replace('/.+\-(\d+)\.html.*/'"\$1" 
обрезает из переменной site.ru/stranica-1.html всё кроме 1? А если адрес например будет выглядеть как site.ru/stranica-123.html нужно ли будет вносить изменения в preg_replace?
А самому попробовать/проверить – слабО?
Andkorol вне форума Ответить с цитированием
Старый 08.08.2016, 00:32   #10
predefined
Форумчанин
 
Регистрация: 01.08.2016
Сообщений: 182
По умолчанию

Цитата:
Сообщение от чебургатор Посмотреть сообщение
функция
PHP код:
preg_replace('/.+\-(\d+)\.html.*/'"\$1" 
обрезает из переменной site.ru/stranica-1.html всё кроме 1?
Да. Изучайте регулярные выражения, в них - сила.
. это любые символы
.* это ноль и более любых символов
.+ это один и более любых символов
\- это знак '-', его надо экранировать через \ поскольку он используется в регулярках для указания диапазонов: a-z
\. - это сама точка, поскольку экранирована по \, и она не означает любой символ, а только саму себя
\d это любые цифры, можно заменить на: [0-9]
() - захватывающая маска, по \$1 подставится всё, что она захватит

То есть, эта регулярка ловит шаблон:
любые символы(не менее одного, тк .+), потом -, потом любые цифры, потом .html и потом любые символы(или ни одного, тк .*)

Все цифры после - и до .html по этой маске захватываются и вставляются вместо "\$1".


Цитата:
Сообщение от чебургатор Посмотреть сообщение
А если адрес например будет выглядеть как site.ru/stranica-123.html нужно ли будет вносить изменения в preg_replace?
Не надо. Эта регулярка сделана под шаблон вашего url, чтобы свести к 0 ложные срабатывания на других url.

Ваш вариант парсинга тоже рабочий, но сломается на url с query-string: stranica-1.html?k=4

Последний раз редактировалось predefined; 08.08.2016 в 00:37.
predefined вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не могу изменять цвет отдельного символа DenHaz Visual C++ 0 08.04.2013 12:38
Постраничная навигация и $_SERVER['REQUEST_URI'] Predator199 PHP 1 16.12.2012 19:07
Передаю в элемент списка объект и не могу вызвать метод этого объекта. Len_a Общие вопросы C/C++ 1 21.12.2011 13:15
$_SERVER['HTTP_REFERER'] gunsoy PHP 4 14.06.2011 08:57