Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Категории и подкатегории [2]
Форумы портала PHP.SU » » Работа с СУБД » Категории и подкатегории

Страниц (5): « 1 [2] 3 4 5 »
 

16. Champion - 21 Августа, 2009 - 11:23:05 - перейти к сообщению
Ссылки не должны быть такими. Каждая категория однозначно определяется по ее id.
Ты прицепился к категиям и подкатегориям. Забуд, нет их. Есть только категории, и у каждой есть родительская категория(у некоторых она не определена но есть).
17. ibe - 21 Августа, 2009 - 11:26:09 - перейти к сообщению
По подробней, пожалуйста. Какого вида должны быть ссылки...
18. Champion - 21 Августа, 2009 - 11:29:01 - перейти к сообщению
Вот смотри. Есть у тебя такая штуковина.
-1
--11
--12
----121
--13
-2
--21
--22
Вот в таблице она будет выглядеть так:
id, parent_id, caption
1, -1 , 1
2, -1 , 2
3, 1, 11
4, 1, 12
5, 3, 121
6, 1, 13
7, 2, 21
8, 2, 22
(Добавление)
Выбрал ты всё это из таблицы, формируешь многомерный массив (не хочу писать как это делать, попробуй пока сам). Ссылки должны быть вида ...?id=ид_категории
19. ibe - 21 Августа, 2009 - 12:25:59 - перейти к сообщению
Я просто так не делаю, и не понимаю, как будет происходить отсортировка подкатегорий(в моем случае cat=категория&&subcat=подкатегория), а здесь каким образом? Объясните пожалуйста.
20. Champion - 21 Августа, 2009 - 12:32:35 - перейти к сообщению
В предыдущем посте объяснил и показал, как будут выглядеть ссылки в твоем случае.

Вопросы задавай чуть конкретнее. Ты еще ни разу не сказал,что ты сделал и что тебе не понятно.
(Добавление)
После выборки у тебя сформируется массив категорий примерно вот тако:
$cat[id_верхней_категории][просто номер] = array(текст, id, остальные данные).
Ладно, напишу сейчас...
(Добавление)
CODE (text):
скопировать код в буфер обмена
  1. $q = mysql_qury('SELECT id, prent_id, caption FROM tbl');
  2. while (row = mysql_fetch_row($q)) { // в row будет id, parent_id, caption
  3.         $categs[ $row[1] ][] = array($row[0], $row[2]); // ну сам всё видишь.
  4. }
  5. var_dump($categs); // и всё увидишь
21. ibe - 21 Августа, 2009 - 12:51:08 - перейти к сообщению
Спасибо. Буду разбиратся.
22. Champion - 21 Августа, 2009 - 12:55:31 - перейти к сообщению
только когда сделаешь var_dump, тебе на него в браузере смотреть не удобно будет, открой исходный ко страницы. Там с переводами строки, с табуляцией будет
23. ibe - 21 Августа, 2009 - 13:34:57 - перейти к сообщению
Стоп.
Почему же нельзя сделать примерно так:
создать в базе 2 таблици - categories, subcategories.
Поля categories:
Цитата:
id
title

Поля subcategories:
Цитата:
id
title
parent_id(индефикатор категории из таблици categories)

Далее разберёмся с меню:
PHP:
скопировать код в буфер обмена
  1.     <?PHP
  2.  
  3.  $subcat = mysql_query("SELECT * FROM subcategories WHERE cat=$cat", $db);
  4. $mysubcat = mysql_fetch_array($subcat);
  5. do
  6. {
  7. echo "
  8. <li><a href='/view.php?subcat=".$mysubcat['id']."&&cat=1'><b>".$mysubcat['title']."</b></a></li>
  9.  
  10. ";
  11. }
  12. while ($mysubcat = mysql_fetch_array($subcat));
  13. ?>
  14.  

И с выводом через GET, с помощью "case" будет производится вывод контента и подкатегорий к активной категории.
Ссылки будут таковы:
Цитата:
/view.php?cat=ид_категории&&subcat=ид_подкатегории

