Доброго времени суток. У меня появилась маленькая проблемка которая я так поняла можно сделать с помощью JS.. Так вот я подумала может вы мне поможете, а то я в JS не очень разбираюсь. Объясняю в чем мой вопрос: Так вот, у меня есть две таблицы (categorii и pag).В обеих таблицах есть поле sortirovka. С помощью динамического Select-a я сделала так чтобы когда я выбираю из первого Select-a категорию то во втором Select-е появляется подкатегории выбранной категории. Я нашла JS код который с помощью кнопок передвигает выбранную категорию или подкатегорию вверх и вниз в списке. Так вот мне нужен код который создаст номер сортировки и отправит этот номер в базу данных. То есть, если я выбираю 1 категорию и у нее есть 3 подкатегории то вот номера сортировки для второй таблицы должны быть 11,12,13 а если 2-ю категорию и у нее есть 4 подкатегории то номера сортировки для второй таблицы должны быть 21,22,23,24. А для категории остается простой номер (1,2,3,4...) Я так поняла что эти номера тоже динамичные ведь когда меняется номер сортировки категории автоматически должны менятся номера для подкатегории. Надеюсь вы поняли что я имею ввиду. Если надо я напишу код PHP и JS с Select-ом PHP: <head> <title>Dynamic Dropdown</title> <script language="JavaScript" type="text/javascript" src="function.js"></script> </head> <script language="javascript"> function setOptions(chosen) { var selbox = document.menu.list2; selbox.options.length = 0; if (chosen == "0") { selbox.options[selbox.options.length] = new Option('Выбирайте категорию','0'); } <? $cat_result = mysql_query("SELECT * FROM categorii ") or die(mysql_error()); while($c = mysql_fetch_array($cat_result)) { ?> if (chosen == <?=$c['id'];?>) { <? $c_id = $c['id']; $mod_result = mysql_query("SELECT * FROM pag WHERE idc='$c_id' ") or die(mysql_error()); while($m=mysql_fetch_array($mod_result)) { ?> selbox.options[selbox.options.length] = new Option('<?=$m['title'];?>',<?=$m['idp'];?>); <? } ?> } <? } ?> } </script> </head> <body> <form name="menu" method=POST action="select2.php" onSubmit=""> <div align="center"> <select name="list1" id="list1" size="10" onchange="setOptions(document.menu.list1.options [document.menu.list1.selectedIndex].value);"> <? $result = mysql_query("SELECT * FROM categorii ORDER BY sortirovka") or die(mysql_error()); while(@($r=mysql_fetch_array($result))) { ?> <option value="<?=$r['id'];?>"><?=$r['title'];?></option> <? } ?> </select><br><br> <select name="list2" size="5"> <option value=" " selected>Выбирайте категорию</option> </select><br><br> <input class="navBut" type="button" value="/\" onclick="Move(document.menu,-1)"><br> <input class="navBut" type="button" value="\/" onclick="Move(document.menu,1) "><br> </div></form> <div align="center"><br> <input name=menu type=hidden> <input type=submit class="" name="submit" value=Apply> function.js это код который перемещает элементы списка. Вот это первая таблица [sql]CREATE TABLE IF NOT EXISTS `categorii` ( `id` int(10) unsigned NOT NULL AUTO_INCREMENT, `body` text NOT NULL, `title` varchar(255) NOT NULL DEFAULT '', `sortirovka` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=6 ;[/sql] а это вторая таблица [sql]CREATE TABLE IF NOT EXISTS `pag` ( `idp` int(10) unsigned NOT NULL AUTO_INCREMENT, `idc` int(10) NOT NULL, `body` text NOT NULL, `title` varchar(255) NOT NULL DEFAULT '', `sortirovka` int(11) NOT NULL DEFAULT '0', PRIMARY KEY (`idp`) ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=7 ; [/sql] ID и IDC это связь между таблицами Очень надеюсь на вашу помощь
Выборка не динамическая. Да, на взгляд (конечного пользователя, выбирающего менюшки в браузере) она динамическая, но это обман. У тебя выбираются все категории. Пользователь загружает страницу и все категории уже выбраны, манипулировать сортировкой динамически ты не сможешь. Как я понял. Не факт, что верно. Тебе просто следует делать сортировку при селекте из pag: [sql]SELECT * FROM pag WHERE idc='$c_id' " order by `sortirovka`[/sql] Тогда они сразу будут выбраны в отсортерованном тобой порядке.
Ну так я это делаю .. Но ведь так я должна менять номера в sortirovka прямо в базе данных но мне надо через интерфейс. Разве этого нельзя сделать? А почему выборка не динамическая? Разве этот запрос не запрашивает из второй таблицы только те элементы которые соответсвует запросу IF? Вот здесь где IF: PHP: <? $cat_result = mysql_query("SELECT * FROM categorii ") or die(mysql_error()); while($c = mysql_fetch_array($cat_result)) { ?> if (chosen == <?=$c['id'];?>) { <? $c_id = $c['id']; $mod_result = mysql_query("SELECT * FROM pag WHERE idc='$c_id' ") or die(mysql_error());
У изначально ошибка с сортировкой. Во-первых, нафига тебе поле sortirovka, если не для сортировки? Во-вторых, как ты себе представляешь сортировку типа 21, 22, 23, 24, если поля не отсортированы при селекте? Ладно, можно сделать сортировку самого массива, но MySQl выводит строки по порядку: начинает с первой, заканчивает последней. В твоём примере первая - 1, последняя - 4. Массив не отсортируется потому что он уже так отсортирован. Короче, ты хочешь то, что не имеет смысла. JavaScript выполняется на стороне клиента (в браузере), а PHP на сервере. Система такая: пользователь вводит УРЛ, браузер шлёт заголовки серверу, запускается PHP, обрабатывается, браузер парсит HTML, браузер обрабатывает JavaScript. В реальности всё чуть сложнее, но примерно так. Код (Text): if (chosen == <?=$c['id'];?>) { Открой исходнй текст в браузере и увидишь что-то вроде: Код (Text): if (chosen == 2) { PHP обработался уже, а JavaScript ждёт, когда будут активированы селекты и тогда приступит к выполнению.
AJAX? Я так понял, что подкатегории хранятся в другой таблице и имеют ссылки на родительские категории. 1)Имеет ли смысл сортировка всех подкатегорий? Т.е. почему бы не сортровать подкатегории внутри категории: категория 1 - подкатегория 1, подкатегория 2, подкатегория 3 категория 2 - подкатегория 1, подкатегория 2, подкатегория 3 Хотя если мы хотим выбрать все и сразу может иметь смысл именно Ваша организация... 2)Мне приходит в голову два способа изменения сортировки: а)На каждое нажатие кнопки посылать ajax'ом id и направление перемещения. далее уже через sql делать соответствующие update'ы. б)Сделать кнопку "Подтвердить". При нажатии на эту кнопку на сервер отправляются массивы с id и новым значением сортировки. Далее посылается запрос для приведения информации в БД в соответствие массивам. 3)Да и динамический select можно на ajax перевести...
По подробнее это книга на 549 страниц =)) Самый простой способ (которым, каюсь, пользуюсь я) это взять js framework и использовать его возможности. Одним из самых популярных является JQuery. Конкретно методы работы с ajax и на русском: http://jquery-docs.ru/Ajax/ http://anton.shevchuk.name/javascript/j ... ners-ajax/ Советую посмотреть в сторону getJSON.