Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.93/15: Рейтинг темы: голосов - 15, средняя оценка - 4.93
39 / 9 / 10
Регистрация: 19.09.2016
Сообщений: 1,072

Как изначально задать параметр в адресной строке?

15.01.2017, 18:47. Показов 3526. Ответов 22
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Сейчас при загрузке с домашней страницы адрес выглядит вот так:
/index.php
В коде задано условие, что если $_GET['page'] не существует, $page = 'home'. Работает для ссылки на домашнюю и при переходах на эту вкладку.

А я хочу, чтобы изначально домашняя страничка загружалась с параметром page=home
/index.php?page=home

Как сделать?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
15.01.2017, 18:47
Ответы с готовыми решениями:

Как убрать GET параметры в адресной строке
Здравствуйте! Возможно преобразовать ссылку test1.ru/index.php?page=1 в test1.ru/index/page/1/ Скрипт постраничной навигации ...

Как убрать расширение картинки в адресной строке?
Всем доброго времени суток! Подскажите, как из вида ?pic=3.jpg сделать ?pic=3 Вот так получаю необходимую картинку по адресу ...

Как отключить в хроме поиск в адресной строке?
Поставил Open Server, создал в папке domains папку с именем моего домена, перезапустил сервер, пишу в адресной строке хрома имя моей папки...

22
930 / 846 / 190
Регистрация: 28.11.2013
Сообщений: 3,621
15.01.2017, 19:15
Редирект, но это кривовато. Главная на практически всех сайт доступна по адресу /
0
209 / 191 / 49
Регистрация: 15.03.2016
Сообщений: 1,229
15.01.2017, 20:08
Цитата Сообщение от СергейСереб Посмотреть сообщение
А я хочу, чтобы изначально домашняя страничка загружалась с параметром page=home
/index.php?page=home
Как сделать?
либо JS (history.pushState())
либо внутри index.php дефолтом ставить page=home
но вообще дефолт всегда /
0
39 / 9 / 10
Регистрация: 19.09.2016
Сообщений: 1,072
17.01.2017, 00:17  [ТС]
Из за этого параметра не получается второй по условию передать...


Пробовал для стартовой страницы сделать условную проверку на существование параметра page=home
Проверяю регистрационные данные:
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
<?php
$login = htmlspecialchars($_POST['login']);
$pass = htmlspecialchars($_POST['pass']);
$em = htmlspecialchars($_POST['em']);
$log_in = $_POST['log_in'];
$err = (isset($_GET['page'])) ? '&error=1' : '?error=1';
if (isset($log_in)) {
  if (isset($login, $pass, $em)) {
    if ($login =='test' && $pass == 'test' && $em == 'test@test.com' && (filter_var($em, FILTER_VALIDATE_EMAIL))) {
      setcookie('login', 'LOGIN', time() +1800, '/');
      header("Location: ".$_SERVER['HTTP_REFERER']);
      exit();
    }   
    else {      
      header("Location: ".$_SERVER['HTTP_REFERER'].$err);
      exit();
    }   
  } 
}
?>

Главная загружается с адресом:test.local
После отправки пустой формы регистрации с главной, получаю адрес: test.local/?error=1
При отправке с любой другой страницы
Получаю адрес типа: test.local/index.php?page=about?error=1


Побовал и с проверкой на наличие строки запроса ($_SERVER['QUERY_STRING']) тоже не работает. Очевидно, в пределах этого скрипта эти переменные не видны...
0
930 / 846 / 190
Регистрация: 28.11.2013
Сообщений: 3,621
17.01.2017, 00:38
Нормально работать с путями так и не научились? Неправда ли так лучше:
/
/about
/?error=1
/about?error=1

При используемом вами подходе тоже все вполне решаемо. Например, накапливайте все значащие параметры в массиве, а потом выписывайте их, если массив не пустой: '?'.implode('&', $array)

Добавлено через 5 минут
При использовании путей можно вообще обойтись без GET-параметров. Либо создать алиас для страницы с ошибкой, например /about-error, либо добавлять индикатор ошибки в конец, например /about/error, либо завести целый класс неиндексируемых страниц ошибок, например /error/тут_адрес_страницы_с_ошибкой_возможно_да же_с_параметрами (все такие страницы можно закрыть в роботс по маске /error/).
0
39 / 9 / 10
Регистрация: 19.09.2016
Сообщений: 1,072
17.01.2017, 00:49  [ТС]
Цитата Сообщение от miketomlin Посмотреть сообщение
Нормально работать с путями так и не научились? Неправда ли так лучше:
Еще бы знать, что такое "нормально"... В одном источнике так, в другом этак... Ну и я учусь все-таки пока что...

