Вступление

1. Для начала, определимся с инструментарием. Имеется в виду не серверная часть (PHP, Apache и MySQL, а так же средства, способствующие удобствам работы с ними, типа phpMyAdmin должны быть установленны. В крайнем случае, можно использовать Денвер Дмитрия Котерова). Рассмотрим библиотеки, которые мы будем использовать.

Шаблонизатор. Воспользуемся простым шаблонизатором XTpl (http://sourceforge.net/projects/xtpl). Скaчать саму библиотеку (без примеров) можно прямо отсюда. Почему именно он? Потому, что он простой и шустрый.

Класс для доступа к БД. Для удобства доступа к MySQL предлагаю воспользоваться простеньким классом, который облегчит обработку результатов SQL-запросов. Он (я надеюсь) не сложен и более-менее понятно комментирован, так что проблем с ним не должно возникнуть. Ниже я привожу его код, который надо будет сохранить в файле mysql.incl.

<?php
/*    
    Файл mysql.incl
    Класс для упрощенной работы с MySQL
    (c) Eugene Bond
*/    
class DB {
    var 
$db;
    
    
//    
    //    Конструктор. Принимает параметры для подключения к базе и имя БД
    //    
    
function DB($host$user$pass$base="") {
        if (
$base==""$base=$user;        //    Если имя БД не задано, устанавливаем его равным имени пользователя
        
$this->$db mysql_connect($host$user$pass) or die("Не могу подключится к MySQL");
        
mysql_select_db($base$this->$db) or die('Не могу выбрать базу данных');
    }
    
    
//    
    //    Унификатор запроса к БД
    //    
    
function request($sql) {
        
$res mysql_query($sql);
        if (
$res) return $res;
        else {
            
$err "<BR><FONT COLOR=#FF0000>Ошибка!!!!!! при выполнении запроса:</FONT><BR><FONT COLOR=#0000FF>".$sql."</FONT><BR><FONT COLOR=#FF0000>".mysql_error()."</FONT><BR>";
            echo 
$err;
        }
        return 
0;
    }
    
    
//    
    //    Запрос к БД. Текст запроса передается переметром $sql
    //    Если параметр $r равен 1 - возвращаем массив записей, если 0 - возвращаем массив одной записи
    //    Параметр $type отвечает за то, в каком виде будет вернувшийся массив. См. ман!
    //
    
function select($sql$r=1$type=MYSQL_BOTH) {
        if (
$res $this->request($sql)) {
            if (
$r) {
                
$i=0;
                while (
$res_arr mysql_fetch_array($res$type)) $ret_arr[$i++]=$res_arr;
                return 
$ret_arr;
            } else return 
mysql_fetch_array($res$type);
        }
        return 
0;
    }
    
    
//    
    //    Запрос к БД. Текст запроса передается переметром $sql
    //    Если параметр $r равен 1 - возвращаем ассоциативный массив, если 0 - возвращаем одно значение
    //
    
function a_select($sql$r=1) {
        if (
$res $this->request($sql)) {
            if (
$r) {
                while (
$res_arr mysql_fetch_row($res)) $ret_arr[$res_arr[0]]=$res_arr[1];
            } else {
                
$res_arr mysql_fetch_row($res);
                
$ret_arr $res_arr[0];
            }
            return 
$ret_arr;
        }
        return 
0;
    }
    
    
//    
    //    Изменение одной записи. Если $cur_id равен 0 - вставляем новую запись в таблицу $cur_tbl,
    //    Если $cur_id не равен 0 - меняем запись с id равным $cur_id.
    //    $osql - список изменяемых полей в формате "field1='value1', field2='value2', ..."
    //    Если $block==true - блокируем таблицу на время операции
    //
    
function modify($osql$cur_tbl$cur_id$block=false){
        
$sql=(($cur_id)?"UPDATE":"INSERT")." $cur_tbl SET ".$osql;
        if (
$cur_id$sql .= " WHERE id=$cur_id";
        if (
$blockmysql_query("LOCK TABLES ".$cur_tbl." WRITE");
        if (
$res=$this->request($sql)) {
            if (!
$cur_id$cur_id=mysql_insert_id();
        }
        if (
$blockmysql_query("UNLOCK TABLES");
        return 
$cur_id;
    }
}
?>


Рабочая библиотека. В нее мы сложим все функции и инициализации, общие для нашего портала. На первом этапе это будет подключение к базе и инициализация шаблонизатора. Приведенный ниже код сохранияем в файл work.incl подправляем, если необходимо, параметры конструктора DB (первый параметр - адрес MySQL, второй - имя пользователя, третий - пароль пользователя и четвертый - имя БД в которой лежат наши таблицы)

<?php
    
//    Файл work.incl
    //    Этот файл будет подключаться ко всем рабочим файлам
    //    и содержать общие для всех модулей функции
    
    
include "mysql.incl";                                //    Подключаем библиотеку MySQL
    
$db = new DB("localhost""root""""portal");    //    Соединяемся с БД
    
    
include "xtpl.p";                                    //    Подключаем библиотеку шаблонизатора
    
$tpl = new XTemplate("html/main.html");                //    Инициализируем шаблонизатор и задаем базовый шаблон
?>



2. Структура проекта предлагается следующая:
В корне сайта изначально будут созданы следующие директории:
incl - сюда мы сложим библиотечные файлы (mysql.incl, work.incl и xtpl.p для начала)
html - здесь будут лежать шаблоны страниц для нашего портала

Дальше будет видно ;-)


Вот, теперь можно начинать! Строка разрешает и только ему доступ