Форум программистов, компьютерный форум, киберфорум
Наши страницы
PHP для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.85/13: Рейтинг темы: голосов - 13, средняя оценка - 4.85
realn1x
0 / 0 / 0
Регистрация: 04.06.2014
Сообщений: 19
1

Запросы GET в адресной строке

04.06.2014, 20:32. Просмотров 2673. Ответов 13
Метки нет (Все метки)

Подскажите, у меня например есть папки(категории) в них страницы.

у меня написан код для вывода:
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
<?php
$ext=".html";
$hr = 'http://test.ai';
$tg = '_self';
$cat = $_GET['cat'];
$p = $_GET['p'];
var_dump($_GET);
if ($cat == 'season2' or $cat == 'films' or $cat == 'ova' or $cat == 'wall' or !$cat) {
    include ('template/header.tpl');
    include ('template/content.tpl');
    if (!$cat){
        include ("index.html");
    }
    elseif ($cat == 'season2' and !$p) {
    include ("season2/index.html");
    } elseif ($cat == 'season2' and $p) {
    include ("season2/$p.html");
    } elseif ($cat == 'films' and !$p) {
    include ("films/index.html");
    } elseif ($cat == 'films' and $p) {
    include ("films/$p.html");
    } elseif ($cat == 'ova' and !$p) {
    include ("ova/index.html");
    } elseif ($cat == 'ova' and $p) {
    include ("ova/$p.html");
    } elseif ($cat == 'wall') {
    include ("wall/index.html");
    }
    include ('template/footer.tpl');
} else {
include ('404.html');   
}
?>
при переходе например ?cat=wall
мне выдаст то что и нужно, мне интересно такое написание правильное или так не принято делать?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.06.2014, 20:32
Ответы с готовыми решениями:

Работа с GET в адресной строке
Наверное глупый вопрос для многих тут, но я не смог придумать правильную...

Переменные в адресной строке
Здравствуйте! При использовании навигации по сайте я отталкиваюсь от...

ID сессии в адресной строке
Как и при каких обстоятельствах ИД сессии может попасть в адресную строку или в...

Изменение адреса в адресной строке
Здравствуйте. Есть ли способ сделать адресную строку более удобочитаемой,...

Нагромождение параметров в адресной строке
Организовал такой простенький файловый проводник &lt;?php error_reporting(-1);...

13
Forastero
541 / 323 / 81
Регистрация: 15.05.2013
Сообщений: 781
Записей в блоге: 1
04.06.2014, 21:01 2
Лучший ответ Сообщение было отмечено realn1x как решение

Решение

Это
PHP
1
if ($cat == 'season2' or $cat == 'films' or $cat == 'ova' or $cat == 'wall' or !$cat) {
заменяем на
PHP
1
2
$dirs = ['season2', 'films', 'ova', 'wall'];
if (in_array($cat, $dirs) || !$cat) //Хотя, проверять на доступность переменную так неправильно
Все
PHP
1
include ('//...');
заменяем на
PHP
1
require_once '//...;'
А вот "это"
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
 if (!$cat){
        include ("index.html");
    }
    elseif ($cat == 'season2' and !$p) {
    include ("season2/index.html");
    } elseif ($cat == 'season2' and $p) {
    include ("season2/$p.html");
    } elseif ($cat == 'films' and !$p) {
    include ("films/index.html");
    } elseif ($cat == 'films' and $p) {
    include ("films/$p.html");
    } elseif ($cat == 'ova' and !$p) {
    include ("ova/index.html");
    } elseif ($cat == 'ova' and $p) {
    include ("ova/$p.html");
    } elseif ($cat == 'wall') {
    include ("wall/index.html");
    }
правильнее будет сделать хотя бы вот так
PHP
1
2
3
4
5
6
isset($_GET['p']) ? $part  = $_GET['p'] : $part = 1; //или как там у вас? Может index?
switch ($cat) {
    case 'wall': require_once "dir/subdir/{$part}.html";
    break;
//...
}
2
realn1x
0 / 0 / 0
Регистрация: 04.06.2014
Сообщений: 19
04.06.2014, 21:05  [ТС] 3
Forastero, спасибо, то что вы написали так все нормальные люди делают?
0
Forastero
541 / 323 / 81
Регистрация: 15.05.2013
Сообщений: 781
Записей в блоге: 1
04.06.2014, 21:25 4
realn1x, нет.
Нормальные люди пишут класс маршрутизации пользовательских запросов на фронт контроллер, откуда могут управлять всем приложением и... Ээх... О чем это я?!
... мы ведь с вами ненормальные.
1
realn1x
0 / 0 / 0
Регистрация: 04.06.2014
Сообщений: 19
04.06.2014, 21:34  [ТС] 5
Forastero, Вы то нормальный, это я ни чего в этом не понимаю =) просто мне интересно как это все делается, нужно ведь сразу учиться делать правильно)

у меня до этого было так =) :
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
<?php
$ext=".html";
$hr = 'http://test.ai';
$tg = '_self';
if (file_exists($_SERVER['QUERY_STRING'].$ext)) {
    include ('template/header.tpl');
    include ('template/content.tpl');
    include ($_SERVER['QUERY_STRING'].$ext);
    include ('template/footer.tpl');
} else {
    include ('404.html');
}
?>
0
pav1uxa
1857 / 1711 / 802
Регистрация: 23.01.2014
Сообщений: 6,082
Завершенные тесты: 1
04.06.2014, 21:52 6
Лучший ответ Сообщение было отмечено realn1x как решение

Решение

