Всем привет, хочу сделать единый переключатель для модулей сайта, например: регистрация, авторизация, профили, и т.д. Переключатель должен перенаправлять пользователя, в зависимости куда он нажал. И я просто не могу понять при условии таком: PHP: //Определяем переменную для переключателя $go = isset($_GET['go']) ? $_GET['go'] : false; //Структура переключателя. switch($go){ //Регистрация case "register": include '/system/modules/register.php'; break; //Авторизация case "login": include '/system/modules/login.php'; break; //Профиль пользователя case "profile": include '/system/modules/profile.php'; break; /*тут идут другие подключаемые модули*/ default: /*любая страница которые вы хотите по умолчанию*/ } Как направить данного пользователя на страницу если он нажал на ту или иную ссылку или кнопку. Пробовал сделать так: PHP: <!-- если в сессии не загружены логин и id --> <?php if (!isset($_SESSION['login']) || !isset($_SESSION['user_id'])) { ?> <li><a href="?go=login" title="Войти">Войти </a></li> <li><a href="?go=register" title="Регистрация">Регистрация</a></li> <?php } ?> Но он не хочет переходить по ссылкам, может кто подскажет, свои аргументы, что не так делаю.
Отлаживай, что ещё сказать можно? --- Добавлено --- Я бы, конечно, без switch обошёлся вообще PHP: //Определяем переменную для переключателя $go = isset($_GET['go']) ? basename($_GET['go']) : false; // basename - чтоб нам не передали лишнего if ($go && file_exist(__DIR__ . "/system/modules/$go.php")) { include __DIR__ . "/system/modules/$go.php"; } else { /* Что-то по-дефолту */ } PHP динамический язык, надо этим пользоваться.
@mkramer Ты забыл закрыть ) Ну не понял как с ним работать( Объясни пожалуйста строки эти, которые ты написал. Я просто не хочу указывать в ссылках вот например вот так: PHP: <li><a href="site/system/mod.php?go=login" title="Войти">Войти </a></li> То есть мы показываем папку, как называется скрипт ну и далее уже обработка другого скрипта. Может есть другой способ в ссылках указать как то по лучше, с использованием switch. Или это и есть нормальное использование в ссылке на другие скрипты?
Ну забыл и забыл - я это даже ошибкой не считаю. Интерпретатор ругнётся - я закрою В get-параметре go передаётся имя файла, который надо включить От него отрезается всё лишнее, чтобы нельзя было передать путь и запустить те файлы, которые не следует Проверяется, существует ли в нужной папке такой файл Если существует - он включается (include в php может принимать переменные, поскольку включение происходит во время выполнения, а не во время компиляции, как в языках типа C++) Если не существует, или не передан - отрабатывает какое-то поведение по умолчанию. И что я такого сложного и непонятного написал? --- Добавлено --- Почему там у тебя что-то где-то не переходит, можно выяснить только отлаживая по частям твой код. У меня телепатического доступа к твоему компу нема.
@mkramer Через программу TeamViewer можешь подключится))) если не сложно и посмотреть))) И подсказать если не сложно конечно.
За это деньги берут Дался тебе switch, показал же, как без него обойтись, минимальным количеством строчек. Уже и алгоритм разжевал Потом делаешь ссылки типа Код (Text): /index.php?go=register
@mkramer Вот в том то и дело не понял, ну например написал, я пример твой, а дальше что? На любой странице я могу потом указывать ссылки такого типа? Или только в этом файле?
Скучный ты. Вообще думать не желаешь. Конечно, на любой странице, ты указываешь адрес этого скрипта с нужным параметром go и другими параметрами, а он разруливает. Ты вообще в курсе, как работает php? Как работает браузер и веб-сервер? http://phpfaq.ru/na_tanke В принципе, ты switch-ем пытался сделать ровно тоже самое, только строчек больше, поэтому и странно, что не можешь понять, как пользоваться этим.
@mkramer Ты не думай что я не думаю, все я думаю просто не с первого раза получается понять. Fatal error: Call to undefined function file_exist() in Ругается на функцию.
@mkramer Да я понял))) Но все же я указываю в ссылке с твоим кодом вот так: HTML: <li><a href="/system/mod.php?go=register" title="Регистрация">Регистрация</a></li> И переходит по ссылке) Но эта запись есть правильной?
Ну раз переходит, то "правильной" Я же не знаю, куда ты код залил. Если в /system/mod.php, то да, такие ссылки.
Да именно так я залил код, сделал по другому, в index.php указал include 'полный путь/mod.php'; Теперь при переходе по ссылке, я использую все го лишь: HTML: <li><a href="?go=register" title="Регистрация">Регистрация</a></li> Не показывая папку и не показывая скрипта что отвечает за этот переключатель. И он переходит как мне хотелось бы. Будет ли логично так использовать? И сразу добавлю, вопросик, как лучше создавать файл или файлы. Имея один обработчик и форму для него, или все в одном файле?
Если работает, почему бы нет? Можно и так и так. Как тебе будет понятнее. Правило одно: успешная (а некоторые считают, что любая) обработка POST-запроса должна заканчиваться редиректом, а не выводить данные.
@mkramer Понятно спасибо! Переделываю не много, базу данных. Кстати этот медок который ты предложил и о котором я писал switch. Сравнения такое: В switch можно добавить еще условия там какие-то еще данные. А в твой метод как можно что добавить?
В файлах на которые он разруливает могут быть условия. В switch ты же можешь в сам вынести только одно условие, а остальное будет в case-ах, вот те условия, которые в case-ах ты бы писал, пишешь в файлах, на которые разруливает мой код. А вообще, развиваться, конечно надо, приходить к MVC, фреймворкам. Но для начала предложенный мной роутер лучше, чем куча case-ов, поскольку для нового функционала нужно просто добавить файлик с нужным именем куда надо, а не раздувать до гигантских размеров switch. Его конечно можно ещё развить, для обработки остальной части строки, ну тут уже твоя фантазия должна включиться, там можно много чего наворотить, главное понять принцип.
@mkramer У меня вопрос, а от куда он знает что это например выход ссылка? Ваш кусок кода? Вот например на выход я вещаю так: cayt.ru/?go.logout От куда он знает что это выход я этого не понял? Я протестировал, и понял, что данный код обрезает кусок PHP и просто можно будет названия скрипта писать без PHP в конце. Так ли это?
во первых, cayt.ru/?go=logout Во-вторых, ему вообще похрен, выход это или вход, или форматирование жёсткого диска на сервере. Я же по шагам описал алгоритм. Да, расширение php в ссылках не указывается - скрипту его не сложно подставить. Имя включаемого файла в php может формироваться динамически, благодаря этому можно делать вот такие штуки. Как объяснить проще я не знаю
@mkramer Так значит свитч вы мне не рекомендуете из-за того что много строк получается? За то я обращаюсь к файлам не много по другому)
Ох, не рекомендовал бы я новичкам такие вещи. Это ж верная брешь в безопасности - инклудить то, что в гете придет, не задумываясь. Я понимаю, что пример "академический", но если он его возьмет "как есть", это будет дыра размером с марианскую впадину.