За последние 24 часа нас посетили 50120 программистов и 1727 роботов. Сейчас ищут 638 программистов ...

Тройной динамический select с подключением к базе

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

  1. zevilz

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

    С нами с:
    14 июн 2010
    Сообщения:
    182
    Симпатии:
    0
    Имеется сайт с 4мя разделами на PHP с использованием базы данных MySQL. В каждом разделе подгружаются из базы категории, в которые подгружаются тоже из базы подкатегории и в них уже находятся файлы. Необходимо создать форму добавления файла и форму редактирования файла с динамическими select'ами. Причем при редактировании файла необходимо, чтобы select'ы с разделом, категории и подкатегории были выбраны те, которые приписаны к файлу, и можно было бы переместить например файл в другую категорию или подкатегорию. Обработка формы идет через внешний обработчик php методом POST. Каким способом создать такой тройной динамический select с подключаемой базой MySQL?

    P.S. В скриптах я почти ноль :(
     
  2. Апельсин

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

    С нами с:
    20 мар 2010
    Сообщения:
    3.645
    Симпатии:
    2
    Тебе чуть дальше, во фриланс.
     
  3. zevilz

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

    С нами с:
    14 июн 2010
    Сообщения:
    182
    Симпатии:
    0
    Вот как я пробовал:


    new_file.php
    Код (Text):
    1. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    2. <html>
    3. <head>
    4. <meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
    5. <link href="../style.css" rel="stylesheet" type="text/css">
    6. <script type="text/javascript" src="js/jquery-1.3.1.js"></script>
    7. <script type="text/javascript">
    8. (function($){
    9.   // очищаем select
    10.   $.fn.clearSelect = function() {
    11.       return this.each(function(){
    12.           if(this.tagName=='SELECT') {
    13.               this.options.length = 0;
    14.               $(this).attr('disabled','disabled');
    15.           }
    16.       });
    17.   }
    18.   // заполняем select
    19.   $.fn.fillSelect = function(dataArray) {
    20.       return this.clearSelect().each(function(){
    21.           if(this.tagName=='SELECT') {
    22.               var currentSelect = this;
    23.               $.each(dataArray,function(index,data){
    24.                   var option = new Option(data.text,data.value);
    25.                   if($.support.cssFloat) {
    26.                       currentSelect.add(option,null);
    27.                   } else {
    28.                       currentSelect.add(option);
    29.                   }
    30.               });
    31.           }
    32.       });
    33.   }
    34. })(jQuery);
    35. </script>
    36. <script type="text/javascript">
    37. $(document).ready(function(){
    38.  
    39.   // выбор категории
    40.   function adjustCategory(){
    41.     var divisionValue = $('#division').val();
    42.     var tmpSelect = $('#category');
    43.     if(divisionValue.length == 0) {
    44.         tmpSelect.attr('disabled','disabled');
    45.         tmpSelect.clearSelect();
    46.         adjustSubcat();
    47.     } else {
    48.         $.getJSON('cascadeSelectCategory.php',{division:divisionValue},function(data) { tmpSelect.fillSelect(data).attr('disabled',''); adjustSubcat(); });
    49.        
    50.     }
    51.   };
    52.   // выбор подкатегории
    53.   function adjustSubcat(){
    54.     var divisionValue = $('#division').val();
    55.     var categoryValue = $('#category').val();
    56.     var tmpSelect = $('#subcat');
    57.     if(divisionValue.length == 0||categoryValue.length == 0) {
    58.         tmpSelect.attr('disabled','disabled');
    59.         tmpSelect.clearSelect();
    60.     } else {
    61.         $.getJSON('cascadeSelectSubcat.php',{division:divisionValue,category:categoryValue},function(data) { tmpSelect.fillSelect(data).attr('disabled',''); });
    62.     }
    63.   };
    64.    
    65.   $('#division').change(function(){
    66.     adjustCategory();
    67.   }).change();
    68.   $('#category').change(adjustSubcat);
    69.   $('#subcat').change(function(){
    70.     if($(this).val().length != 0) { alert('Выбор сделан!'); }
    71.   });
    72.  
    73. });
    74. </script>
    75. </head>
    76.  
    77. <body >
    78.   <label>Раздел</label><br />
    79.   <select id="division">
    80.     <option value="">Выбор раздела</option>
    81.     <option value="photoshop">photoshop</option>
    82.     <option value="dreamweaver">dreamweaver</option>
    83.     <option value="flash">flash</option>
    84.     <option value="fireworks">fireworks</option>
    85.    </select>
    86.   </p>
    87.  
    88.   <p>
    89.   <label>Категория</label><br />
    90.   <select id="category" disabled="disabled"></select>
    91.   </p>
    92.  
    93.   <p>
    94.   <label>Подкатегория</label><br />
    95.  
    96.   <select id="subcat" disabled="disabled"></select>
    97.   </p>      
    98. </body>
    99. </html>
    cascadeSelectCategory.php
    Код (Text):
    1. <?php
    2. header('Content-Type: text/html; charset=windows-1251');
    3. if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
    4.    
    5.     switch($_GET['division']) {
    6.         case 'photoshop':
    7.         print '[{value:"",text:"-----"}';
    8.         $result = mysql_query ("SELECT DISTINCT cat FROM cat_files_demo WHERE division='photoshop'",$db);
    9.         $myrow = mysql_fetch_array ($result);
    10.           /*Вывод выпадающего списка с категориями*/
    11.     do
    12.     {
    13.         printf (",{value:'%s',text:'%s'}",$myrow["cat"],$myrow["cat"]);
    14.     }
    15.     while ($myrow = mysql_fetch_array ($result));
    16.        
    17.         print ']';
    18.         break;
    19.         case 'dreamweaver':
    20.         print '[{value:"",text:"-----"}';
    21.         $result = mysql_query ("SELECT cat,id FROM cat_files_demo WHERE division='dreamweaver'",$db);
    22.         $myrow = mysql_fetch_array ($result);
    23.           /*Вывод выпадающего списка с категориями*/
    24.     do
    25.     {
    26.         printf (",{value:'%s',text:'%s'}",$myrow["cat"],$myrow["cat"]);
    27.     }
    28.     while ($myrow = mysql_fetch_array ($result));
    29.        
    30.         print ']';
    31.         break;
    32.         case 'flash':
    33.         print '[{value:"",text:"-----"}';
    34.         $result = mysql_query ("SELECT cat,id FROM cat_files_demo WHERE division='flash'",$db);
    35.         $myrow = mysql_fetch_array ($result);
    36.           /*Вывод выпадающего списка с категориями*/
    37.     do
    38.     {
    39.         printf (",{value:'%s',text:'%s'}",$myrow["cat"],$myrow["cat"]);
    40.     }
    41.     while ($myrow = mysql_fetch_array ($result));
    42.        
    43.         print ']';
    44.         break;
    45.         case 'fireworks':
    46.         print '[{value:"",text:"-----"}';
    47.         $result = mysql_query ("SELECT cat,id FROM cat_files_demo WHERE division='fireworks'",$db);
    48.         $myrow = mysql_fetch_array ($result);
    49.           /*Вывод выпадающего списка с категориями*/
    50.     do
    51.     {
    52.         printf (",{value:'%s',text:'%s'}",$myrow["cat"],$myrow["cat"]);
    53.     }
    54.     while ($myrow = mysql_fetch_array ($result));
    55.        
    56.         print ']';
    57.         break;
    58.         default:
    59.         print '[{value:"",text:"---"}]';
    60.         break;
    61.     }
    62.    
    63. }
    64. ?>
    cascadeSelectSubcat.php
    Код (Text):
    1. <?php
    2. header('Content-Type: text/html; charset=windows-1251');
    3. if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
    4.    
    5.     if($_GET['division']==photoshop) {
    6.         switch($_GET['category']) {
    7.         case
    8.     $result_photo = mysql_query ("SELECT cat FROM cat_files_demo WHERE division='photoshop'",$db);
    9.         $myrow_photo = mysql_fetch_array ($result_photo);
    10.           /*Вывод выпадающего списка с категориями*/
    11.     do
    12.     {
    13.         printf ("'%s': ",$myrow_photo["cat"]);
    14.         printf ("'[{value:'',text:'---'}");    
    15.                 $result_photo_sub = mysql_query ("SELECT title FROM cat_files_demo WHERE cat='$myrow_photo[cat]'",$db);
    16.                 $myrow_photo_sub = mysql_fetch_array ($result_photo_sub);
    17.                     /*Вывод выпадающего списка с категориями*/
    18.        
    19.                 do {
    20.                    
    21.                     printf (",{value:'%s',text:'%s'",$myrow_photo_sub["title"],$myrow_photo_sub["title"]);
    22.                    
    23.                 } while ($myrow_photo_sub = mysql_fetch_array ($result_photo_sub));
    24.        
    25.         printf ("]' break;");
    26.        
    27.        
    28.     }
    29.     while ($myrow_photo = mysql_fetch_array ($result_photo));
    30.  
    31.             default:
    32.             print '[{value:"",text:"fuck photoshop"}]';
    33.             break;
    34.     }
    35.     }  else {
    36.         print '[{value:"",text:"fuck"}]';
    37.     }
    38. }
    39. ?>
    Категории выводятся, а подкатегории нет(((

    Вот исходник cascadeSelectSubcat.php, к которому я подключал базу:
    Код (Text):
    1. <?php
    2. header('Content-Type: text/html; charset=utf-8');
    3. if($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') {
    4.    
    5.     if($_GET['country']==1) {
    6.         switch($_GET['auto']) {
    7.             case '1':
    8.             print '[{value:"",text:"Выбрать модель"},{value:"1",text:"A4"},{value:"2",text:"Q7"},{value:"3",text:"TT"}]';
    9.             break;
    10.             case '2':
    11.             print '[{value:"",text:"Выбрать модель"},{value:"1",text:"6ER"},{value:"2",text:"M"},{value:"3",text:"X6"}]';
    12.             break;
    13.             case '3':
    14.             print '[{value:"",text:"Выбрать модель"},{value:"1",text:"Astra"},{value:"2",text:"Corsa"},{value:"3",text:"Vectra"}]';
    15.             break;
    16.             default:
    17.             print '[{value:"",text:"Выбрать модель"}]';
    18.             break;
    19.         }
    20.     } elseif($_GET['country']==2) {
    21.         switch($_GET['auto']) {
    22.             case '1':
    23.             print '[{value:"",text:"Выбрать модель"},{value:"1",text:"Matiz"},{value:"2",text:"Nexia"}]';
    24.             break;
    25.             case '2':
    26.             print '[{value:"",text:"Выбрать модель"},{value:"1",text:"Accent"},{value:"2",text:"Elantra"},{value:"3",text:"Sonata"}]';
    27.             break;
    28.             case '3':
    29.             print '[{value:"",text:"Выбрать модель"},{value:"1",text:"Carnival"},{value:"2",text:"Picanto"},{value:"3",text:"Spectra"}]';
    30.             break;
    31.             default:
    32.             print '[{value:"",text:"Выбрать модель"}]';
    33.             break;
    34.         }
    35.     } elseif($_GET['country']==3) {
    36.         switch($_GET['auto']) {
    37.             case '1':
    38.             print '[{value:"",text:"Выбрать модель"},{value:"1",text:"Accord"},{value:"2",text:"Civic"},{value:"3",text:"CR-V"}]';
    39.             break;
    40.             case '2':
    41.             print '[{value:"",text:"Выбрать модель"},{value:"1",text:"Mazda 3"},{value:"2",text:"Mazda 5"},{value:"3",text:"Mazda 6"}]';
    42.             break;
    43.             case '3':
    44.             print '[{value:"",text:"Выбрать модель"},{value:"1",text:"Corolla"},{value:"2",text:"LandCruiser"},{value:"3",text:"RAV4"}]';
    45.             break;
    46.             default:
    47.             print '[{value:"",text:"Выбрать модель"}]';
    48.             break;
    49.         }
    50.     } else {
    51.         print '[{value:"",text:"Выбрать модель"}]';
    52.     }
    53. }
    54. ?>
     
  4. EvelRus

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

    С нами с:
    16 ноя 2006
    Сообщения:
    2.168
    Симпатии:
    0
    Адрес:
    Москва
    Это такая шутка?:)
     
  5. Padaboo

    Padaboo Старожил
    Команда форума Модератор

    С нами с:
    26 окт 2009
    Сообщения:
    5.242
    Симпатии:
    1
    zevilz
    очень много кода и букаф , что надо в итоге ? марка -> модель?