Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Переход по страницам на PHP

Ответить
Настройки темы
Переход по страницам на PHP

Аватара для fossil

Ветеран


Сообщения: 637
Благодарности: 20


Конфигурация

Профиль | Сайт | Отправить PM | Цитировать


Привет, недавно начал изучать PHP, и вот пишу сайт.
Имеется главная страница index.php. На ней есть таблица, слева линк $PHP_SELF?action=states, а справа прописано include($inc);

В index.php лежит скрипт типа:
if ($action == "states"){
$inc="states.php";
}

При нажатии все нормально загружается.
На states.php у мен лежит линк такого соджержания $PHP_SELF?action=states&st=01

Вопрос:
Как сделать чтобы при нажатии на этот линк страница открывалась здесь же.
Я пытался сам написать, и вот что вышло:
index.php

if ($action == "states") {
$inc="states.php"
if ($st == $st and $st != "") {
$inc="states/$st.htm";
}
}

Все бы ничего, но если ввести неправильно сформированный запрос, то можно читать любые файлы на сервере Вариант с else {$inc="error.htm";} не прокатывает, так как при заходе на states.php вылезает error.htm

-------
Согласно непопулярному мнению, Windows - враждебная ОС.
Так получилось, что Windows не выбирает себе друзей.


Отправлено: 13:36, 01-10-2005

 

Ночной странник


Contributor


Сообщения: 4050
Благодарности: 83

Профиль | Сайт | Отправить PM | Цитировать


fossil
я думаю что настоящая проблемма заключается в том что вы не знаете как это все можно организовать с помощью другово метода?

-------
можно практически все, но просто мы это еще не знаем.
главный враг програмиста это копипастинг
За хорошее сообщение не забываем нажимать ссылочку "Полезное сообщение"!


Отправлено: 14:00, 01-10-2005 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для fossil

Ветеран


Сообщения: 637
Благодарности: 20

Профиль | Сайт | Отправить PM | Цитировать


Vlad Drakula
Именно так. Ну или возможно как-то переделать этот. Хотя я думал над ним долго....

-------
Согласно непопулярному мнению, Windows - враждебная ОС.
Так получилось, что Windows не выбирает себе друзей.


Отправлено: 15:04, 01-10-2005 | #3


Ночной странник


Contributor


Сообщения: 4050
Благодарности: 83

Профиль | Сайт | Отправить PM | Цитировать


fossil
если вы опишите свою задачу более подробдо, то я скорее всего смогу предложить вам более простой вариант решения.

-------
можно практически все, но просто мы это еще не знаем.
главный враг програмиста это копипастинг
За хорошее сообщение не забываем нажимать ссылочку "Полезное сообщение"!


Отправлено: 15:48, 01-10-2005 | #4


Аватара для fossil

Ветеран


Сообщения: 637
Благодарности: 20

Профиль | Сайт | Отправить PM | Цитировать


Первая страница (index.php) является как бы шаблоном. Остальные страницы в меню инклюдиться таким образом include("$inc"); Меню имеет вид $PHP_SELF?action=
В зависимости от линка присваиваются параметры Тут же эти линки обрабатываются и инклюдится нужная страница. Например

if ($action == "states"){
$inc="states.php";
}

С этим впринципе проблем не возникает.

На странице states.php лежат линки с параметрами $PHP_SELF?action=states&st= в переменную st присваивается номер статьи. Все статьи лежат в каталоге states в htm. Така как у меня states.php инклудится, то все линки на states.php следовательно должны обрабатываться в index.php и инклудиться.

Например у меня в states.php лежит линк $PHP_SELF?action=states&st=01

Следовательно я дописал в index.php следующие строки:

if ($action == "states") {
$inc="states.php"
if ($st == $st and $st != "") {
$inc="states/$st.htm";
}
}

Получается что когда я жму на линк в инклуженном states.php инклудится статья /states/$st.htm (где $st номер статьи).
Вот впринципе и все. Если например сделать запрос http://mysite.ru/index.php?action=st.../etc/passwd%00 нам выведется его содержимое

Надо же сделать если ввести что либо другое, то вместо /states/$st.htm инклудилась error.htm, или же как-то сделать подругому запрос.

