[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Добавление + Выбор категории
DeeKeiD
Обьясните ктонибудь принцип работы категорий (таблицы files & files_cats)

Интересует :
1. Добавление файлов с выбором категории
2. Вывод списка файлов из выбраной категории
3. Получение общего числа файлов в выбраной категории

Если ктонибудь может сделать простенький скрипт типа :
Папка "www"
Файлы : index.php - вывод файлов из выбраной категории.
Папка "www/admin/"
Файлы : categories.php - управление категориями, files.php - управление файлами.

Буду очень признателен,в великом гугле понятной мне инструкции я не нашол,смотрел разные движки но непонял как там всё устроено поетому прошу помощи здесь.

П.С. извините если тему не в том разделе создал.



Спустя 31 минута, 21 секунда (8.03.2009 - 06:48) kirik написал(а):
Не думаю что получится объяснить понятнее чем в доках, иерархия не простая штука. Посмотри следующие ссылки, попробуй разобраться.

http://phpforum.ru/index.php?showtopic=15900
http://phpforum.ru/index.php?showtopic=14924

Спустя 12 минут, 40 секунд (8.03.2009 - 07:01) DeeKeiD написал(а):
непоняятно, я имею ввиду не древо типа :
Новости->Железо
Новости->Железо->Свежее
Новости->Железо->Свежее->ещёхзскокакатегорий

а просто категории типа :
Новости->Железо
Новости->Искуство
Новости->Игры

Я неособо понимаю все функции пхп, я недавно начал етим занимаца.
На данный момент я пишу свою цмс для понятия основ пхп, скрипты и функции изучаю по мере надобности и в основном на примере других скриптов. Поетому если ктонибудь может написать для меня пример скрипта категорий ето будет отлично smile.gif

П.С. сделал категории на if($_GET... но ето не то...


Спустя 18 минут, 42 секунды (8.03.2009 - 07:20) kirik написал(а):
Цитата (DeeKeiD @ 7.03.2009 - 23:01)
а просто категории типа :

а.. Ну тогда так:
Таблицы *:
files_cats { category_id (auto increament, small int, unsigned) | category_name (varchar 50) }
files { file_id (auto increament, medium int, unsigned) | category_id (small int, unsigned, index) | file_name (varchar 100), file_description (varchr 255)}
* типы полей на свое усмотрение.

Вывод списка категорий:
SQL
SELECT `category_id`, `category_name` FROM `files_cats`


Вывод списка файлов для категории c id = "X":
SQL
SELECT `file_id`, `file_name`, `file_description` FROM `files` WHERE `category_id` = X


Подсчет количество файлов для категории c id = "X":
SQL
SELECT COUNT(`file_id`) AS `num_of_files` FROM `files` WHERE `category_id` = X


При добавлении файла в какую-то категорию вписываешь ему id категории в поле category_id (таблица files).

Спустя 9 минут, 4 секунды (8.03.2009 - 07:29) DeeKeiD написал(а):
а как сделать :
1. чтобы в форме изменения в <select> показывалась опция в зависимости от id категории? (берёца из базы)
2. в форме добавления в <select>выводился список всех существующих категорий ? smile.gif

Спустя 20 минут, 26 секунд (8.03.2009 - 07:49) twin написал(а):
Я вот ради эксперимента недавно сделал подобное в одной таблице. Интересно, какие могут торчать под водой камни...
Организовано просто, вместо отдельной таблицы с категориями при добавлении новой пишется пустая строка с одной категорией.
Для вывода списка категорий - запрос GROUP BY
При выводе строк категории - WHERE `category_id` = X AND `file_name`!=''
При добавлении категории - INSERT - SELECT MAX(`category_id`)
Ну а остальное как обычно. Пока вроде работает...

Спустя 23 минуты, 31 секунда (8.03.2009 - 08:13) kirik написал(а):
Цитата (twin @ 7.03.2009 - 23:49)
Для вывода списка категорий - запрос GROUP BY

При использовании GROUP BY создается временная таблица, в которую собственно складываются все одинаковые значения. При небольшом количестве записей это не будет иметь никакого значения, в противном случае это не очень хорошо может сказаться на производительности.

Цитата (DeeKeiD @ 7.03.2009 - 23:29)
1. чтобы в форме изменения в <select> показывалась опция в зависимости от id категории? (берёца из базы)
2. в форме добавления в <select>выводился список всех существующих категорий ? smile.gif

Тебе не cms писать нужно smile.gif
И для первого и для второго случая прокатит этот код, только для первого нужно передать параметр $selected (берется из базы)
PHP
function get_categories($selected=null)
{
    
$return '<select name="categories">';
    
$query mysql_query('SELECT `category_id`, `category_name` FROM `files_cats`');
    if(empty(
$selected))
        
$return .= '<option value="0">Выберите категорию</option>';

    while(
$row mysql_fetch_assoc($query))
    {
        
$return .= '
        <option value="'
.$row['category_id'].'"'.(($selected == $row['category_id']) ? ' selected="selected"' null).'>'.$row['category_name'].'</option>';
    }
    
mysql_free_result($query);
    
$return .= '</select>';
    return 
$return;
}


Спустя 9 минут, 9 секунд (8.03.2009 - 08:22) twin написал(а):
Цитата
в противном случае это не очень хорошо может сказаться на производительности.
Сеньк. Чесно говоря, лень мерять, попозже попробую. Мне кажется разница не должна быть разительной, ведь в случае с двумя таблицами получается два запроса, а тут один. Для каталога файлов не должно быть заметно. Их же не миллион, ну пара-тройка тысяч максимум. Иначе это уже не каталог, а мегахранилище получится. smile.gif

Спустя 49 секунд (8.03.2009 - 08:23) DeeKeiD написал(а):
я походу реально туп =( неполучается вывести форму select в форму, код:
PHP
<?
include 
'../inc/config.php';
include 
'../inc/settings.php';
function 
get_categories($selected=null)
{
    
$return '<select name="cat">';
    
$query mysql_query('SELECT `id`, `name` FROM `categories`');
    if(empty(
$selected))
        
$return .= '<option value="0">Выберите категорию</option>';

    while(
$row mysql_fetch_assoc($query))
    {
        
$return .= '
        <option value="'
.$row['id'].'"'.(($selected == $row['id']) ? ' selected="selected"' null).'>'.$row['name'].'</option>';
    }
    
mysql_free_result($query);
    
$return .= '</select>';
    return 
$return;
}
// Форма добавления
if($_GET['action']=="add") {
echo 
'<form method="post" action="admincenter.php?page=files&action=addfile">

<table border="1" width="100%">
    <tr>
        <td>name</td>
        <td><input type="text" name="file"></td>
    </tr>
    <tr>
        <td>cat</td>
        <td>$return</td>
    </tr>
    <tr>
        <td>add</td>
        <td><input type="submit" value="add"></td>
    </tr>
</table>
</form>'
;
}
// Форма изменения
// Функция добавления
elseif($_GET['action']=="addfile") {
$name $_POST['file'];
$catid $_POST['cat'];
mysql_query("INSERT INTO files (id, name, cat) VALUES ('0', '$name','$catid')");
}
// Функция изменения
// Функция удаления

Спустя 10 минут, 16 секунд (8.03.2009 - 08:33) kirik написал(а):
DeeKeiD, вместо <td>$return</td> нада написать <td>'.get_categories().'</td>.

twin, да и не стоит мерять.. При паре тысяч разницы не будет. smile.gif

Спустя 6 минут, 13 секунд (8.03.2009 - 08:39) DeeKeiD написал(а):
эммм... поставил,список появился. теперь другая поблема - при добавлении файла он вставляет id , name , и пропускает cat

EDIT : исправил ) спасибо

Спустя 6 минут, 9 секунд (8.03.2009 - 08:45) kirik написал(а):
Может ты просто не выбрал категорию?

UPD ок smile.gif

Спустя 5 дней, 20 часов, 50 минут, 32 секунды (14.03.2009 - 05:36) Guest написал(а):
Непоскажете как вывести "SELECT `file_id`, `file_name`, `file_description` FROM `files` WHERE `category_id` = X" ? )) в виде формы ?


_____________
Бесполезно просить пощады у цезаря
Фатальная ошибка : Звонок в неопределенную функцию ©
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.