3. копирайт
<p id="copy">© 2006 <a href="<?=$my->copy_url?>"><?=$my->copy_name?></a>.
4-5. конец HTML
</body>
</html>
Теперь объясняю что за переменные типа $path_inc, $copy_name, $site_name, $generator, $version и др. Встречались в предыдущих инклудах. Эти глобальные переменные прописаны в init.class. Вот он:
<?
Называем класс и открываем скобку
class class_init
{
Пути к проекту на диске – при переносе должны быть изменены
var $path_data='d:\Work\FileExchanger alpha\data';
var $path_inc='d:\Work\FileExchanger alpha\inc';
var $path_files='d:\Work\FileExchanger alpha\files';
var $path_http='http://localhost/';
копирайт
var $copy_name='stbear-l2';
var $copy_url='http://copi.ru/68614';
мой любимый редактор
var $generator='AkelPad 2.1.6';
имя сайта – отображается в top.inc
var $site_name='File Exchanger';
адреса e-mail
var $email_support='stbear@centrum.cz';
var $email_robot='robot@localhost';
версия
var $version='alpha4+';
время кэширования страниц (функция send_headers())
var $cache_time=180;
максимальный номер ошибки, которая отправляется админу.
var $debug_level=50;
указатель на соединение с базой
var $sql_link;
реквизиты доступа к БД
var $sql_host='localhost';
var $sql_login='root';
var $sql_pass='';
var $sql_db='db_files';
запрос формируется в этой переменной
var $sql_task;
ошибки SQL (для дебага)
var $sql_error;
var $sql_errno;
результат выполнения запроса
var $sql_res;
Стартует соединение с БД, если этого не было сделано ранее
function sql_start()
{
Устанавливаем соединение с SQL-сервером. Использовать pconnect предпочтительнее
if(!$this->sql_link=@mysql_pconnect($this->sql_host,$this->sql_login,$this->sql_pass)) return(11);
Выбираем нашу БД.
if(!@mysql_select_db($this->sql_db)) return(12);
return(0);
}
Основная функция для взаимодействия с БД
function sql_run()
{
Если нет соединения с БД, вызывается sql_start()
if(!$this->sql_link) if($err=$this->sql_start()) return($err);
собственно выполняется запрос
$this->sql_res=@mysql_query($this->sql_task,$this->sql_link);
Проверяем, были ли ошибки
if($this->sql_errno=mysql_errno($this->sql_link))
{
Если была ошибка, запоминаем её описание и возвращаем ошибку 13 – «ошибка выполнения запроса»
$this->sql_error=@mysql_error($this->sql_link);
return(13);
}
return(0);
}
}
конец
?>
Main.class нет смысла описывать из-за его размера.
Распишу оставшийся инклуд.
inc/on_load.inc
<?
Запускаем счётчик
if($err=$my->counter()) $my->get_err($err);
если есть переменная, полученная от формы входа
if(@$_POST['gate_submit'])
{
Проверяем логин и пароль
if($err=$my->gate_open()) $my->gate_result=$my->get_err($err);
else $my->gate_result='<p class=ok>Вы успешно вошли в систему.';
}
Если пользователь решил выйти, удаляем сессию
if(isset($_GET['out'])) $my->gate_close();
восстановление сессии по кукам
elseif($err=$my->recognize_cookie()) $my->get_err($err);
?>
Для примера приведу функцию добавления файла.
Ппеременные с говорящими именами – объявляются в начале класса
var $in_file_ext;
var $in_file_cat;
var $in_file_desc;
var $in_file_name;
var $in_file_user;
var $in_file_id;
var $in_file_enable;
var $in_file_dt;
var $in_file_size;
объявление функции
function in_file_add()
{
Если пользователь не зарегистрирован, то что он тут делает?
if(!$_SESSION['status']) return(6);
проверка файла, теперь переменные «наполнились»
if($err=$this->in_file_check()) return($err);
файл и данные в порядке, составляем запрос
$this->sql_task='insert into tbl_files(f_ext,f_name,f_desc,f_dt,f_size,f_user) values(\''.$this->in_file_ext.'\',\''.$this->in_file_name.'\',\''.$this->in_file_desc.'\',\''.$this->in_file_dt.'\',\''.$this->in_file_size.'\',\''.$this->in_file_user.'\')';а теперь выполняем запрос
if($err=$this->sql_run()) return($err);
данные добавились, получаем ID
$this->sql_task='select last_insert_id()';
if($err=$this->sql_run()) return($err);
if(!list($this->in_file_id)=mysql_fetch_row($this->sql_res)) return(14);
перемещаем файл
if(!move_uploaded_file($_FILES[$this->in_file_user]['tmp_name'],$this->path_files.'/'.$this->in_file_id.'.'.$this->in_file_ext)) {
если он не перемещён, удаляем запись из базы...
$this->sql_task='delete from tbl_files where f_id='.$this->in_file_id;
if($err=$this->sql_run()) return($err);
...и возвращаем ошибку
return(23);
}
Файл удачно перемещён, делаем связку с рубрикой
$this->sql_task='insert into tbl_cats_files(cf_cat,cf_file) values(\''.$this->in_file_cat.'\',\''.$this->in_file_id.'\')';
if($err=$this->sql_run()) return($err);
если не стоит галка «Скрыть файл», разрешаем:
if(!@$_POST['file_enable'])
{
if($err=$this->in_file_enable()) return($err);
if($err=$this->in_cat_file_enable()) return($err);
}
$this->result='<p class=ok>Файл успешно добавлен.Теперь он всегда доступен по ссылке :<br> <a href=http://'.$_SERVER['HTTP_HOST'].'/get.php?id='.$this->in_file_id.'>http://'.$_SERVER['HTTP_HOST'].'/get.php?id='.$this->in_file_id.'</a>.';
Всё в порядке, возвращаем ноль.
return(0);
}
Фрагмент public_html/file/add.php (форма)
Enctype добавляется, тк мы используем POST-аплоад файлов
<form enctype="multipart/form-data" action="<?=$_SERVER['REQUEST_URI']?>" method=post>
Информация для пользователей
Параметры добавляемого файла:<br><br>author: <?=$_SESSION['login']?>, date: <?=$my->get_dt()."\n"?>, рубрика:
Тут выводится список рубрик
<? echo $my->generate_option_list(); ?>
<br>Название файла: <input type=text name=file_name value="<?=@$_POST['file_name']?>" size=80 maxlength=50>
<br>Описание:<br><textarea name=file_desc cols=80 rows=5><?=@$_POST['file_desc']?></textarea>
Имя файловой переменной – логин пользователя (так проще)
<br><br>Сам файл: <input type=file name="<?=$_SESSION['login']?>">
<br>Скрыть файл? <input type=checkbox name=file_enable value="тра-ля-ля!!!"<? if(@$_POST['file_enable']) echo 'checked'; ?>><font size=1>при включённой опции файл не будет отображаться в рубрике, но будет доступен по по сгенерированному URL-адресу</font>
<br><input type=submit name=submit value="Добавить!">
</form>
Принцип работы остальных функциональных частей аналогичен приведённым примерам. Кроме того, текст скриптов понятен и без комментариев.
Инструкция пользователяДля запуска программы необходимо запустить любой браузер и в строке URL ввести localhost или 127.0.0.1. На вашем экране появится следующая страница (рис.1):
Рис.1 Главная страница файлообменника.
Теперь вам следует зарегистрироваться.
Если у Вас еще нет своего имени (логина) и пароля, щелкните мышкой на пункте меню «Регистрация». На открывшейся странице (рис.2) заполните поля «логин», «пароль» , повторите Ваш пароль в поле «Исчо разок». Если данные введены верно, нажмите кнопку «Регистрировать».
По умолчанию длина логина пользователя не может быть меньше 2 символов, а длина пароля – меньше 4.
Если Вы зарегистрировались успешно, сообщение об этом появится на страничке (см.рис.3).
Теперь Вы сможете войти в систему как зарегистрированный пользователь. Для этого введите логин и пароль в окошке справа вверху и нажмите кнопку «Войти».
Если логин и пароль введены правильно, появится сообщение «Вы успешно вошли в систему» и следующая страничка (см.рис.4).
Рис.2 Страница регистрации.
Введите логин и пароль в окошке справа вверху и нажмите кнопку «Войти».
Рис.3 Страница с сообщением об успешной регистрации.
Рис.4. Страничка зарегистрированного пользователя.
Слева странички расположено меню. Для простого пользователя оно состоит из трех разделов:
- Рубрики;
- Пользователи;
- Файлы.
Для пользователя со статусом «Администратор» добавлены разделы
- Рубрики \редактирование\;
- Администрирование
Рассмотрим разделы меню подробнее
0 комментариев