-------
Согласно непопулярному мнению, Windows - враждебная ОС.
Так получилось, что Windows не выбирает себе друзей.


Отправлено: 16:14, 01-10-2005 | #5


Аватара для vadimiron

Ветеран


Сообщения: 1864
Благодарности: 120

Профиль | Отправить PM | Цитировать


fossil
Такая система, которую вы создаёте, обычно называется модульной, и states здесь выступает модулем
Есть пару вопросов-предложений:
Во-первых, почему вы пишете
PHP код: Выделить весь код

if ($action == "states"){

$inc="states.php";


Наверняка у вас будет не только один модуль, а со времен добавяться ещё, тогда может лучше писать так:
PHP код: Выделить весь код

if (!empty($action))

{
$inc=$action.".php";


Можно также проверять, существует ли вообще такой модуль, если нет, то выводим ошибку "такого модуля нет"
PHP код: Выделить весь код

if (!empty($action))

{
    if(
file_exists($action.".php"))  $inc=$action.".php";
    else echo 
"Ошибка: Такой страницы не существует";


Обработка переменной $st должна вообще происходить не в index.php, а в том модуле, к которуму она логически принадлежит, то есть в вашем случае в states. Система здесь действует также: проверяем не пуста ли переменная, если нет, то смотрит, существует ли соответствующий данной переменной файл (то есть статья), если существует, то подключаем, если нет, то выводим надпись с ошибкой.

Ещё замечание к модульной системы, если нету переменной action или эта переменная указывает на не существующий модуль, можно подключать стандартный модуль main (или типа того), который будет являться первой страницей сайта

-------
Fortes fortuna adiuvat


Отправлено: 17:53, 01-10-2005 | #6


Аватара для fossil

Ветеран


Сообщения: 637
Благодарности: 20

Профиль | Сайт | Отправить PM | Цитировать


Спасибо большое!

-------
Согласно непопулярному мнению, Windows - враждебная ОС.
Так получилось, что Windows не выбирает себе друзей.


Отправлено: 19:37, 01-10-2005 | #7


Аватара для elfoflorien

Старожил


Сообщения: 158
Благодарности: 1

Профиль | Отправить PM | Цитировать


fossil
еще не плохо бы проверять переменную $st на наличие ../, ./, /root, /etc, и т. д., иначе, конечно получается очень нехорошая штука:
Цитата:
Если например сделать запрос http://mysite.ru/index.php?action=s..../etc/passwd%00 нам выведется его содержимое

-------
panem et circences! (c)


Отправлено: 23:34, 01-10-2005 | #8


Ночной странник


Contributor


Сообщения: 4050
Благодарности: 83

Профиль | Сайт | Отправить PM | Цитировать


elfoflorien
Цитата:
Если например сделать запрос http://mysite.ru/index.php?action=s..../etc/passwd%00 нам выведется его содержимое
а это значит скорее всего у вас не правильные настройки, раз операционка дала прочитать из пхп этот файл!

-------
можно практически все, но просто мы это еще не знаем.
главный враг програмиста это копипастинг
За хорошее сообщение не забываем нажимать ссылочку "Полезное сообщение"!


Отправлено: 10:54, 02-10-2005 | #9


Аватара для elfoflorien

Старожил


Сообщения: 158
Благодарности: 1

Профиль | Отправить PM | Цитировать


Vlad Drakula
на счет настроек не знаю (где это настраивается в Linux?), но такое у меня получалось и под Linux, и под Windows

-------
panem et circences! (c)


Отправлено: 14:33, 04-10-2005 | #10



Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » Переход по страницам на PHP

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Доступ - [решено] Как отключить доступ к интернет страницам ВладимирТ Microsoft Windows 2000/XP 2 25-11-2008 08:19
[решено] Доступ к сохраненным на компьютере Web страницам adja Хочу все знать 4 05-07-2008 20:02
[решено] Apache 2.2.8 + Php 5.2.6 + MySQL 5.0.51b (win) - не работает php v0f41k Вебмастеру 4 11-05-2008 22:08
PHP. Как сделать возможность перехода по страницам? JavaScript Вебмастеру 5 10-09-2007 13:24
Доступ поисковика к закрытым страницам ScorpionXXX Хочу все знать 5 18-06-2006 02:20




 
Переход