Цитата Сообщение от miketomlin Посмотреть сообщение
/
/about
/?error=1
/about?error=1
Я правильно понимаю. что речь об отсутствии параметра page?
А что плохого в том, что он есть?
Цитата Сообщение от miketomlin Посмотреть сообщение
накапливайте все значащие параметры в массиве
Так я не знаю где их накапливать. Я же написал проблему - мне видится, что в пределах скрипта нет параметра page. Куда он делся и где его накапливать? Какой-то глобальный массив нужен? Сессии не предлагайте.

Я половину из того что Вы пишете вообще не понимаю.... У меня уровень самого-самого начинающего
0
209 / 191 / 49
Регистрация: 15.03.2016
Сообщений: 1,229
17.01.2017, 00:50
Цитата Сообщение от СергейСереб Посмотреть сообщение
header("Location: ".$_SERVER['HTTP_REFERER']);
да это бред
во1, HTTP_REFERER задаётся пользователем, а не сервером, т.е. может что угодно прислать
во2, он вообще может потеряться
пишите константу, вы что не знаете, куда вам отправлять надо?
header("Location: /?page=auth&error=1");
в крайнем случае REQUEST_URI можно заюзать
ну а по-хорошему ошибка авторизации через аякс отдаётся
0
39 / 9 / 10
Регистрация: 19.09.2016
Сообщений: 1,072
17.01.2017, 00:53  [ТС]
Цитата Сообщение от miketomlin Посмотреть сообщение
создать алиас
Это что такое???
0
209 / 191 / 49
Регистрация: 15.03.2016
Сообщений: 1,229
17.01.2017, 00:54
Цитата Сообщение от СергейСереб Посмотреть сообщение
Я половину из того что Вы пишете вообще не понимаю.... У меня уровень самого-самого начинающего
в подписи ссылка
0
39 / 9 / 10
Регистрация: 19.09.2016
Сообщений: 1,072
17.01.2017, 00:58  [ТС]
Цитата Сообщение от полудух Посмотреть сообщение
пишите константу, вы что не знаете, куда вам отправлять надо?
header("Location: /?page=auth&error=1");
Не знаю. На страничку index.php подключается форма авторизации и меняющийся по вкладкам контент(в адресе меняется параметр page). Аворизация может быть произведена c любой странички. А это разве не возврат туда откуда пришли?
0
209 / 191 / 49
Регистрация: 15.03.2016
Сообщений: 1,229
17.01.2017, 01:04
ну и зачем вам возвращать клиента на любую страничку тогда, если у него в fancybox авторизация
аякс однозначно
0
39 / 9 / 10
Регистрация: 19.09.2016
Сообщений: 1,072
17.01.2017, 01:09  [ТС]
Цитата Сообщение от полудух Посмотреть сообщение
если у него в fancybox авторизация
нет не fancybox. Обычная HTML форма, подключается в хедере.
PHP
1
2
3
4
<?php
            include (isset($_COOKIE['login']) && $_COOKIE['login'] == 'LOGIN') ? "logged.php" : "auth_form.php";   
            include $page.'.php';
            ?>
0
209 / 191 / 49
Регистрация: 15.03.2016
Сообщений: 1,229
17.01.2017, 01:13
да пофиг, всё-равно ошибку через аякс лучше отдавать
или разбирайте свой $_GET на $key=>$val, а потом собирайте обратно с добавкой err=1 и implode()
1
930 / 846 / 190
Регистрация: 28.11.2013
Сообщений: 3,621
17.01.2017, 02:02
Цитата Сообщение от СергейСереб Посмотреть сообщение
А что плохого в том, что он есть?
Ну, например, у вас бы не возникло проблемы, озвученной в стартовом посте. Адреса / и /about единообразны, просто в первом случае идентифицирующей является пустая строка, а во втором – строка "about".

