За последние 24 часа нас посетили 48503 программиста и 1729 роботов. Сейчас ищут 702 программиста ...

Динамический селект

Тема в разделе "JavaScript и AJAX", создана пользователем zevilz, 22 июн 2010.

  1. zevilz

    zevilz Активный пользователь

    С нами с:
    14 июн 2010
    Сообщения:
    182
    Симпатии:
    0
    На сайте в админке на странице добавления файла стоит динамический select: сначала выбираем раздел файла, после чего подгружаются категории этого раздела, выбираем раздел - подгружаются подкатегории выбранной категории. Затем выбираем подкатегорию, вносим данные файла и отправляем в базу. Все данные селектов берутся из базы, кроме разделов, их 4. Вот исходный код вывода селектов и скрипт:

    new_file.php
    Код (Text):
    1. ...........................
    2. .................................
    3. .............................
    4. <html>
    5. <head>
    6. ..................................
    7. <script type="text/javascript" src="js/jquery-1.3.1.js"></script>
    8. <script type="text/javascript" src="js/jquery.depend.js"></script>
    9. <script type="text/javascript">
    10. jQuery(function($){
    11.     $('#cat').depend({ parent:'division'});
    12.     $('#subcat').depend({ parent:'cat'});
    13. });
    14. </script>
    15. </head>
    16.  
    17. <body >
    18. .....................................
    19. ......................................
    20. ....................................
    21.         <form name="add_file" method="post" action="add_file.php">
    22.           <p class="admin">Добавление нового файла</p>
    23.          
    24.         <p><label>Раздел</label><br />
    25. <select name="division" id="division" class="selectable clasamea">
    26.     <option value="">-- select --</option>
    27.     <option value="photoshop" title="photoshop">photoshop</option>
    28.     <option value="dreamweaver" title="dreamweaver">dreamweaver</option>
    29.     <option value="flash" title="flash">flash</option>
    30.     <option value="fireworks" title="fireworks">fireworks</option>
    31. </select></p>
    32.  
    33.         <p><label>Категория</label><br />
    34. <select name="cat" id="cat" class="selectable">
    35.     <option value="">-- select --</option>
    36.     <?
    37.         /*-------------Вывод категорий---------------*/
    38.     $result_photo = mysql_query ("SELECT DISTINCT cat,division FROM subcat_files",$db); /*Выборка данных из базы*/
    39.     $myrow_photo = mysql_fetch_array ($result_photo);
    40.     do
    41.     {
    42.         printf ("<option value='%s' class='%s' title='%s'>%s</option>",$myrow_photo["cat"],$myrow_photo["division"],$myrow_photo["cat"],$myrow_photo["cat"]);
    43.     }
    44.     while ($myrow_photo = mysql_fetch_array ($result_photo));
    45.     ?>
    46. </select></p>
    47.  
    48.         <p><label>Подкатегория</label><br />
    49. <select name="subcat" id="subcat" class="selectable">
    50.     <option value="">-- select --</option>
    51.         <?
    52.     $result_subcat = mysql_query ("SELECT cat,id,title FROM subcat_files",$db); /*Выборка данных из базы*/
    53.     $myrow_subcat = mysql_fetch_array ($result_subcat);
    54.     do
    55.     {
    56.         printf ("<option value='%s' class='%s'>%s</option>",$myrow_subcat["id"],$myrow_subcat["cat"],$myrow_subcat["title"]);
    57.     }
    58.     while ($myrow_subcat = mysql_fetch_array ($result_subcat));
    59.    
    60.     ?>
    61.    
    62. </select></p>
    63. ........................
    64. .......................
    65. .......................
    jquery_depend.js
    Код (Text):
    1. // JavaScript Document
    2. (function($) {
    3. $.fn.depend = function(options) {
    4. this.find('option').hide();
    5. this.find('option:first').show();
    6. var current = this;
    7. $('#' + options.parent).find('option:first').each(function(){
    8.      $(this).click(function(){
    9.         current.find('option:not(:first)').hide();
    10.         current.find('option:first').attr({selected:'selected'});
    11.         current.find('option:first').click();
    12.      })
    13. })
    14.  $('#' + options.parent).find('option:not(:first)').each(function(){
    15.     var cur = $(this);
    16.     $(this).click(function(){
    17.         current.find('option:not(:first)').hide();
    18.         var text = cur.text().toLowerCase();
    19.         current.find('option' + '.' + text).show();
    20.         current.find('option:first').attr({selected:'selected'});
    21.         current.find('option:first').click();
    22.     })
    23.  })
    24. }
    25. })(jQuery);
    Все работает отлично.

    Есть в админке еще страница редактирования файла. Вылазит та же формочка, но уже заполненная. Решил приделать туда тоже подобный динамический select для того, чтобы можно было файл переместить в другой раздел, категорию или подкатегорию.
    Вставил туда селекты. Из базы корректно достаются раздел, категория и подкатегория редактируемого файла и вставляются в селекты и выбраны по умолчанию. Вроде бы все работает, но вот с содержимым селекта хрень какая-то:
    1. При выборе 1го раздела возможно выбрать только первую категорию и первую подкатегорию первого раздела
    2. При выборе других разделов возможно выбрать категории и подкатегории выбранного раздела плюс первую категорию и первую подкатегорию первого раздела

    Скрипт используется тот же, вот код php файла:

    edit_file.php
    Код (Text):
    1. .......................
    2. ...............................
    3. if (isset ($_GET['id'])) {$id = $_GET['id']; }?>
    4. ....................................................
    5. .....................................
    6. <html>
    7. <head>
    8. .....................................
    9. ........................................
    10. <script type="text/javascript" src="js/jquery-1.3.1.js"></script>
    11. <script type="text/javascript" src="js/jquery.depend1.js"></script>
    12. <script type="text/javascript">
    13. jQuery(function($){
    14.     $('#cat').depend({ parent:'division'});
    15.     $('#subcat').depend({ parent:'cat'});
    16. });
    17. </script>
    18. </head>
    19.  
    20. <body >
    21. if (!isset($id)) /*Если не существует параметра id в адресе страницы, то...*/
    22. {
    23.     echo ("<p class='admin'>Редактирование файла</p><p>Выберите файл для редактирования:</p>");
    24.  
    25.             /*Photoshop*/
    26.       $result = mysql_query ("SELECT id,title,date FROM files_demo WHERE division='photoshop' ORDER BY date DESC");
    27.       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>
    28. <p><br><br><strong>Код ошибки:</strong></p>";
    29. exit (mysql_error()); }
    30. if (mysql_num_rows($result) > 0) {$myrow = mysql_fetch_array ($result);}
    31. else {echo "<p>Информация по запросу не может быть извлечена - в запрашиваемой таблице базы нет записей.</p>";
    32. exit ();} /*Защита от ошибок*/
    33.  
    34. echo ("<p style='text-align:center;color:blue;'>Photoshop</p>");
    35.            /*Вывод списка файлов для редактирования*/
    36.       do
    37.       {
    38.       printf ("<p><a href='edit_file.php?id=%s'><span class='leftside_add'>(%s)</span> %s</a></p>",$myrow["id"],$myrow["date"],$myrow["title"]);
    39.       }
    40.       while ($myrow = mysql_fetch_array ($result));
    41.  
    42.             /*Dreamweaver*/  
    43.       $result = mysql_query ("SELECT id,title,date FROM files_demo WHERE division='dreamweaver' ORDER BY date DESC");
    44.       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>
    45. <p><br><br><strong>Код ошибки:</strong></p>";
    46. exit (mysql_error()); }
    47. if (mysql_num_rows($result) > 0) {$myrow = mysql_fetch_array ($result);}
    48. else {echo "<p>Информация по запросу не может быть извлечена - в запрашиваемой таблице базы нет записей.</p>";
    49. exit ();} /*Защита от ошибок*/
    50.  
    51. echo ("<p style='text-align:center;color:blue;'>Dreamweaver</p>");
    52.            /*Вывод списка файлов для редактирования*/
    53.       do
    54.       {
    55.       printf ("<p><a href='edit_file.php?id=%s'><span class='leftside_add'>(%s)</span> %s</a></p>",$myrow["id"],$myrow["date"],$myrow["title"]);
    56.       }
    57.       while ($myrow = mysql_fetch_array ($result));
    58.  
    59.             /*Flash*/
    60.       $result = mysql_query ("SELECT id,title,date FROM files_demo WHERE division='flash' ORDER BY date DESC");
    61.       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>
    62. <p><br><br><strong>Код ошибки:</strong></p>";
    63. exit (mysql_error()); }
    64. if (mysql_num_rows($result) > 0) {$myrow = mysql_fetch_array ($result);}
    65. else {echo "<p>Информация по запросу не может быть извлечена - в запрашиваемой таблице базы нет записей.</p>";
    66. exit ();} /*Защита от ошибок*/
    67.  
    68. echo ("<p style='text-align:center;color:blue;'>Flash</p>");
    69.            /*Вывод списка файлов для редактирования*/
    70.       do
    71.       {
    72.       printf ("<p><a href='edit_file.php?id=%s'><span class='leftside_add'>(%s)</span> %s</a></p>",$myrow["id"],$myrow["date"],$myrow["title"]);
    73.       }
    74.       while ($myrow = mysql_fetch_array ($result));
    75.      
    76.             /*Fireworks*/
    77.       $result = mysql_query ("SELECT id,title,date FROM files_demo WHERE division='fireworks' ORDER BY date DESC");
    78.       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>
    79. <p><br><br><strong>Код ошибки:</strong></p>";
    80. exit (mysql_error()); }
    81. if (mysql_num_rows($result) > 0) {$myrow = mysql_fetch_array ($result);}
    82. else {echo "<p>Информация по запросу не может быть извлечена - в запрашиваемой таблице базы нет записей.</p>";
    83. exit ();} /*Защита от ошибок*/
    84.  
    85. echo ("<p style='text-align:center;color:blue;'>Fireworks</p>");
    86.            /*Вывод списка файлов для редактирования*/
    87.       do
    88.       {
    89.       printf ("<p><a href='edit_file.php?id=%s'><span class='leftside_add'>(%s)</span> %s</a></p>",$myrow["id"],$myrow["date"],$myrow["title"]);
    90.       }
    91.       while ($myrow = mysql_fetch_array ($result));
    92.      
    93. }
    94. else /*Если параметр id существует в адресе страницы, то...*/
    95. {
    96. $result_id = mysql_query ("SELECT * FROM files_demo WHERE id=$id");
    97. 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>
    98. <p><br><br><strong>Код ошибки:</strong></p>";
    99. exit (mysql_error()); }
    100. if (mysql_num_rows($result_id) > 0) {$myrow_id = mysql_fetch_array ($result_id);}
    101. else {echo "<p>Информация по запросу не может быть извлечена - в запрашиваемой таблице базы нет записей.</p>";
    102. exit ();} /*Защита от ошибок*/
    103.    
    104. echo "<p class='admin'>Редактирование файла</p>
    105. <form name='update_file' method='post' action='update_file.php'>";
    106.    
    107.     /*Вывод разделов в цикле с автоматическим выбором реального раздела редактируемого файла*/
    108.     $result_div = mysql_query ("SELECT DISTINCT division FROM subcat_files");
    109. 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>
    110. <p><br><br><strong>Код ошибки:</strong></p>";
    111. exit (mysql_error()); }
    112. if (mysql_num_rows($result_div) > 0) {$myrow_div = mysql_fetch_array ($result_div);}
    113. else {echo "<p>Информация по запросу не может быть извлечена - в запрашиваемой таблице базы нет записей.</p>";
    114. exit ();} /*Защита от ошибок*/
    115.  
    116. echo    "<p>Выберите раздел<br><select name='division' id='division' class='selectable clasamea'>";
    117. do
    118. {
    119.     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*/
    120.     else {printf ("<option value='%s' title='%s'>%s</option>",$myrow_div["division"],$myrow_div["division"],$myrow_div["division"]);    }
    121. }
    122. while ($myrow_div = mysql_fetch_array ($result_div));      
    123.  
    124. echo "</select></p>";
    125.    
    126.    
    127.     /*Вывод категорий в цикле с автоматическим выбором реальной категории редактируемого файла*/
    128.     $result_cat = mysql_query ("SELECT DISTINCT cat,division FROM subcat_files");
    129. 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>
    130. <p><br><br><strong>Код ошибки:</strong></p>";
    131. exit (mysql_error()); }
    132. if (mysql_num_rows($result_cat) > 0) {$myrow_cat = mysql_fetch_array ($result_cat);}
    133. else {echo "<p>Информация по запросу не может быть извлечена - в запрашиваемой таблице базы нет записей.</p>";
    134. exit ();} /*Защита от ошибок*/
    135.  
    136. echo    "<p>Выберите категорию<br><select name='cat' id='cat' class='selectable'>";
    137. do
    138. {
    139.     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*/
    140.     else {printf ("<option value='%s' class='%s' title='%s'>%s</option>",$myrow_cat["cat"],$myrow_cat["division"],$myrow_cat["cat"],$myrow_cat["cat"]); }
    141. }
    142. while ($myrow_cat = mysql_fetch_array ($result_cat));      
    143.  
    144. echo "</select></p>";
    145.  
    146.     /*Вывод подкатегорий в цикле с автоматическим выбором реальной подкатегории редактируемого файла*/
    147.     $result_subcat = mysql_query ("SELECT * FROM subcat_files");
    148. 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>
    149. <p><br><br><strong>Код ошибки:</strong></p>";
    150. exit (mysql_error()); }
    151. if (mysql_num_rows($result_subcat) > 0) {$myrow_subcat = mysql_fetch_array ($result_subcat);}
    152. else {echo "<p>Информация по запросу не может быть извлечена - в запрашиваемой таблице базы нет записей.</p>";
    153. exit ();} /*Защита от ошибок*/
    154.  
    155. echo    "<p>Выберите подкатегорию<br><select name='subcat' id='subcat' class='selectable'>";
    156. do
    157. {
    158.     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*/
    159.     else {printf ("<option value='%s' class='%s'>%s</option>",$myrow_subcat["id"],$myrow_subcat["cat"],$myrow_subcat["title"]); }
    160. }
    161. while ($myrow_subcat = mysql_fetch_array ($result_subcat));    
    162.  
    163. echo "</select></p>";
    164. ....................................
    165. ......................................
    166. ......................................
    167. ......................................
    Перековырял весь код, но понять не могу, в чем проблема:cry: Скорее всего проблема в скрипте

    Ссылки на примеры (работает только в Firefox):
    http://adobe-master.com/demo_select_new_file.php
    http://adobe-master.com/demo_select_edit_file.php
     
  2. gkhelloworld

    gkhelloworld Активный пользователь

    С нами с:
    18 ноя 2007
    Сообщения:
    311
    Симпатии:
    0
    Адрес:
    PHP.ru
  3. zevilz

    zevilz Активный пользователь

    С нами с:
    14 июн 2010
    Сообщения:
    182
    Симпатии:
    0