Только вот для статьей, новостей из других подкатегорий придётся писать разные запросы или как?!
Объясните пожалуйста.
24. EuGen - 21 Августа, 2009 - 13:40:39 - перейти к сообщению
Не придется. Просто передавайте параметр.
25. Champion - 21 Августа, 2009 - 13:44:39 - перейти к сообщению
Можно две таблицы, но смысла никакого. Реализаций ты сколько угодно можешь придумать и с одной таблицей, и тем более с двумя. Запрос будет все равно один. Из 2 таблиц. И ты получишь тот же самый надор данных. Можешь выбрать список категорий и в цикле по нему делать кучу селектов по другой таблице... Можешь что угодно сделать.

Повторять то, что я уже говорил про
ibe пишет:
cat=ид_категории&&subcat=ид_подкатегории
я не буду. Читай сам. И пробуй делать. Тебе уже все сказали как надо и как это реализовывается.
26. ibe - 21 Августа, 2009 - 15:59:15 - перейти к сообщению
Всем огромное спасибо. Я разобрался.
Таки сделал вот так:
PHP:
скопировать код в буфер обмена
  1. include("include/functions.php");
  2. switch($_GET['subcat']) {
  3.  
  4. case '1':
  5. ShowNews($cat);
  6. break;
  7.  
  8. case '2':
  9. ShowArticles($cat);
  10. break;
  11.  
  12.   default:
  13.     print('<p style=" margin-top:25px; margin-left:15px; font-size:15px;">Извините, категория пуста</p>');
  14.   break;
  15.   }
  16.  

Вот файл с функциями:
PHP:
скопировать код в буфер обмена
  1. function ShowNews($cat)
  2. {
  3. include("include/db.php");
  4. $cat = $_GET['cat'];
  5. // Создаем запросы
  6. $result = mysql_query("SELECT * FROM `news` WHERE `cat` = '$cat' ORDER BY `id` DESC", $db);
  7. $mynews = mysql_fetch_array($result);
  8.  do
  9.         {
  10.   echo "<td class='news-box-full'>
  11.                                            <div class='news-item'><div class='news-item-a'>
  12.                                    <p><a href='/news/6932/view.html'>
  13.                                            <img src='".$mynews['poster']."' width='150' height='100' alt='".$mynews['title']."' />
  14.                                            </a>
  15.                    <span class='date'>".$mynews['date']."</span>
  16.                    <a href='/viewpost.php'>".$mynews['title']."</a> <div class='review' style='margin-left: 6px; vertical-align: middle;'><nobr>
  17.  
  18.                                        </nobr></div>
  19.                    </p>
  20.                </div></div>
  21.                          </td>";
  22.        }
  23.   while ($mynews = mysql_fetch_array($result));
  24. }
  25.  
  26. .....и т.п.
  27.  

Теперь надо бы сделать вывод "case" автоматически, с помощью бд
----
Скажите, нормально ?
27. Champion - 21 Августа, 2009 - 17:24:53 - перейти к сообщению
Раз работает, и тебя устраивает, то нормально.
28. ibe - 21 Августа, 2009 - 17:28:00 - перейти к сообщению
А с точки зрения безопастности ?
29. Мелкий - 21 Августа, 2009 - 17:44:30 - перейти к сообщению
А смысл передавать функции параметр (при том не инициализированный для приведённого кода), если она его тут же переопределяет?

И зачем дважды писать $mynews = mysql_fetch_array($result)?
Не проще:
PHP:
скопировать код в буфер обмена
  1. while ($mynews = mysql_fetch_array($result)) {
  2. //код цикла
  3. }

Заодно получится и верная трактовка, если запрос вернул 0 строк.
30. ibe - 21 Августа, 2009 - 18:00:30 - перейти к сообщению
На приведённом примере
PHP:
скопировать код в буфер обмена
  1. while ($mynews = mysql_fetch_array($result)) {
  2. //код цикла
  3. }

не выводит информацию из бд.

 

Powered by ExBB FM 1.0 RC1