Цитата Сообщение от СергейСереб Посмотреть сообщение
Куда он делся и где его накапливать? Какой-то глобальный массив нужен? Сессии не предлагайте.
Причем тут сессии? Заведите массив и накапливайте, первоначально перенеся в него значащие для вас параметры, а потом что-то еще добавляя, если нужно. Выше уже разъяснили. Параметр page никуда не делся. Его может не быть. Как это решить, я вам в самом начале написал: если не определен page (или пустой?), редирект на /?page=home, но это криво. Можете при помощи ветвления с тем же условием записывать в первый элемент массива (или в спец. переменную) значение параметра page или home (либо пустую строку), если параметр page отсутствует. Правда, тут будут явные дубли всплывать, если перед выводом ссылок вы не будете чистить page=home, – лучше уж тогда редирект.

Цитата Сообщение от СергейСереб Посмотреть сообщение
Это что такое???
Это когда для ранее определенной страницы дополнительно определяет адрес-псевдоним, т.е. получается один и тот же программный модуль под разными адресами – в нем можно посмотреть на тек. фактический адрес и в зависимости от адреса немного модифицировать выдаваемую страницу, например добавить на страницу помимо всего прочего сообщение об ошибке.

Добавлено через 10 минут
Цитата Сообщение от miketomlin Посмотреть сообщение
но это криво
Еще учтите, что редирект POST-запроса в POST-запрос сделать практически невозможно, поэтому в качестве POST-обработчика нужно всегда указывать «основной» адрес, например: action="/?page=home" (хотя action="" с предварительным редиректом с / на /?page=home должен работать нормально, т.е. не приводить к редиректу при POST-запросе).
1
39 / 9 / 10
Регистрация: 19.09.2016
Сообщений: 1,072
17.01.2017, 15:24  [ТС]
Цитата Сообщение от полудух Посмотреть сообщение
HTTP_REFERER задаётся пользователем, а не сервером, т.е. может что угодно прислать
Цитата Сообщение от полудух Посмотреть сообщение
он вообще может потеряться
Не понял, что тут не так. Функционирует вроде правильно все, как и нужно. Из скрипта возвращаемся на страничку откуда вызывался скрипт..
Разве HTTP_REFERER не элемент массива $_SERVER? Вообще не понял о чем речь про сервер и пользователя... Разве он не содержит ссылку откуда пришли? И что значит может потеряться в контексте моего вопроса??

С аяксом не знаком вообще, поэтому пока только средствами php, даже если это "костыли", иначе вообще не сделаю. Когда дойду до аякса тогда буду аякс использовать.


Через редирект главной работает...
Цитата Сообщение от miketomlin Посмотреть сообщение
Параметр page никуда не делся. Его может не быть.
Но в скрипте то я проверяю, есть ли он, и в зависимости от этого пытаюсь назначить соответствующий параметр через header.
Но почему-то скрипт определяет только для главной, что этого параметра нет, но когда запускаю скрипт с любой другой странички, где параметр page явно существует, скрипт его не видит.

Мне принципиально не сделать способом каким мне якобы хочется, а понять почему не работает!
0
930 / 846 / 190
Регистрация: 28.11.2013
Сообщений: 3,621
17.01.2017, 16:21
Забыл написать... Выше вам все верно сказали: никогда не используйте реферер для редиректа. Если нужно вернуться туда, откуда пришли, заложите «адрес возврата» (только не внешний) в исходную ссылку, например:
/page/dest-page?params -> /dest-page?params
или наоборот
/page?param -> /error/page?param (error – предопределенный класс, о чем выше писал).

Цитата Сообщение от СергейСереб Посмотреть сообщение
Но почему-то скрипт определяет только для главной, что этого параметра нет, но когда запускаю скрипт с любой другой странички, где параметр page явно существует, скрипт его не видит.
Вот это не понял. Можно поподробнее?
0
39 / 9 / 10
Регистрация: 19.09.2016
Сообщений: 1,072
17.01.2017, 18:56  [ТС]
Цитата Сообщение от miketomlin Посмотреть сообщение
никогда не используйте реферер для редиректа
Для чего тогда он нужен? Только для реализации вопросов безопасности?

Цитата Сообщение от miketomlin Посмотреть сообщение
Вот это не понял. Можно поподробнее?
Когда я запускаю скрипт с главной, адрес : test.local, параметра page не существует. Из скрипта по условию

PHP
1
$err = (isset($_GET['page'])) ? '&error=1' : '?error=1';
возвращаюсь назад с добавлением к адресу ?error=1. Все работает, как нужно.

