Вибор подкатегории в форме относительно выбраной категории

stepan_fed

Новичок
здравствуйте, уважаемые

я совсем еще новачок в php, пробую сделать первый проект, пока вроде все получается, но столкнулся с след. задачей, по которой прошу у вас подсказки.

И так, есть форма добавления объявления, в которой есть Поле "Рубрика" и "Подрубрика".

В поле "Рубрика" я вывел информацию для выбора.
А вот с полем Подрубрика у меня проблема, так как незнаю как реализовать вывод подрубрик которые относятся только к выбраной рубрике.


У меня есть 2 таблицы, в одной из них есть список рубрик, а в другой список подрубрик с id главной рубрики.

Чуствую что задача очень простая, но не могу никак решить.

Если кто-то сможет, прошу описать как решить подобную задачу?
 

c0dex

web.dev 2002-...
Команда форума
Партнер клуба
Что у тебя конкретно не получилось? Как пробовал, показывай код)
 

stepan_fed

Новичок
Что у тебя конкретно не получилось? Как пробовал, показывай код)
У меня на страничке есть форма, в которой много полей, первые из них: Рубрика и Подрубрика.

Так я вывожу рубрики в лист:
PHP:
<label>Рубрика* <select name="cat">
<?php
$result = mysql_query("SELECT * FROM categories", $db);
$myrow = mysql_fetch_array ($result);
do
{
printf ("<option>%s</option>", $myrow['title']);
}
while ($myrow = mysql_fetch_array ($result));

?>
</select></label>

после этого идет поле с выбором рубрики:
<label>Подрубрика* <select name="sub_cat">
<?php
$result1 = mysql_query("SELECT sub_cat.* FROM categories LEFT JOIN sub_cat on categories.id = sub_cat.main_cat WHERE categories.id='2'", $db);
$myrow1 = mysql_fetch_array ($result1);
do
{
printf ("<option>%s</option>", $myrow1['sub_cat']);
}
while ($myrow1 = mysql_fetch_array ($result1));
?>
</select></label>
в результате выводится только подрубрики где рубрика id=1.
но после выбора другой рубрики в списке не изменяется вывод подрубрик. Разве что врчную вписывать id=2.


как вы думаете в чем проблема?
мне кажется что проблема в том что я не так вывожу рубрики!
 

stepan_fed

Новичок
вот структура таблиц:
таблица с рубриками: categories
есть 2 колонки:id и title

таблица с подрубриками:sub_cat
3 колонки:
id, sub_cat, main_cat
в колонке sub_cat - названия всех подрубрик
в колонке main_cat - id рубрики из таблицы categories

буду очень благодарен за помощь!
 

AmdY

Пью пиво
Команда форума
проблема в видиоуроках Попова.
Объясни что делает запрос "SELECT sub_cat.* FROM categories LEFT JOIN sub_cat on categories.id = sub_cat.main_cat WHERE categories.id='2'", может тогда сам догадаешься где копать.
 

stepan_fed

Новичок
проблема в видиоуроках Попова.
Объясни что делает запрос "SELECT sub_cat.* FROM categories LEFT JOIN sub_cat on categories.id = sub_cat.main_cat WHERE categories.id='2'", может тогда сам догадаешься где копать.
спасибо за ответ и за комментарий!
на счет уроков Попова, я понимаю. с этого начинал, сейчас перешел на литературу, вижу что есть разница.

запрос выводит подрубрики которые имеют рубрику id='2'

я знаю что проблема в том что я не знаю как подтянуть в этот запрос ту рубрику которую пользователь может выбрать в выводе рубрик.
 

AmdY

Пью пиво
Команда форума
нет, запрос выводит РУБРИКУ (FROM categories) номер WHERE categories.id='2', а затем пытается прицепить к ней ПОДРУБРИКУ (LEFT JOIN sub_cat)

тебе нужен простой запрос который вытягивает ПОДРУБРИКУ согласно ид рубрики.
SELECT * FROM sub_cat WHERE main_cat = ?
Вместо вопросика подставляешь номер рубрики.

Теперь нужно определиться откуда у тебя будет браться эта рубрика. Я бы советовал объеденить селекты в один
категория
----субкатегория
----субкатегория
категория
----субкатегория
 

stepan_fed

Новичок
нет, запрос выводит РУБРИКУ (FROM categories) номер WHERE categories.id='2', а затем пытается прицепить к ней ПОДРУБРИКУ (LEFT JOIN sub_cat)

тебе нужен простой запрос который вытягивает ПОДРУБРИКУ согласно ид рубрики.
SELECT * FROM sub_cat WHERE main_cat = ?
Вместо вопросика подставляешь номер рубрики.

Теперь нужно определиться откуда у тебя будет браться эта рубрика. Я бы советовал объеденить селекты в один
категория
----субкатегория
----субкатегория
категория
----субкатегория
спасибо большое!

можна пожалуйста поподробней узнать на счет того как объеденить селекты в один.

прошу прощения за банальные вопросы!
 

AmdY

Пью пиво
Команда форума
ты в первый цикл вставляешь другой
PHP:
while($myrow = mysql_fetch_array ($result)) {
   printf ("<option>%s</option>", $myrow['title']);
   $result1 = mysql_query('SELECT * FROM sub_cat WHERE main_cat = '.intval($myrow['id']));
   while($myrow1 = mysql_fetch_array ($result1)) {
        printf ("<option>----%s</option>", $myrow1['title']);
   }
}
p.s. Хотя правильнее данные извлекать сразу, формировать из них массив, а уж затем делать вывод html.
 

stepan_fed

Новичок
ты в первый цикл вставляешь другой
PHP:
while($myrow = mysql_fetch_array ($result)) {
   printf ("<option>%s</option>", $myrow['title']);
   $result1 = mysql_query('SELECT * FROM sub_cat WHERE main_cat = '.intval($myrow['id']));
   while($myrow1 = mysql_fetch_array ($result1)) {
        printf ("<option>----%s</option>", $myrow1['title']);
   }
}
p.s. Хотя правильнее данные извлекать сразу, формировать из них массив, а уж затем делать вывод html.

спасибо за ответ.
хочу еще спросить, куда мне вставить ваш код, вернее вместо какого?
вот что есть сейчас:
PHP:
<p><label>Рубрика* <select name="cat">
<?php
$result = mysql_query("SELECT * FROM categories", $db);
$myrow = mysql_fetch_array ($result);
do
{
printf ("<option>%s</option>", $myrow['title']);
}
while ($myrow = mysql_fetch_array ($result));

?>
</select></label></p>

<p><label>Подрубрика* <select name="sub_cat">
<?php
$result1 = mysql_query("SELECT * FROM sub_cat WHERE main_cat = 1", $db);
while ($myrow1 = mysql_fetch_array ($result1))
{
   printf ("<option>%s</option>", $myrow1['sub_cat']);
}

?>
</select></label></p>
 

Beavis

Banned
А в видеоуроках такое не разбирается? Ты Попову деньги заплатил, пусть поможет, или вернет их

P.S. Если вдруг диск не принесет вам пользы, вы сможете спокойно переслать мне его обратно. Я верну вам все деньги без лишних вопросов, и это будет справедливо.
Как мы видим, пользы он не принёс, отсылай
 

stepan_fed

Новичок
А в видеоуроках такое не разбирается? Ты Попову деньги заплатил, пусть поможет, или вернет их



Как мы видим, пользы он не принёс, отсылай
Я понимаю, что для вас как возможно професионала, вопрос который я поднял, является легким.
И также я понимаю что уроки Попова далеко не идеальны, но тем не мения я не понимаю зачем вы тратите вреямя чтобы показать свои знания в такой форме.
Это все таки форум, где по идее можна получить подсказку (что как вы можете увидить и происходит), а не втик за то что я не то учил.
 

Beavis

Banned
Нет, я просто действительно не понимаю, почему все кто купил эти видеокурсы, и понял что его обманули и нихрена не научили, не возвращают деньги обратно..
 

stepan_fed

Новичок
Нет, я просто действительно не понимаю, почему все кто купил эти видеокурсы, и понял что его обманули и нихрена не научили, не возвращают деньги обратно..
я не покупал курсы, их везде полно для свободного скачивания.
на счет того, что они никому не помогают, не берусь говорить за всех.

буду вам благодарен, если вы можете помочь мне с вопросом который я поднял!
 

stepan_fed

Новичок
Мне порекомендовали код:
PHP:
<form>
<label>Рубрика* <select name="cat" onchange="location.href='index.php?sub_category='+this.value">
<?php
$result = mysql_query("SELECT * FROM categories", $db);
while($myrow = mysql_fetch_array ($result))
{
    echo "<option value='{$myrow['id']}'>{$myrow['title']}<option>";
}
?>
</select>
</label>
<label>Подрубрика*
<select name="sub_cat">
<?php
$result1 = mysql_query("SELECT sub_cat.* FROM categories INNER JOIN sub_cat on categories.id = sub_cat.main_cat WHERE categories.id='{$_REQUEST['sub_category']}'", $db);
while ($myrow1 = mysql_fetch_array ($result1))
{
   printf ("<option>%s</option>", $myrow1['sub_cat']);
}
?>
</select></label>
</form>
но есть проблема:
- когда выбираю первую рубрику, не вискакивают подрубрики.
- когда открываю список с рубриками и вибираю одну из них, выбираются подрубрики, но сразу после этого рубрика становится та что по дефолту, тоесть первая, при этом подрубрики остаются от выбраной рубрики!

спасибо!
 

С.

Продвинутый новичок
я не понимаю зачем вы тратите вреямя чтобы показать свои знания в такой форме.
Думаешь ты идин такой тут бродишь? Пачками и ежедневно! Тебе же помогают, но для тебя все это китайская грамота. Ну извини, невозможно еще проще. Программирование это профессия, такая же как автоамеханик или электрик. Ее надо познавать с основ и понимать, что ты делаешь. А ты не просто чайник, а полный ноль в этой професии. Без обид, это дело наживное. Ну а сейчас-то что ты предлагаешь делать? Написать код за тебя, так ты через неделю за новым придешь. Объяснять -- не воспринимаешь. Вот и остается только троллить.

Так что выбирай сам свою судьбу. Набирайся знаний основательно или забудь про программирование. А вопросы типа:
хочу еще спросить, куда мне вставить ваш код, вернее вместо какого?
по крайней мере на этом форуме не проходят точно.
 
Сверху