Выборка товаров из БД в зависимости от каталога

TigerZaka

Новичок
Выборка товаров из БД в зависимости от каталога

Есть две таблицы:

CREATE TABLE IF NOT EXISTS `catalog` (
`id_catalog` int(8) NOT NULL auto_increment,
`name` tinytext NOT NULL,
`description` tinytext NOT NULL,
`pos` smallint(3) NOT NULL default '0',
`hide` enum('show','hide') NOT NULL default 'show',
`id_parent` int(8) NOT NULL default '0',
PRIMARY KEY (`id_catalog`),
KEY `id_parent` (`id_parent`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=8 ;

CREATE TABLE IF NOT EXISTS `product` (
`id_product` int(11) NOT NULL auto_increment,
`name` tinytext NOT NULL,
`description` text NOT NULL,
`id_catalog` int(8) NOT NULL default '0',
PRIMARY KEY (`id_product`),
KEY `id_catalog` (`id_catalog`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
-----------
три файла config.php (подключение к БД), index.php (список каталогов из БД), product.php(вынимает товары из БД в зависимости от выбранного каталога)

index.php
PHP:
<?
require_once("config.php");
?>
<?
if(!isset($_GET['id_parent'])) $_GET['id_parent'] = 0;
$query = "SELECT * FROM catalog WHERE id_catalog=".$_GET['id_parent'];
$ctgc = mysql_query($query);
if ($ctgc and $_GET['id_parent'] != 0) 
	{
		$catc = mysql_fetch_array($ctgc);
		echo "<h1>Каталог: ".$catc['name']."</h1><br>";
		echo "<a href=index.php?id_parent=".$catc['id_parent'].">Верхний уровень</a><br>";
	}
if(isset($_GET['id_parent']))
	{
		$query = "SELECT * FROM catalog WHERE id_parent = ".$_GET['id_parent']." ORDER BY pos";
		$ctg = mysql_query($query);
		if(!$ctg) puterror("Ошибка при обращении к каталогу");
		echo "<table><tr>
				<td>Название каталога</td>
				<td>Описание</td>
				</tr>";
		
		while($cat = mysql_fetch_array($ctg))
			{
				echo "<tr>
						<td><a href=index.php?id_parent=".$cat['id_catalog'].">".$cat['name']."</a></td>
						<td>".$cat['description']."</td>
						</tr>";
			}
	}
	echo "</table>";
	include "product.php";
?>
product.php
PHP:
<? if($_GET['id_parent'] !=0) {
	?>
	<h1>Продукция в каталоге</h1>
	<?
	$query = "SELECT * FROM product WHERE id_catalog =".$_GET['id_parent']." ORDER BY pos";
	$prt = mysql_query($query);
	if($prt) {
				echo "<table><tr>
						<td>Наименование товара</td>
						<td>Описание</td>
						</tr>";
				while($ptr = mysql_fetch_array($prt))
					{
						echo "<tr>
						<td>".$ptr['name']."</td>
						<td>".$ptr['description']."</td>
						</tr>";
					}
		} else echo "Ошибка";
?>		
</table>
<?
} else echo "Это самый верхний каталог";
?>
Проблема состоит в том, что каталоги переключаются без проблем, но товар к ним относящийся никак не хочет появляться. Все стопорится на этой строчке вроде
PHP:
while($ptr = mysql_fetch_array($prt))
. Подскажите, где промашка, никак не могу понять ( Заранее спасибо
 

TigerZaka

Новичок
почему переприсваиваю? у меня же до этого $prt, а потом в цикле $ptr
 

Ragazzo

TDD interested
TigerZaka
while($ptr = mysql_fetch_array($prt))
for нельзя чтоли перебрать?while нежелательно
Пы.Сы $query = "SELECT * FROM product WHERE id_catalog =".$_GET['id_parent']." ORDER BY pos";
это ппц...я умываю руки
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
TigerZaka
1. Если ты заметил, то я отредактировал свой ответ поскольку невнимательно прочел твой пост.

2. Переведу по-человечесски.
это ппц...я умываю руки
phpfaq.ru/slashes

В консоли ты этот запрос исполняешь и все нормально?

-~{}~ 19.09.10 23:19:

for нельзя чтоли перебрать?while нежелательно
Что серъезно? И давно?
 

TigerZaka

Новичок
про SELECT видимо надо сделать ...WHERE id_catalog =".$_GET['id_catalog']." .....

А про while можно поподробней, чем плох такой способ?
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
TigerZaka
про SELECT видимо надо сделать ...WHERE id_catalog =".$_GET['id_catalog']." .....
А про while можно поподробней, чем плох такой способ?
Да, да, я тоже хочу услышать

-~{}~ 19.09.10 23:26:

С консоли запрос исполнял?
Это твой реальный код?
 

TigerZaka

Новичок
Автор оригинала: Mr_Max
1. Если ты заметил, то я отредактировал твой ответ поскольку невнимательно прочел твой пост.
Да обратил
2. Переведу по-человечесски.
phpfaq.ru/slashes
Пошел читать

-~{}~ 20.09.10 00:28:

С консоли запрос исполнял?
Это твой реальный код?
Нет честно говоря. Всмысле код реальный, а с консоли не запускал
 

Ragazzo

TDD interested
Каюсь, while не плох...но кто вообще так пишет??мешать html и php в одну кучу и разбавляя все это обильной порцией говнокода, и отсутствием стиля кодирования...это один я заметил что-ли или остальные вежливо молчат?
 

Вурдалак

Продвинутый новичок
Ну если у тебя хватает здоровья каждую ошибку и недочёт в подобном искать, то пожалуйста. Остальные молчат, ибо есть дела и поинтереснее.
 

Ragazzo

TDD interested
Вурдалак
дела поинтереснее в этом коде?я свое здоровье берегу)ладно всем удачи тут покопаться...
 

TigerZaka

Новичок
Всем спасибо за подсказки
Автор оригинала: Mr_Max
phpfaq.ru/slashes
прочитал, оказалось полезным для меня.
Сделал так
PHP:
$query = "SELECT * FROM `product` WHERE `id_catalog` ='".$_GET['id_parent']."' ORDER BY `pos`";
 

Вурдалак

Продвинутый новичок
TigerZaka, читай внимательнее.

Ragazzo, свой инфантилизм можешь оставить при себе.
 

Mr_Max

Первый класс. Зимние каникулы ^_^
Команда форума
TigerZaka
Проверяешь из консоли (пхпмайадмина, да чего угодно, но только сам запрос), если из консоли все ок,
а у тебя выводится только одна запись, то
смотришь свой код и 99%, что ты там присваиваешь заново
 
Сверху