Если я запускаю скрипт допустим со страницы about, используя параметр page, я запускаю скрипт с адреса test.local/index.php?page=about, т.е. параметр page существует, и по условию в скрипте при существовании параметра page к адресу уже должно добавиться не ?error=1, а &error=1, но добавляется все так же ?error=1, вроде как параметра page не существует.
0
930 / 846 / 190
Регистрация: 28.11.2013
Сообщений: 3,621
17.01.2017, 21:21
Цитата Сообщение от СергейСереб Посмотреть сообщение
Для чего тогда он нужен?
Используйте его по прямому назначению – для отслеживания бэков. Только не нужно слепо верить всему, что вы видите в логах и т.п. Рефереры часто подкладываются ботами. Это такой вид спама.

Цитата Сообщение от СергейСереб Посмотреть сообщение
Когда я запускаю скрипт с главной...
Так вы в стартовом посте использовали реферер, а нужно-то адрес тек. страницы, по которому идет запрос. Этот адрес (без схемы и хоста) содержится в $_SERVER['REQUEST_URI']. Только поосторожней с тем, чтобы что-то подставлять в его конец в зависимости от показанного вами условия, т.к. помимо page там могут быть и др. параметры. Опять возвращаемся к тому, чтобы выделить из адреса путь. По-простому это можно сделать например так:
PHP
1
list($p)=explode('?',$_SERVER['REQUEST_URI'],2);
0
39 / 9 / 10
Регистрация: 19.09.2016
Сообщений: 1,072
17.01.2017, 22:32  [ТС]
Цитата Сообщение от miketomlin Посмотреть сообщение
Так вы в стартовом посте использовали реферер, а нужно-то адрес тек. страницы, по которому идет запрос. Этот адрес (без схемы и хоста) содержится в $_SERVER['REQUEST_URI']. Только поосторожней с тем, чтобы что-то подставлять в его конец в зависимости от показанного вами условия, т.к. помимо page там могут быть и др. параметры. Опять возвращаемся к тому, чтобы выделить из адреса путь. По-простому это можно сделать например так:
По поводу $_SERVER['REQUEST_URI']:
Сам механизм я понял, только я не понял, как он в моем случае может быть использован. Почему нужно разбирать адрес активной страницы? Активная же страничка - это сам обработчик. У меня обработчик формы в отдельном файле.
Может я не все объяснил. Схема такая:
В главном файле(index.php) подключается форма авторизации из отдельного файла(auth_form.tpl). Из этого подключаемого файла форма ссылается на обработчик тоже в отдельном файле(auth.php).
Вся обработка авторизации происходит в файле auth.php. Значит $_SERVER['REQUEST_URI'] будет содержать /auth.php. А мне же нужен адрес не обработчика, а странички, с которой был запущен обработчик.
0
930 / 846 / 190
Регистрация: 28.11.2013
Сообщений: 3,621
17.01.2017, 23:12
Еще раз прочитайте, что я написал по поводу передачи ссылок для возврата. Если вы хотите потом вернуться к странице /index.php?page=home, обращайтесь к обработчику по адресу вроде /auth.php/index.php?page=home, в котором вы можете просто обрезать префикс /auth.php, чтобы получить адрес для редиректа.

Добавлено через 5 минут
Не обязательно в точности этому следовать, просто показанный мной вариант в большей степени соответствует тому, как я это делаю. Вы можете использовать единую точку входа в том числе и для обработчика (/index.php?page=auth), а для указания страницы возврата использовать отдельный параметр, например: /index.php?page=auth&retpage=home
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.01.2017, 23:12
Помогаю со студенческими работами здесь

Как сделать, чтобы в адресной строке не отображалось расширение php?
как сделать чтоб не высвечивалась приставка php? и заходить что б можно было

Как можно сравнивать айди в адресной строке с айди в php коде
у меня адресная строка вида: site.com/questions.php?question=6, как сравнивать question=6, чтобы выводить определённую информацию,...

Как скрыть данные в адресной строке после "example.com/file.php?."
Как скрыть данные после вопросительного знака? Пример example.com/file.php?abc=123 Нужно, чтобы это все происходило скрыто. Чтобы в...

Как при использовании Response.redirect в адресной строке броузера оставить тот УРЛ, который был набран изначально?
Как при использовании Response.redirect в адресной строке броузера оставить тот УРЛ, который был набран изначально? Или быть может надо...

Параметр в адресной строке
Всем доброго времени суток! отсылка: знаний в JS нуль. Передаю параметр через адресную строку mysite.html?sum=100 пытаюсь...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
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
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru