|
|
|
| Вот пример из книги Кузнецова и Симдянова MySQL 5
когда в таблице catalogs у какого-то каталога нет продуктов
то показыват выпадающий список только каталогов и при выборе любого каталога, даже если у него есть продукты, второй выпадающий список с продуктами не появляеться !!
правил Javascript который внизу кода (из сформированого в броузере html то есть не сам этот код) и если из него убрать ID каталога в котором нет товаров то список продуктов отображаеться но там еще ошибка появляеться иногда
сразу три выпадающих списка сразу отображаеться
Помогите исправить ошибку сам я немогу придумать что делать
<?php
// Устанавливаем соединение с базой данных
require_once("config.php");
// Начало HTML-формы
echo "<form action=handler.php method=post>";
// Формируем первый выпадающий список
$query = "SELECT * FROM catalogs
ORDER BY name";
$cat = mysql_query($query);
if(!$cat) exit(mysql_error());
// Если имеется хотя бы одна запись
// формируем выпадающий список
if(mysql_num_rows($cat) > 0)
{
echo "<select name=id_catalog onchange='show(this.form.id_catalog)'>";
echo "<option value=0>Не имеет значения</option>";
while($catalog = mysql_fetch_array($cat))
{
if($_POST['id_catalog'] == $catalog['id_catalog']) $selected = "selected";
else $selected = "";
echo "<option value=$catalog[id_catalog] $selected>$catalog[name]</option>";
// Формируем массив первичных ключей каталогов
$array_catalog[] = $catalog['id_catalog'];
}
echo "</select>";
}
// Формируем второй выпадающий список
$query = "SELECT * FROM catalogs";
$cat = mysql_query($query);
if(!$cat) exit(mysql_error());
// Если имеется хотя бы одна запись
// формируем выпадающий список
if(mysql_num_rows($cat) > 0)
{
while($catalog = mysql_fetch_array($cat))
{
// Формируем скрытые списки
$query = "SELECT * FROM products
WHERE id_catalog = $catalog[id_catalog]
ORDER BY name";
$prd = mysql_query($query);
if(!$prd) exit(mysql_error());
// Если в текущем каталоге имеется хотя бы
// одна товарная позиция формируем выпадающий список
if(mysql_num_rows($prd) > 0)
{
echo "<select id=$catalog[id_catalog] style=\"display:none\" name=product$catalog[id_catalog]>";
while($product = mysql_fetch_array($prd))
{
if($_POST['id_product'] == $product['id_product']) $selected = "selected";
else $selected = "";
echo "<option value=$product[id_product] $selected>$product[name]</option>";
}
echo "</select>";
}
}
}
echo "</br><input type=submit name=send value=Отправить>";
// Конец HTML-формы
echo "</form>";
?>
<script language='JavaScript1.1' type='text/javascript'>
<!--
var messageIdList = new Array(<?= implode(",", $array_catalog) ?>);
function show(sel)
{
for (i = 0; i < messageIdList.length; i++)
{
document.getElementById(messageIdList[i]).style.display = "none";
}
document.getElementById(sel.options[sel.selectedIndex].value).style.display = "block";
}
//-->
</script>
|
| |
|
|
|
|
|
|
|
для: nill
(25.10.2007 в 12:27)
| | Править скорее надо не JS, а РНР часть - не выводить в первом списке каталоги у которых нет товаров. | |
|
|
|
|
|
|
|
для: sim5
(25.10.2007 в 12:44)
| | а как это сделать? | |
|
|
|
|
|
|
|
для: nill
(25.10.2007 в 12:49)
| | Ну вот же у вас получение каталогов:
// Формируем первый выпадающий список
$query = "SELECT * FROM catalogs ORDER BY name";
|
Можете дополнить этот запрос условием WHERE ... здесь указать только каталоги с товарами. По коду дальше products это как раз продукты, но не понятно что это, количество их либо... Если количество, то выбирайте те у кторых products > 0. Смотрите свою таблицу. | |
|
|
|
|
|
|
|
для: sim5
(25.10.2007 в 12:57)
| | ладно буду думать | |
|
|
|
|
|
|
|
для: nill
(25.10.2007 в 13:02)
| | вобщем непонятно что делать WHERE здесь непоможет так как по таблице каталогов нельзя узнать есть ли у какого то каталога продукты или нет
это надо к таблице продукты обращаться
то есть запрос к таблице продукты должен быть вверху а потом как то надо сделать условие что если количество товаров для каталога не равно нулю то выполняеться запрос для каталога
а что бы узнать номер каталога и проверить его в таблице продуктов тогда сначала надо запрос писать к каталогам
запутался я совсем | |
|
|
|
|
|
|
|
для: nill
(25.10.2007 в 16:14)
| | Не знаю, что у вас за таблицы, но все это можно сделать единым запросом - обратитесь с вопросом, что вам надо узнать в разделе MySQL. Кстати там можете посмотреть, готовых примеров таких запросов там уйма. Я лишь хочу сказать - для точго чтобы эффективно управлять выводом товаров на страницах, а так же для управления ими администратором, не мешало бы дополнить таблицу категорий полем показывающем есть ли у этой категории товар или нет, и если есть то сколько. Это было бы сводной информацией для данной категории, включая ее подкатегории. Пример из книги, это просто пример, вам его нужно просто совершенствовать. | |
|
|
|
|
|
|
|
для: sim5
(25.10.2007 в 16:25)
| | вообщем разобрался вот готовый скрипт
sim5 спасибо за ответы
единым запросом я незнаю как это сделать нужны два как минимум
<?php
// Устанавливаем соединение с базой данных
require_once("config.php");
// Начало HTML-формы
echo "<form action=handler.php method=post>";
// Формируем первый выпадающий список
$query = "SELECT * FROM catalogs
ORDER BY name";
$cat = mysql_query($query);
if(!$cat) exit(mysql_error());
// Если имеется хотя бы одна запись
// формируем выпадающий список
if(mysql_num_rows($cat) > 0)
{
echo "<select name=id_catalog onchange='show(this.form.id_catalog)'>";
echo "<option value=0>Не имеет значения</option>";
while($catalog = mysql_fetch_array($cat))
{
$query="SELECT * FROM products where id_catalog='$catalog[id_catalog]'";
$prod = mysql_query($query);
if(mysql_num_rows($prod) > 0)
{
if($_POST['id_catalog'] == $catalog['id_catalog']) $selected = "selected";
else $selected = "";
echo "<option value=$catalog[id_catalog] $selected>$catalog[name]</option>";
// Формируем массив первичных ключей каталогов
$array_catalog[] = $catalog['id_catalog'];
} }
echo "</select>";
}
// Формируем второй выпадающий список
$query = "SELECT * FROM catalogs";
$cat = mysql_query($query);
if(!$cat) exit(mysql_error());
// Если имеется хотя бы одна запись
// формируем выпадающий список
if(mysql_num_rows($cat) > 0)
{
while($catalog = mysql_fetch_array($cat))
{
// Формируем скрытые списки
$query = "SELECT * FROM products
WHERE id_catalog = $catalog[id_catalog]
ORDER BY name";
$prd = mysql_query($query);
if(!$prd) exit(mysql_error());
// Если в текущем каталоге имеется хотя бы
// одна товарная позиция формируем выпадающий список
if(mysql_num_rows($prd) > 0)
{
echo "<select id=$catalog[id_catalog] style=\"display:none\" name=product$catalog[id_catalog]>";
while($product = mysql_fetch_array($prd))
{
if($_POST['id_product'] == $product['id_product']) $selected = "selected";
else $selected = "";
echo "<option value=$product[id_product] $selected>$product[name]</option>";
}
echo "</select>";
}
}
}
echo "</br><input type=submit name=send value=Отправить>";
// Конец HTML-формы
echo "</form>";
?>
<script language='JavaScript1.1' type='text/javascript'>
<!--
var messageIdList = new Array(<?= implode(",", $array_catalog) ?>);
function show(sel)
{
for (i = 0; i < messageIdList.length; i++)
{
document.getElementById(messageIdList[i]).style.display = "none";
}
document.getElementById(sel.options[sel.selectedIndex].value).style.display = "block";
}
//-->
</script>
|
| |
|
|
|
|
|
|
|
для: nill
(25.10.2007 в 16:58)
| | >единым запросом я незнаю как
JOIN
Ну работает и слава... | |
|
|
|