У меня на сайте в админке на странице добавления файла стоит динамический select: сначала выбираем раздел файла, после чего подгружаются категории этого раздела, выбираем раздел - подгружаются подкатегории выбранной категории. Затем выбираем подкатегорию, вносим данные файла и отправляем в базу. Все данные селектов берутся из базы, кроме разделов, их 4. Вот исходный код вывода селектов и скрипт:
new_file.php[PHP]...........................
.................................
.............................
<html>
<head>
..................................
<script type="text/javascript" src="js/jquery-1.3.1.js"></script>
<script type="text/javascript" src="js/jquery.depend.js"></script>
<script type="text/javascript">
jQuery(function($){
$('#cat').depend({ parent:'division'});
$('#subcat').depend({ parent:'cat'});
});
</script>
</head>
<body >
.....................................
......................................
....................................
<form name="add_file" method="post" action="add_file.php">
<p class="admin">Добавление нового файла</p>
<p><label>Раздел</label><br />
<select name="division" id="division" class="selectable clasamea">
<option value="">-- select --</option>
<option value="photoshop" title="photoshop">photoshop</option>
<option value="dreamweaver" title="dreamweaver">dreamweaver</option>
<option value="flash" title="flash">flash</option>
<option value="fireworks" title="fireworks">fireworks</option>
</select></p>
<p><label>Категория</label><br />
<select name="cat" id="cat" class="selectable">
<option value="">-- select --</option>
<?
/*-------------Вывод категорий---------------*/
$result_photo = mysql_query ("SELECT DISTINCT cat,division FROM subcat_files",$db); /*Выборка данных из базы*/
$myrow_photo = mysql_fetch_array ($result_photo);
do
{
printf ("<option value='%s' class='%s' title='%s'>%s</option>",$myrow_photo["cat"],$myrow_photo["division"],$myrow_photo["cat"],$myrow_photo["cat"]);
}
while ($myrow_photo = mysql_fetch_array ($result_photo));
?>
</select></p>
<p><label>Подкатегория</label><br />
<select name="subcat" id="subcat" class="selectable">
<option value="">-- select --</option>
<?
$result_subcat = mysql_query ("SELECT cat,id,title FROM subcat_files",$db); /*Выборка данных из базы*/
$myrow_subcat = mysql_fetch_array ($result_subcat);
do
{
printf ("<option value='%s' class='%s'>%s</option>",$myrow_subcat["id"],$myrow_subcat["cat"],$myrow_subcat["title"]);
}
while ($myrow_subcat = mysql_fetch_array ($result_subcat));
?>
</select></p>
........................
.......................
.......................[/PHP]
jquery_depend.js// JavaScript Document
(function($) {
$.fn.depend = function(options) {
this.find('option').hide();
this.find('option:first').show();
var current = this;
$('#' + options.parent).find('option:first').each(function(){
$(this).click(function(){
current.find('option:not(:first)').hide();
current.find('option:first').attr({selected:'selected'});
current.find('option:first').click();
})
})
$('#' + options.parent).find('option:not(:first)').each(function(){
var cur = $(this);
$(this).click(function(){
current.find('option:not(:first)').hide();
var text = cur.text().toLowerCase();
current.find('option' + '.' + text).show();
current.find('option:first').attr({selected:'selected'});
current.find('option:first').click();
})
})
}
})(jQuery);
Все работает отлично.
Есть в админке еще страница редактирования файла. Вылазит та же формочка, но уже заполненная. Решил приделать туда тоже подобный динамический select для того, чтобы можно было файл переместить в другой раздел, категорию или подкатегорию.
Вставил туда селекты. Из базы корректно достаются раздел, категория и подкатегория редактируемого файла и вставляются в селекты и выбраны по умолчанию. Вроде бы все работает, но вот с содержимым селекта хрень какая-то:
1. При выборе 1го раздела возможно выбрать только первую категорию и первую подкатегорию первого раздела
2. При выборе других разделов возможно выбрать категории и подкатегории выбранного раздела плюс первую категорию и первую подкатегорию первого раздела
Скрипт используется тот же, вот код php файла:
edit_file.php[PHP].......................
...............................
if (isset ($_GET['id'])) {$id = $_GET['id']; }?>
....................................................
.....................................
<html>
<head>
.....................................
........................................
<script type="text/javascript" src="js/jquery-1.3.1.js"></script>
<script type="text/javascript" src="js/jquery.depend1.js"></script>
<script type="text/javascript">
jQuery(function($){
$('#cat').depend({ parent:'division'});
$('#subcat').depend({ parent:'cat'});
});
</script>
</head>
<body >
if (!isset($id)) /*Если не существует параметра id в адресе страницы, то...*/
{
echo ("<p class='admin'>Редактирование файла</p><p>Выберите файл для редактирования:</p>");
/*Photoshop*/
$result = mysql_query ("SELECT id,title,date FROM files_demo WHERE division='photoshop' ORDER BY date DESC");
if (!$result) {echo "<br><br><br><br><p align='center'><font color='red'>Запрос на выборку данных из базы не прошел.<br><br>Напишите об этом администратору</font> <font color='blue'>zevilz@mail.ru</font></p><br>
<p><br><br><strong>Код ошибки:</strong></p>";
exit (mysql_error()); }
if (mysql_num_rows($result) > 0) {$myrow = mysql_fetch_array ($result);}
else {echo "<p>Информация по запросу не может быть извлечена - в запрашиваемой таблице базы нет записей.</p>";
exit ();} /*Защита от ошибок*/
echo ("<p style='text-align:center;color:blue;'>Photoshop</p>");
/*Вывод списка файлов для редактирования*/
do
{
printf ("<p><a href='edit_file.php?id=%s'><span class='leftside_add'>(%s)</span> %s</a></p>",$myrow["id"],$myrow["date"],$myrow["title"]);
}
while ($myrow = mysql_fetch_array ($result));
/*Dreamweaver*/
$result = mysql_query ("SELECT id,title,date FROM files_demo WHERE division='dreamweaver' ORDER BY date DESC");
if (!$result) {echo "<br><br><br><br><p align='center'><font color='red'>Запрос на выборку данных из базы не прошел.<br><br>Напишите об этом администратору</font> <font color='blue'>zevilz@mail.ru</font></p><br>
<p><br><br><strong>Код ошибки:</strong></p>";
exit (mysql_error()); }
if (mysql_num_rows($result) > 0) {$myrow = mysql_fetch_array ($result);}
else {echo "<p>Информация по запросу не может быть извлечена - в запрашиваемой таблице базы нет записей.</p>";
exit ();} /*Защита от ошибок*/
echo ("<p style='text-align:center;color:blue;'>Dreamweaver</p>");
/*Вывод списка файлов для редактирования*/
do
{
printf ("<p><a href='edit_file.php?id=%s'><span class='leftside_add'>(%s)</span> %s</a></p>",$myrow["id"],$myrow["date"],$myrow["title"]);
}
while ($myrow = mysql_fetch_array ($result));
/*Flash*/
$result = mysql_query ("SELECT id,title,date FROM files_demo WHERE division='flash' ORDER BY date DESC");
if (!$result) {echo "<br><br><br><br><p align='center'><font color='red'>Запрос на выборку данных из базы не прошел.<br><br>Напишите об этом администратору</font> <font color='blue'>zevilz@mail.ru</font></p><br>
<p><br><br><strong>Код ошибки:</strong></p>";
exit (mysql_error()); }
if (mysql_num_rows($result) > 0) {$myrow = mysql_fetch_array ($result);}
else {echo "<p>Информация по запросу не может быть извлечена - в запрашиваемой таблице базы нет записей.</p>";
exit ();} /*Защита от ошибок*/
echo ("<p style='text-align:center;color:blue;'>Flash</p>");
/*Вывод списка файлов для редактирования*/
do
{
printf ("<p><a href='edit_file.php?id=%s'><span class='leftside_add'>(%s)</span> %s</a></p>",$myrow["id"],$myrow["date"],$myrow["title"]);
}
while ($myrow = mysql_fetch_array ($result));
/*Fireworks*/
$result = mysql_query ("SELECT id,title,date FROM files_demo WHERE division='fireworks' ORDER BY date DESC");
if (!$result) {echo "<br><br><br><br><p align='center'><font color='red'>Запрос на выборку данных из базы не прошел.<br><br>Напишите об этом администратору</font> <font color='blue'>zevilz@mail.ru</font></p><br>
<p><br><br><strong>Код ошибки:</strong></p>";
exit (mysql_error()); }
if (mysql_num_rows($result) > 0) {$myrow = mysql_fetch_array ($result);}
else {echo "<p>Информация по запросу не может быть извлечена - в запрашиваемой таблице базы нет записей.</p>";
exit ();} /*Защита от ошибок*/
echo ("<p style='text-align:center;color:blue;'>Fireworks</p>");
/*Вывод списка файлов для редактирования*/
do
{
printf ("<p><a href='edit_file.php?id=%s'><span class='leftside_add'>(%s)</span> %s</a></p>",$myrow["id"],$myrow["date"],$myrow["title"]);
}
while ($myrow = mysql_fetch_array ($result));
}
else /*Если параметр id существует в адресе страницы, то...*/
{
$result_id = mysql_query ("SELECT * FROM files_demo WHERE id=$id");
if (!$result_id) {echo "<br><br><br><br><p align='center'><font color='red'>Запрос на выборку данных из базы не прошел.<br><br>Напишите об этом администратору</font> <font color='blue'>zevilz@mail.ru</font></p><br>
<p><br><br><strong>Код ошибки:</strong></p>";
exit (mysql_error()); }
if (mysql_num_rows($result_id) > 0) {$myrow_id = mysql_fetch_array ($result_id);}
else {echo "<p>Информация по запросу не может быть извлечена - в запрашиваемой таблице базы нет записей.</p>";
exit ();} /*Защита от ошибок*/
echo "<p class='admin'>Редактирование файла</p>
<form name='update_file' method='post' action='update_file.php'>";
/*Вывод разделов в цикле с автоматическим выбором реального раздела редактируемого файла*/
$result_div = mysql_query ("SELECT DISTINCT division FROM subcat_files");
if (!$result_div) {echo "<br><br><br><br><p align='center'><font color='red'>Запрос на выборку данных из базы не прошел.<br><br>Напишите об этом администратору</font> <font color='blue'>zevilz@mail.ru</font></p><br>
<p><br><br><strong>Код ошибки:</strong></p>";
exit (mysql_error()); }
if (mysql_num_rows($result_div) > 0) {$myrow_div = mysql_fetch_array ($result_div);}
else {echo "<p>Информация по запросу не может быть извлечена - в запрашиваемой таблице базы нет записей.</p>";
exit ();} /*Защита от ошибок*/
echo "<p>Выберите раздел<br><select name='division' id='division' class='selectable clasamea'>";
do
{
if ($myrow_id['division'] == $myrow_div['division']) {printf ("<option value='%s' title='%s' selected>%s</option>",$myrow_div["division"],$myrow_div["division"],$myrow_div["division"]);} /*default*/
else {printf ("<option value='%s' title='%s'>%s</option>",$myrow_div["division"],$myrow_div["division"],$myrow_div["division"]); }
}
while ($myrow_div = mysql_fetch_array ($result_div));
echo "</select></p>";
/*Вывод категорий в цикле с автоматическим выбором реальной категории редактируемого файла*/
$result_cat = mysql_query ("SELECT DISTINCT cat,division FROM subcat_files");
if (!$result_cat) {echo "<br><br><br><br><p align='center'><font color='red'>Запрос на выборку данных из базы не прошел.<br><br>Напишите об этом администратору</font> <font color='blue'>zevilz@mail.ru</font></p><br>
<p><br><br><strong>Код ошибки:</strong></p>";
exit (mysql_error()); }
if (mysql_num_rows($result_cat) > 0) {$myrow_cat = mysql_fetch_array ($result_cat);}
else {echo "<p>Информация по запросу не может быть извлечена - в запрашиваемой таблице базы нет записей.</p>";
exit ();} /*Защита от ошибок*/
echo "<p>Выберите категорию<br><select name='cat' id='cat' class='selectable'>";
do
{
if ($myrow_id['cat'] == $myrow_cat['cat']) {printf ("<option value='%s' class='%s' title='%s' selected>%s</option>",$myrow_cat["cat"],$myrow_cat["division"],$myrow_cat["cat"],$myrow_cat["cat"]);} /*default*/
else {printf ("<option value='%s' class='%s' title='%s'>%s</option>",$myrow_cat["cat"],$myrow_cat["division"],$myrow_cat["cat"],$myrow_cat["cat"]); }
}
while ($myrow_cat = mysql_fetch_array ($result_cat));
echo "</select></p>";
/*Вывод подкатегорий в цикле с автоматическим выбором реальной подкатегории редактируемого файла*/
$result_subcat = mysql_query ("SELECT * FROM subcat_files");
if (!$result_subcat) {echo "<br><br><br><br><p align='center'><font color='red'>Запрос на выборку данных из базы не прошел.<br><br>Напишите об этом администратору</font> <font color='blue'>zevilz@mail.ru</font></p><br>
<p><br><br><strong>Код ошибки:</strong></p>";
exit (mysql_error()); }
if (mysql_num_rows($result_subcat) > 0) {$myrow_subcat = mysql_fetch_array ($result_subcat);}
else {echo "<p>Информация по запросу не может быть извлечена - в запрашиваемой таблице базы нет записей.</p>";
exit ();} /*Защита от ошибок*/
echo "<p>Выберите подкатегорию<br><select name='subcat' id='subcat' class='selectable'>";
do
{
if ($myrow_id['subcat'] == $myrow_subcat['id']) {printf ("<option value='%s' class='%s' selected>%s</option>",$myrow_subcat["id"],$myrow_subcat["cat"],$myrow_subcat["title"]);} /*default*/
else {printf ("<option value='%s' class='%s'>%s</option>",$myrow_subcat["id"],$myrow_subcat["cat"],$myrow_subcat["title"]); }
}
while ($myrow_subcat = mysql_fetch_array ($result_subcat));
echo "</select></p>";
....................................
......................................
......................................
......................................
[/PHP]
Перековырял весь код, но понять не могу, в чем проблема:wacko: Скорее всего проблема в скрипте
Ссылки на примеры (работает только в Firefox):
добавление нового файларедактирование файла