3. копирайт

<p id="copy">&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. Страничка зарегистрированного пользователя.

Слева странички расположено меню. Для простого пользователя оно состоит из трех разделов:

- Рубрики;

- Пользователи;

- Файлы.

Для пользователя со статусом «Администратор» добавлены разделы

- Рубрики \редактирование\;

- Администрирование

Рассмотрим разделы меню подробнее


Информация о работе «Файлообменник с веб-интерфейсом»
Раздел: Информатика, программирование
Количество знаков с пробелами: 33810
Количество таблиц: 1
Количество изображений: 20

0 комментариев


Наверх