Цитата Сообщение от realn1x Посмотреть сообщение
нужно ведь сразу учиться делать правильно)
почему же? учиться наоборот надо с чего попроще. на машине водить учат тоже не с полицейского разворота, а с правил дорожного движения... Если Вы сразу начнете делать так, как написал Forastero, Вы просто напросто ничего не поймете и забросите php То что Вы написали тоже правильно, ведь оно работает? Просто люди которые пишут большие сайты и пишут в команде - так не делают, вот и все...
1
realn1x
0 / 0 / 0
Регистрация: 04.06.2014
Сообщений: 19
04.06.2014, 22:46  [ТС] 7
pav1uxa,
Просто при таком варианте преобразование в ссылки /cat/page/1 у меня не работает, ну конечно я может что то не так делаю=)
0
pav1uxa
1857 / 1711 / 802
Регистрация: 23.01.2014
Сообщений: 6,082
Завершенные тесты: 1
04.06.2014, 22:49 8
Цитата Сообщение от realn1x Посмотреть сообщение
Просто при таком варианте преобразование в ссылки /cat/page/1 у меня не работает, ну конечно я может что то не так делаю=)
Ну это надо Ваш .htaccess смотреть, или где Вы там RewriteRule настраиваете...
0
realn1x
0 / 0 / 0
Регистрация: 04.06.2014
Сообщений: 19
04.06.2014, 22:51  [ТС] 9
pav1uxa,


Код
RewriteEngine On 
RewriteBase /

#uncoment for site on PHP
RewriteRule ^$ engine.php?index [QSA,L]
RewriteRule ^(.*)/$ engine.php?$1/index [QSA,L]
RewriteRule ^(.*).(html)$ engine.php?$1 [QSA,L]
RewriteRule ^(([^/]+/)*[^.]+)$ /$1.html [L]
0
pav1uxa
1857 / 1711 / 802
Регистрация: 23.01.2014
Сообщений: 6,082
Завершенные тесты: 1
04.06.2014, 22:55 10
realn1x, Вы сами написали эти 4 правила, или стянули откуда то? Что то страшно как то выглядит это все.
0
realn1x
0 / 0 / 0
Регистрация: 04.06.2014
Сообщений: 19
04.06.2014, 23:05  [ТС] 11
pav1uxa, конечно стянул=) я сам только пароль на директорию поставить могу )
0
pav1uxa
1857 / 1711 / 802
Регистрация: 23.01.2014
Сообщений: 6,082
Завершенные тесты: 1
05.06.2014, 14:01 12
Цитата Сообщение от realn1x Посмотреть сообщение
pav1uxa, конечно стянул=) я сам только пароль на директорию поставить могу )
Ну вы попробуйте сами разобраться. Это не сложно. К примеру вот такое условие
Код
RewriteEngine on
RewriteRule ^(.*)/(.*)/(.*)$ index.php?u1=$1&u2=$2&u3=$3 [L,QSA]
будет при вводе ссылки http://localhost/hello/world/!
PHP
1
print_r($_GET);
будет выдавать
Код
Array
(
    [u1] => hello
    [u2] => world
    [u3] => !
))
Для Вашего случая тут остается только заменить название файла (если у Вас не index.php) И название GET переменных. А так же дописать еще несколько случаев для ссылок вида http://localhost/hello/world и http://localhost/hello
0
miketomlin
Заблокирован
05.06.2014, 16:30 13
Сделайте хотя бы так: ([^/]*)

Можно парсить путь в скрипте, причем получать его даже не через строку запроса, а через $_SERVER['REQUEST_URI'], а в .htaccess просто сливать все (или почти все) запросы в парсер.
0
realn1x
0 / 0 / 0
Регистрация: 04.06.2014
Сообщений: 19
07.06.2014, 16:07  [ТС] 14
pav1uxa, у меня работает только на один уровень то есть,

Код
RewriteRule ^(.*)/$ engine.php?cat=$1 [QSA,L]
site.ru/cetegory1/ - работает

делаю второе правило
Код
RewriteRule ^(.*)/(.*)/$ engine.php?cat=$1&p=$2 [QSA,L]
site.ru/category1/page1/ - выдает 404

Добавлено через 4 минуты
Хотя я думаю это в моем engine.php грех

Добавлено через 1 минуту
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
<?php
$ext=".html";
$hr = 'test.aip';
$tg = '_self';
$cat = $_GET['cat'];
$p = $_GET['p'];
if ($cat == 'season2' or $cat == 'films' or $cat == 'ova' or $cat == 'wall' or !$cat) {
    require_once ('template/header.tpl');
    require_once ('template/content.tpl');
    if (!$cat){
        include ("index.html");
    } elseif ($cat == 'season2' and !$p) {
    require_once ("season2/index.html");
    } elseif ($cat == 'season2' and $p) {
    require_once ("season2/$p.html");
    } elseif ($cat == 'films' and !$p) {
    require_once ("films/index.html");
    } elseif ($cat == 'films' and $p) {
    require_once ("films/$p.html");
    } elseif ($cat == 'ova' and !$p) {
    require_once ("ova/index.html");
    } elseif ($cat == 'ova' and $p) {
    require_once ("ova/$p.html");
    } elseif ($cat == 'wall') {
    require_once ("wall/index.html");
    }
    require_once ('template/footer.tpl');
} else {
require_once ('404.html');  
}
?>
0
07.06.2014, 16:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.06.2014, 16:07

передача параметров в адресной строке
Очередной тупик... &lt;?php error_reporting(-1); $ref = (isset($_GET)) ?...

Убрать расширение php в адресной строке
Всем привет! Прочитал, что это можно сделать при помощи файла .htaccess. Создал...

В адресной строке вместо localhost пишет [::1]
Добрый день. У меня в адресной строке сайта на локале, вместо localhost пишет ...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru