Модераторы: skyboy, MoLeX, Aliance, ksnk

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Модулирование CMS? Помогите реализовать 
:(
    Опции темы
newnoob
Дата 25.1.2007, 06:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 5.1.2007

Репутация: нет
Всего: нет



Вообщем интересует каким образом можно реализовать ссылки к примеру: index.php?name=Account

Структура такая:

index.php
`modules
``News
```index.php

Просто link.ru/news.php нипокатит, нужно именно реализовать модули. Если несложно скиньте пару примеров и линков..


Заранее спс
PM MAIL   Вверх
Gold Dragon
Дата 25.1.2007, 08:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



index.php
Код

<?php
define( '_INDEX', 1 );

include('skin.php');

$pages = (isset($_REQUEST['pages'])) ? $_REQUEST['pages'] : '';

switch ($pages) {
    case 'index3': // третья страница
        require('index3.php');
        break;
    case 'index2': // Вторая страница
        require('index2.php');
        break;
    case 'index1': // Первая страница
        require('index1.php');
        break;
    default: // главная страница
        require('index.main.php');
}
?>

skin.php
Код

<?php
defined( '_INDEX' ) or die( 'Доступ запрещен' );

//*************************************************
// Функция Макет страницы
//*************************************************
function skin($content){
return <<<EOF
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
    <title>Тест</title>
</head>
<body topMargin=0 leftMargin=0 rightMargin=0 bottomMargin=0 bgcolor="#FF0000">
<table width="100%" height="100%"  cellspacing="0" cellpadding="0" border="0">
    <tr>
        <!-- Левая часть -->
        <td width="20%">
            <a href="index.php">&raquo;Главная страница</a><br>
            <a href="index.php?pages=index1">&laquo;Первая страница</a><br>
            <a href="index.php?pages=index2">&raquo;Вторая страница</a><br>
            <a href="index.php?pages=index3">&raquo;Третья страница</a><br>
        </td>
        <!-- Центральная часть -->
        <td width="60%">
            <p><H1>Тестовый сайт</H1>
            <hr>
            <p>{$content}
        </td>
        <!-- Правая часть -->
        <td width="20%">
            <p>Правая часть страницы
        </td>
    </tr>
</table>
</body>
</html>
EOF;
}
?>

index.main.php
Код

<?php
defined( '_INDEX' ) or die( 'Доступ запрещен' );

echo skin(sIndexMain());

//*************************************************
// Функция Содержания Главной Страницы
//*************************************************
function sIndexMain(){
return <<<EOF
    <p><H1>Главная страница</H1>
    <p>Содержание Главной страницы
EOF;
}
?>

index1.php
Код

<?php
defined( '_INDEX' ) or die( 'Доступ запрещен' );

echo skin(sIndex1());

//*************************************************
// Функция Содержания Первой Страницы
//*************************************************
function sIndex1(){
return <<<EOF
    <p><H1>Первая страница</H1>
    <p>Содержание первой страницы
EOF;
}
?>

index2.php
Код

<?php
defined( '_INDEX' ) or die( 'Доступ запрещен' );

echo skin(sIndex2());

//*************************************************
// Функция Содержания Второй Страницы
//*************************************************
function sIndex2(){
return <<<EOF
    <p><H1>Вторая страница</H1>
    <p>Содержание второй страницы
EOF;
}
?>

index3.php
Код

<?php
defined( '_INDEX' ) or die( 'Доступ запрещен' );

echo skin(sIndex3());

//*************************************************
// Функция Содержания Третьей Страницы
//*************************************************
function sIndex3(){
return <<<EOF
    <p><H1>Третья страница</H1>
    <p>Содержание третьей страницы
EOF;
}
?>


PS
это часть моего шаблона.. Вдруг пригодиться


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Mal Hack
Дата 25.1.2007, 20:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



PM ICQ   Вверх
newnoob
Дата 26.1.2007, 01:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 5.1.2007

Репутация: нет
Всего: нет



Gold Dragon, Спасибо то что нужно, пример smile
Mal Hack, Читал топик, теорию я знаю, а вот применить все знания не совсем могу.. С Шаблонизатором разобрался с ядром тоже но вот реализовать нормально модули немогу ):

И последний впринципе вопрос, как сделать ссылку так сказать 2-го уровня тоесть:

Сейчас есть: index.php?pages=news
Нужно сделать вывод не только всех к примеру новостей но и каждой в отдельности к примеру с комментами (Комменты разумееться сам уже прикручивать буду и скрипт новостей)

Код

<?php

defined( 'CMS' ) or die( 'Access Denied.' );

echo skin(sNews());

function sNews(){
return <<<EOF
    <p><H1>News</H1>
    <p>Новостная лента
EOF;
}

?>


Нужно сделать: index.php?name=News&id=1 (Тоесь номер новости, линк что бы посмотреть подробнее)

Помогите плз ):

Это сообщение отредактировал(а) newnoob - 26.1.2007, 03:00
PM MAIL   Вверх
Gold Dragon
Дата 26.1.2007, 09:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



ну примерно так... Может это и не оптимально, зато понятно (для меня smile )

Код

<?
defined( 'CMS' ) or die( 'Access Denied.' );

// получаем ID новости
$id = (isset($_REQUEST['id'])) ? $_REQUEST['id'] : '';

// проверяем на валидность
if (fVvalidInt($id){// если остались цифры
    // то пытаемтся её получить
    // будем считать что у тебя:
    // таблица news,
    // струстура id, name, data, text, auter
    $z = "SELECT * FROM `news` WHERE `id`=".$id;
    $r = mysql_query($z);
    if(mysql_num_rows($r)>0){// если есть то выводим
        $f = mysql_fetch_array($r);
        //тут как ты её хочешь выводить
        // присваиваем результать переменной
        $result = sNewsLine($f);
    }else{// если новости с таким ID нет то выводим ошибку
        $result = sError();
    }
}else{// если в ID нет цифр то выводим ошибку
    $result = sError();
}

echo skin(sNews($result));

function fVvalidInt($int){
//*****************************************************************
// остаются только цифры
// если цифр нет, возвращает FALSE
//*****************************************************************
    $id = preg_replace('#\D+#','',$int);
    if($id=='')return FALSE;
    else return $id;
}

function sNews($result){
//*****************************************************************
// форма самой страницы
//*****************************************************************
return <<<EOF
    <p><H1>News</H1>
    <hr>
    {$result}
EOF;
}

function sNewsLine($news){
//*****************************************************************
// форма для вывода самой новости
//*****************************************************************
return <<<EOF
    <p><H1>{$news['name']}</H1>
    <p>{$news['data']}
    <p>{$news['text']}
    <p>$news['autor']
EOF;
}

function sError(){
//*****************************************************************
// форма для вывода ошибки
//*****************************************************************
return <<<EOF
    <p><H1>Ошибка!</H1>
    <p>Новости с таким ID не существует!
EOF;
}

?>


ps
код не проверял? лень таблицу создавать  smile 


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Mal Hack
Дата 26.1.2007, 14:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



В догону... $_REQUEST использоват не рекомендуется в целях безопасности.
И еще, mysql_real_escape_string не забываем для входных параметров.
PM ICQ   Вверх
Gold Dragon
Дата 26.1.2007, 14:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



Цитата(Mal Hack @  26.1.2007,  14:44 Найти цитируемый пост)
$_REQUEST использоват не рекомендуется в целях безопасности
поясни

Цитата(Mal Hack @  26.1.2007,  14:44 Найти цитируемый пост)
И еще, mysql_real_escape_string не забываем для входных параметров.

забыл smile ... Но.. в чём проблема безопасности?


--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Mal Hack
Дата 26.1.2007, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Цитата(Gold Dragon @  26.1.2007,  14:56 Найти цитируемый пост)
поясни

Этот массив объединяет ТРИ. GPC, и откуда пришли данные даже Апачу не известно.


PM ICQ   Вверх
-=Ustas=-
Дата 26.1.2007, 15:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 32
Всего: 69



В данной конструкции
Код

$id = (isset($_REQUEST['id'])) ? $_REQUEST['id'] : '';

if (fVvalidInt($id){// если остались цифры
    $z = "SELECT * FROM `news` WHERE `id`=".$id;

в запросе $z будет $id иметь значение из $_REQUEST['id'], т.е. в данном случае ваша функция fVvalidInt по барабану. Здесь либо передачу параметров ставьте по ссылке, т.е.
Код

function fVvalidInt( &$int ) {
    $int = preg_replace('#\D+#','',$int);
    if($int=='')return FALSE;
    else return $int;
}

Либо вверху достаточно выполнить
Код

$id = ( isset( $_REQUEST['id'] ) ) ? intval( $_REQUEST['id'] ) : 0;

if ( $id ) {
    $z = "SELECT * FROM `news` WHERE `id`=".$id;


Здесь я бы убрал одну строку, вместо
Код

if(mysql_num_rows($r)>0){// если есть то выводим
        $f = mysql_fetch_array($r);

Код

if($f = mysql_fetch_array($r)){// если есть то выводим




--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Gold Dragon
Дата 26.1.2007, 16:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



Цитата(Mal Hack @  26.1.2007,  15:05 Найти цитируемый пост)
Этот массив объединяет ТРИ. GPC, и откуда пришли данные даже Апачу не известно.
согласен. Но если я сам знаю от куда они пришли, как сильно это мешает?

Цитата(-=Ustas=- @  26.1.2007,  15:36 Найти цитируемый пост)
в запросе $z будет $id иметь значение из $_REQUEST['id'], т.е. в данном случае ваша функция fVvalidInt по барабану. Здесь либо передачу параметров ставьте по ссылке, т.е
не очень понял.. А если я получаю из адресной строки, к примеру,
index.php?pages=news&id=1e2
или
index.php?pages=news&id=1kukuku2
то не совсем и по барабану...

Цитата(-=Ustas=- @  26.1.2007,  15:36 Найти цитируемый пост)
&$int
А это что?





--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Mal Hack
Дата 26.1.2007, 19:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Цитата(Gold Dragon @  26.1.2007,  16:06 Найти цитируемый пост)
согласен. Но если я сам знаю от куда они пришли, как сильно это мешает?

Все заголовки можно подделать. К тому же, на большом проекте можно запутаться в именовании полей формы и параметров адресной строки..
К тому же, через $_POST, $_GET - нагляднее.

Цитата(-=Ustas=- @  26.1.2007,  15:36 Найти цитируемый пост)
Здесь либо передачу параметров ставьте по ссылке, т.е.

Я бы через ctype_dygit сделал, причем имеено в том месте, где $id = () ? :;

Цитата(Gold Dragon @  26.1.2007,  16:06 Найти цитируемый пост)
А это что?

Ссылка на переменную.. Не сишники не поймут прикола smile
PM ICQ   Вверх
Gold Dragon
Дата 27.1.2007, 08:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



Цитата(Mal Hack @  26.1.2007,  19:13 Найти цитируемый пост)
К тому же, через $_POST, $_GET - нагляднее.
да задолбался я то это то это проверять, вот и решил объединить, у меня всё равно все переменные однозначно разные  smile 

Цитата(Mal Hack @  26.1.2007,  19:13 Найти цитируемый пост)
Ссылка на переменную.. Не сишники не поймут прикола
 а это надо делать?

Цитата(Mal Hack @  26.1.2007,  19:13 Найти цитируемый пост)
Я бы через ctype_dygit сделал, причем имеено
в том-то и дело что я не проверяю на наличие (проверяю конечно smile ), а именно оставляю одни цифры. А вдруг такой ID есть, то лишний раз usera на страницу ошибок не вести smile



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
-=Ustas=-
Дата 27.1.2007, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Ustix IT Group
****


Профиль
Группа: Участник Клуба
Сообщений: 2222
Регистрация: 21.1.2005
Где: Краснодар

Репутация: 32
Всего: 69



Цитата(Gold Dragon @  26.1.2007,  16:06 Найти цитируемый пост)
то не совсем и по барабану...


Gold Dragon, там дело совсем не в глобальных массивах, а в неправильной обработке этой переменной. Вот смотри, скажи мне, где тут у тебя присваивается переменной $id значение, возвращенное функцией?!?!?!
Код

$id = (isset($_REQUEST['id'])) ? $_REQUEST['id'] : '';
if (fVvalidInt($id){// если остались цифры
    $z = "SELECT * FROM `news` WHERE `id`=".$id;

Если $_REQUEST['id'] будет иметь к примеру такое значение
Код

index.php?id=1'%20UNION20%SELECT... // и так далее

то SQL-инъекции тебе не избежать, т.к. функция fVvalidInt НЕ ПРИСВАИВАЕТ ЗНАЧЕНИЕ ПЕРЕМЕНННОЙ $id. Поэтому либо по ссылке обрабатывай данные, т.е. & , либо эта функция и вообще не нужна, т.к. хватит intval-а в начале строки, либо надо делать так
Код

$id = (isset($_REQUEST['id'])) ? $_REQUEST['id'] : '';
if ($id = fVvalidInt($id){// вот тут делаем присвоение, и заодно проверям на false
    $z = "SELECT * FROM `news` WHERE `id`=".$id;

Надеюсь понятно объяснил ;)


--------------------
В искаженном мире все догмы одинаково произвольны, включая догму о произвольности догм.
-----
PM WWW ICQ Skype   Вверх
Mal Hack
Дата 27.1.2007, 15:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



Цитата(Gold Dragon @  27.1.2007,  08:23 Найти цитируемый пост)
в том-то и дело что я не проверяю на наличие (проверяю конечно smile ), а именно оставляю одни цифры. А вдруг такой ID есть, то лишний раз usera на страницу ошибок не вести smile

Раз ошибка, значит ее надо покозывать.


Цитата(Gold Dragon @  27.1.2007,  08:23 Найти цитируемый пост)
а это надо делать?

В случае 5 PHP - нет.
PM ICQ   Вверх
Gold Dragon
Дата 29.1.2007, 09:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Призрачный
****


Профиль
Группа: Экс. модератор
Сообщений: 6753
Регистрация: 1.3.2004
Где: Россия, Тамбов

Репутация: 10
Всего: 71



Народ, а если я проверяю в любом случае $id, то какой смысл мне бояться SQL-инъекции?

Цитата(Mal Hack @  27.1.2007,  15:41 Найти цитируемый пост)
Раз ошибка, значит ее надо покозывать.
да знаю smile



--------------------
Нельзя жить в прошлом, оно уже прошло.
Нельзя жить в будущем, оно ещё не наступило.
Нужно жить в настоящем, помня прошлое и думая о будущем!
PM MAIL WWW ICQ   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0862 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.