|
автор: Андрон (13.07.2004 в 22:29) |
|
| Есть такая штука:
<select name = "rubr_name"class=reg-left size=15 >
<?php
include "config.php";
$ath = mysql_query("select * from $tbname");
if($ath)
{
while($List = mysql_fetch_array($ath))
{
echo "<option>".$List['description']."<br>";
}
}
else
{
echo "<p><b>Error: ".mysql_error()."</b><p>";
exit();
}
?>
</select>
|
Как теперь передать например в add_rec.php что выбрали? | |
|
|
|
|
|
|
|
для: Андрон
(13.07.2004 в 22:29)
| | Форме нужно назначить обработчик, а тегу option значение, лучше если это будет первичный ключ таблицы $tbname, а не описание description, как у меня в примере (просто я не знаю структуру вашей таблицы).
<form action="add_rec.php" method="post">
<select name = "rubr_name" class=reg-left size=15 >
<?php
include "config.php";
$ath = mysql_query("select * from $tbname");
if($ath)
{
while($List = mysql_fetch_array($ath))
{
echo "<option value=".$List['description']. // В качестве значения select
// следует передать чего-то
// наверняка в $tbname есть первичный ключ
// или еще что-то
">".$List['description']."<br>";
}
}
else
{
echo "<p><b>Error: ".mysql_error()."</b><p>";
exit();
}
?>
</select>
<input type=submit value="Отправить в add_rec.php">
</form>
|
| |
|
|
|
|
|
|
|
для: cheops
(13.07.2004 в 23:07)
| | То, что мне нужно. Спасибо! | |
|
|
|
|
|
|
|
для: Andron
(14.07.2004 в 00:11)
| | Да, а вот как сделать так, чтобы в следующий select грузилась информация соответственно тому, на что нажали в первом select'е?
Помогите, с меня пиво. | |
|
|
|
|
|
|
|
для: Andron
(14.07.2004 в 02:07)
| | Встречный вопрос: оба select в одной форме, или сначала идёт одна форма, а сразу за ней вторая? | |
|
|
|
|
|
|
|
для: cheops
(14.07.2004 в 09:31)
| | Формы идут отдельно....
Я думаю надо как-то пользоваться такой штукой:
ONCHANGE=
".... = this.options[this.selectedIndex].value"
То есть то что мы выделили, нужно передать в функцию, и там уже делать обновление для другого селекта.
Если есть другие варианты - пож скажите. | |
|
|
|
|
|
|
|
для: Andron
(14.07.2004 в 16:09)
| | Дело вот в чём- хочу создать каталог веб ресурсов.
Есть много разных категорий: "Автомобили", "Финансы"...
У каждой из них есть свои подкатегории:
"Автомобили"---"Мотоцыклы","Легковые"...
В подкатегориях - ссылки на сайты, связанные с определенной подкатегорией.
Я думаю создать 1 бд, в ней 3 таблицы:
1. Категории (id_theme, name) primary key id_theme;
2. Подкатегории (id_theme,id_subtheme, name) primary key id_subtheme;
3. Ссылки (...)
Поэтому все вопросы-связанные с этим.
Только как пользоваться первичными, вторичными ключами? Может сама структура бд неправильная?
Спасибо, жду ответа. | |
|
|
|
|
|
|
|
для: Andron
(14.07.2004 в 17:04)
| | Хммммммм
Пожалуйста подскажите что делать с двумя селектами.
Жду. | |
|
|
|
|
|
|
|
для: Andron
(14.07.2004 в 17:04)
| | >Я думаю создать 1 бд, в ней 3 таблицы:
> 1. Категории (id_theme, name) primary key id_theme;
> 2. Подкатегории (id_theme,id_subtheme, name) primary key
>id_subtheme;
> 3. Ссылки (...)
Ага... а ссылки для чего? Мы обычно создаём две таблицы:
1) Каталоги (бесконечновложенные каталоги), создаётся поле id_parent. Если оно равно 0, следовательно каталог находится в корневом каталоге, если поле равно первичному ключу другого подкаталога - данный каталог является его подкаталогом.
2) Таблица под тованые позиции, которое имеет поле id_catalog, определяющее к какому каталогу оно относится...
PS Всё руки не доходят выложить каталог риэлтерских услуг в downloads - много проще было бы разговаривать... | |
|
|
|
|
|
|
|
для: cheops
(14.07.2004 в 22:26)
| | Например на yarcity.ru есть такое. Хотелось бы похожее.
>1) Каталоги (бесконечновложенные каталоги), создаётся поле
>id_parent. Если оно равно 0, следовательно каталог находится
>в корневом каталоге, если поле равно первичному ключу
>другого подкаталога - данный каталог является его
>подкаталогом.
Да тут имеет значение что к чему относится...
Если можно подробнее раскажите про то, какая должна быть бд и таблицы.
| |
|
|
|
|
|
|
|
для: cheops
(14.07.2004 в 09:31)
| | Вот чего я понял... Есть форма, в ней есть селект, нажимает на кнопку, данные отправляются обработчику, который являтся тоже формой, в которой расположен второй селект...
Тогда всё просто - первая форма:
<form action=second.php method=post>
<select name=id_category>
<option value=car>Машины
<option value=motocicle>Мотоциклы
<option value=helicopter>Вертолёты
</select>
<input type=submit value="Выбрать категорию">
</form>
|
Всё это хозяйство отравляется во вторую форму second.php
<form action=handler.php method=post>
<select name=id_category>
<?php
switch($_POST['id_category'])
{
case('car'): // Глупый юзер хочет машинки
{
echo "<option value=car_volga>Волга";
echo "<option value=car_lada>Жигули";
echo "<option value=car_kamaz>Камаз";
break;
}
case('motocicle'): // Выбраны мотоциклы
{
echo "<option value=harley>Харли-Девидсон";
echo "<option value=honda>Хонда";
echo "<option value=ural>Урал";
break;
}
case('motocicle'): // Хочет человек вертолёт
{
echo "<option value=first>Ну не знаю я марки вертолётов"
echo "<option value=second>Второй"
echo "<option value=thirdl>Третий"
}
}
?>
</select>
<input type=submit value="Выбрать конкрентый товар">
</form>
|
Точно так же в switch можно засовать тэг form, тогда можно назначать каждой категории свой обработчик. Давайте плясать от сюда: я правильно вас понял или вы хотите реализовать другую схему? | |
|
|
|
|
|
|
|
для: cheops
(14.07.2004 в 22:16)
| | В первый селект данные грузятся из бд. Во второй - тоже из бд, но относительно того, что выбрали в первом....
Хотелось бы без дополнительных кнопок.
Как например здесь:
http://uk.europe.creative.com/support/manuals/welcome.asp
Думаю так же можно замутить на phр. Спасибо. | |
|
|
|
|
|
|
|
для: Andron
(14.07.2004 в 22:43)
| | Единственное что мне в ASP нравится - это технология (есть и серверная и клиентская части), но если посмотреть на код HTML-странички: там же всё на VBasic написано... значит надо тоже самое на JavaScript сделать, чтоб мелкомягким неповадно было :))) так как задача эта для клиентской стороны. Вот примерно как это должно выглядить в HTML(JavaScript):
<form name=form action=second.php method=post>
<select multiple size="3" name=id_category onClick="javascript:click_first()">
<option value=car>Машины
<option value=motocicle>Мотоциклы
<option value=helicopter>Вертолёты
</select>
<select name=second_list multiple size="3" name=id_category showempty>
</select>
<br><input type=submit value="Выбрать категорию">
</form>
<script language='JavaScript1.1' type='text/javascript'>
<!--
function click_first()
{
if(this.form.id_category.options[0].selected)
{
this.form.second_list.options[0] = new Option("car1","0");
this.form.second_list.options[1] = new Option("car2","1");
this.form.second_list.options[2] = new Option("car3","2");
}
if(this.form.id_category.options[1].selected)
{
this.form.second_list.options[0] = new Option("moto1","0");
this.form.second_list.options[1] = new Option("moto2","1");
this.form.second_list.options[2] = new Option("moto3","2");
}
if(this.form.id_category.options[2].selected)
{
this.form.second_list.options[0] = new Option("coper1","0");
this.form.second_list.options[1] = new Option("coper2","1");
this.form.second_list.options[2] = new Option("coper3","2");
}
}
//-->
</script>
|
Теперь нужно только все списки заранее сформировать средствами PHP вытащив название полей и уникальные индексы из базы данных... Если хотите можно сформировать такой скрипт, но для этого нужна структура таблиц... | |
|
|
|
|
|
|
|
для: cheops
(14.07.2004 в 23:30)
| | 2 таблицы:
1. LIST (id_theme, name); id_theme - pr key
2. SUBLIST (id_theme, id_subtheme, name);
id_subtheme - pr key, id_theme - sec key.
(Может мне поменять как-то структуру?)
В первый селект загружаю из первой таблицы (делаю сам),
во второй - ...
Если можно, примерчик, как подружить php c javascript.
Cпасибы. | |
|
|
|
|
|
|
|
для: Andron
(14.07.2004 в 23:43)
| | Ну... мне это видится так :)))
<form name=form action=second.php method=post>
<?php
// Это уже сделано, но для полноты картины приведём
$query = "SELECT * FROM LIST";
$lst = mysql_query($query);
if(!$lst)
{
echo "Ошибка при выполенении выборки из таблицы LIST";
exit();
}
// Если в таблице есть хоть одна запись - формируем список
if(mysql_num_rows($lst)>0)
{
echo "<select multiple size=".mysql_num_rows($lst)."
name=id_theme onClick=\"javascript:click_first()\">";
while($list = mysql_fetch_array($lst))
{
// Формируем элементы списка
echo "<option value=".$list['id_theme'].">".$list['name'];
}
}
?>
</select>
<select name=second_list multiple size="3" name=id_category showempty>
</select>
<br><input type=submit value="Выбрать категорию">
</form>
<script language='JavaScript1.1' type='text/javascript'>
<!--
function click_first()
{
<?php
// Формируем тело скрипта JavaScript средствами PHP
$query = "SELECT * FROM LIST";
$lst = mysql_query($query);
if(!$lst)
{
echo "Ошибка при выполенении выборки из таблицы LIST";
exit();
}
// Если в таблице есть хоть одна запись - формируем список
if(mysql_num_rows($lst)>0)
{
while($list = mysql_fetch_array($lst))
{
// Тут нужно быть внимательным: массивы в JavaScript начинаются
// с 0, а в таблице нумерация первичного ключа может начинаться
// с 1 - в этом случае от значения $list['id_theme'] нужно вычесть 1
echo "if(this.form.id_theme.options[".$list['id_theme']."].selected){";
// Формируем и выполняем SQL-зарос на выборку из таблицы SUBLIST
$query = "SELECT * FROM SUBLIST WHERE id_theme=".$list['id_theme'];
$sbl = mysql_query($query);
if(!$sbl)
{
echo "Ошибка при выполенении выборки из таблицы SUBLIST";
exit();
}
//
if(mysql_num_rows($sbl)>0)
{
$tmpnum = 0;
while($sublist = mysql_fetch_array($sbl))
{
echo "this.form.second_list.options[$tmpnum] = new Option(\"car1\",\"".$sublist['id_subtheme']."\");";
$tmpnum++;
}
}
echo "}";
}
}
?>
}
//-->
</script>
|
Честно скажу, не больно тестировал, так как поленился возиться с табличками (спать хочу :) - так что если что не так - завтра добивать будем... | |
|
|
|
|
|
|
|
для: cheops
(15.07.2004 в 00:26)
| | ОГО. 8-)
Спасибо, сорри что так мучаю.
Посмотрю тоже завтра. Идем спать. Еще раз спасибо. | |
|
|
|
|
|
|
|
для: cheops
(15.07.2004 в 00:26)
| | Попробовал... (Не скажу что ;-))
С первым селектом все ок. Но функция не делает то что надо...
Может не пашет
if(this.form.id_theme.options[".$list['id_theme']."].selected){";
|
Хммм.
Задумка прикольная.
Что не так? | |
|
|
|
|
|
|
|
для: Andron
(15.07.2004 в 02:24)
| |
<form name=form action=second.php method=post>
<?php
//////////////////////////////////////////////////
// Здесь соединение с базой данных
//////////////////////////////////////////////////
// Это уже сделано, но для полноты картины приведём
$query = "SELECT * FROM LIST";
$lst = mysql_query($query);
if(!$lst)
{
echo "Ошибка при выполенении выборки из таблицы LIST";
exit();
}
// Если в таблице есть хоть одна запись - формируем список
if(mysql_num_rows($lst)>0)
{
echo "<select multiple size=".mysql_num_rows($lst)."
name=id_theme onClick=\"javascript:click_first()\">";
while($list = mysql_fetch_array($lst))
{
// Формируем элементы списка
echo "<option value=".$list['id_theme'].">".$list['name'];
}
}
?>
</select>
<select name=second_list multiple size="3" name=id_category showempty>
</select>
<br><input type=submit value="Выбрать категорию">
</form>
<script language='JavaScript1.1' type='text/javascript'>
<!--
function click_first()
{
<?php
// Формируем тело скрипта JavaScript средствами PHP
$query = "SELECT * FROM LIST";
$lst = mysql_query($query);
if(!$lst)
{
echo "Ошибка при выполенении выборки из таблицы LIST";
exit();
}
// Если в таблице есть хоть одна запись - формируем список
if(mysql_num_rows($lst)>0)
{
while($list = mysql_fetch_array($lst))
{
// Тут нужно быть внимательным: массивы в JavaScript начинаются
// с 0, а в таблице нумерация первичного ключа может начинаться
// с 1 - в этом случае от значения $list['id_theme'] нужно вычесть 1
echo "if(this.form.id_theme.options[".($list['id_theme']-1)."].selected){\n";
// Формируем и выполняем SQL-зарос на выборку из таблицы SUBLIST
$query = "SELECT * FROM SUBLIST WHERE id_theme=".$list['id_theme'];
$sbl = mysql_query($query);
if(!$sbl)
{
echo "Ошибка при выполенении выборки из таблицы SUBLIST";
exit();
}
//
if(mysql_num_rows($sbl)>0)
{
$tmpnum = 0;
echo "this.form.second_list.length = 0;";
while($sublist = mysql_fetch_array($sbl))
{
echo "this.form.second_list.options[$tmpnum] =
new Option(\"".$sublist['name']."\",\"".$sublist['id_subtheme']."\");\n";
$tmpnum++;
}
}
echo "}";
}
}
?>
}
//-->
</script>
|
Та строка как раз нормальная была - со вторым списком траблы были... | |
|
|
|
|
|
|
|
для: cheops
(15.07.2004 в 11:08)
| | Cпасибо.
Я поменял реакцию на клик: вместо onclick - onchange
и в начае ф-ии добавил
echo "this.form.second_list.length = 0;";
|
----------------------------------------------------------
Если в таблице List все по порядку:
id_theme name
1 text1
2 text2
3 text3
И если в таблице SubList все по порядку:
id_theme id_subtheme name
1 1 text11
1 2 text22
2 1 text33
То всё показывает нормально.
Но если в таблице List НЕ по порядку:
id_theme name
1 text1
5 text2
6 text3
То показывает только то, что связано с первым значением в List'e. И внизу пишет script error.
??? Что не так? Хмм Жду ответа. | |
|
|
|
|
|
|
|
для: Andron
(15.07.2004 в 20:21)
| | А можете выложить дамп базы данных, если не хотите здесь выкладывать - пошлите почтой. | |
|
|
|
|
|
|
|
для: cheops
(15.07.2004 в 20:38)
| | :-)
Ну я только начал учиться работать с MySql.
Что такое дамп? Лог? Или сами бд?
Вот такой я ламер. 8-) | |
|
|
|
|
|
|
|
для: Andron
(15.07.2004 в 20:48)
| | Это не сложно, нужно найти в дистрибутиве утилиту mysqldump, и выполнить в командной строке:
где basa - имя базы данных, а basa.sql - имя файла куда запишется дамп базы данных, потом если что-то случится c базой данных или нужно будет переместить её на другой сервер, можно будет выполнить команду:
Последнее я и собираюсь сделать с файлом, который вы пришлёте :)
PS Кстати, почему вы себя ламером называете? Ламер, в первоначальном понимании этого слова, человек который ничего не знает и не понимает, но считает, что знает очень много, даёт всем советы и убедить его в его неправоте не представляется возможным. А вы очень восприимчивы к советам :) | |
|
|
|
|
|
|
|
для: cheops
(15.07.2004 в 21:33)
| | :-)
Вот еще 1 вопросик созрел: что-то не нашел инфо о типах бд (в примерах вы/мы писали type=MyIsam) а какие они есть и для чего их писать?
Или может я пропустил где-то?
PS. А интересная штука mysqldump! | |
|
|
|
|
|
|
|
для: Andron
(15.07.2004 в 21:35)
| | Cheops'у отключили свет, так что ждите :) (У нас очень сильные грозы). А по типам БД я постараюсь Вам ответить в отдельном топике, чтобы не нарушать вашу беседу :) | |
|
|
|
|
|
|
|
для: Кузнецов М.В.
(15.07.2004 в 21:51)
| | >Cheops'у отключили свет, так что ждите :)
8-(
> А по типам БД я постараюсь Вам ответить в
>отдельном топике, чтобы не нарушать вашу беседу :)
Ок. Спасибо. | |
|
|
|
|
|
|
|
для: Andron
(15.07.2004 в 22:02)
| | >8-(
Вот и я так же сидел :) - уже темно, даже не почитаешь, завтра же UPS куплю... | |
|
|
|
|
|
|
|
для: cheops
(15.07.2004 в 22:12)
| | УПС -прикольная штука. У меня где-то 4 года. А то пару раз вырубили свет, и вся робота пошла к... Ок.
Я вот что хотел спросить (:-))-как с функцией? Где может быть ошибка? Грррррр. Забить на неё? | |
|
|
|
|
|
|
|
для: Andron
(15.07.2004 в 21:35)
| | Вот правильный вариант, массивы JavaScript - это настоящие массивы здесь за 0 должна следовать 1 и т.д. Поэтому введём ещё одну временную переменную $counter:
<form name=form action=second.php method=post>
<?php
//////////////////////////////////////////////////
// Здесь соединение с базой данных
//////////////////////////////////////////////////
// Это уже сделано, но для полноты картины приведём
$query = "SELECT * FROM list";
$lst = mysql_query($query);
if(!$lst)
{
echo "Ошибка при выполенении выборки из таблицы LIST";
exit();
}
// Если в таблице есть хоть одна запись - формируем список
if(mysql_num_rows($lst)>0)
{
echo "<select multiple size=".mysql_num_rows($lst)."
name=id_theme onClick=\"javascript:click_first()\">";
while($list = mysql_fetch_array($lst))
{
// Формируем элементы списка
echo "<option value=".$list['id_theme'].">".$list['name'];
}
}
?>
</select>
<select name=second_list multiple size="3" name=id_category showempty>
</select>
<br><input type=submit value="Выбрать категорию">
</form>
<script language='JavaScript1.1' type='text/javascript'>
<!--
function click_first()
{
<?php
// Формируем тело скрипта JavaScript средствами PHP
$query = "SELECT * FROM list";
$lst = mysql_query($query);
if(!$lst)
{
echo "Ошибка при выполенении выборки из таблицы LIST";
exit();
}
// Если в таблице есть хоть одна запись - формируем список
if(mysql_num_rows($lst)>0)
{
$counter = 0;
while($list = mysql_fetch_array($lst))
{
// Тут нужно быть внимательным: массивы в JavaScript начинаются
// с 0, а в таблице нумерация первичного ключа может начинаться
// с 1 - в этом случае от значения $list['id_theme'] нужно вычесть 1
echo "if(this.form.id_theme.options[".($counter++)."].selected){\n";
//echo "if(this.form.id_theme.options[".$list['id_theme']."].selected){\n";
// Формируем и выполняем SQL-зарос на выборку из таблицы SUBLIST
$query = "SELECT * FROM sublist WHERE id_theme=".$list['id_theme'];
$sbl = mysql_query($query);
if(!$sbl)
{
echo "Ошибка при выполенении выборки из таблицы SUBLIST";
exit();
}
//
if(mysql_num_rows($sbl)>0)
{
$tmpnum = 0;
echo "this.form.second_list.length = 0;\n";
while($sublist = mysql_fetch_array($sbl))
{
echo "this.form.second_list.options[$tmpnum] = new Option(\"".$sublist['name']."\",\"".$sublist['id_subtheme']."\");\n";
$tmpnum++;
}
}
echo "}";
}
}
?>
}
//-->
</script>
|
| |
|
|
|
|
|
|
|
для: cheops
(15.07.2004 в 22:32)
| | ВОТ! ОНО! :))))))))
Пашет!!!!
Спасибо! Mille grazie! Danke!
AAAAAAAAAAA!
:-)))))
| |
|
|
|
|
|
|
|
для: cheops
(15.07.2004 в 21:33)
| | Да, я бы вас попросил вставит в учебник выше написанное. Очень пригодится для начинающих! | |
|
|
|
|
|
|
|
для: Andron
(15.07.2004 в 21:37)
| | Возможно, так и сделаем. | |
|
|
|