ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > PHP, PERL, MySQL, JavaScript
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

Ниспадающий список и MySql
  #1  
Старый 12.01.2009, 10:18
Аватар для svesve
svesve
Постоянный
Регистрация: 15.06.2007
Сообщений: 527
Провел на форуме:
1734541

Репутация: 214


По умолчанию Ниспадающий список и MySql

Есть 2 ниспадающих списка
1. список выводит список отделов организации (делается запрос к бд и выводим инфу)
2. список ДОЛЖЕН выводить должности конкретного выбранного отдела..... как это можно релизовать?
тобишь я кликаю в первом списке на отдел формируется запрос к базе с id отдела и выводится из бд список должностей во второй ниспадающий список
 
Ответить с цитированием

  #2  
Старый 12.01.2009, 10:31
Аватар для Joker-jar
Joker-jar
Постоянный
Регистрация: 11.03.2007
Сообщений: 581
Провел на форуме:
4172659

Репутация: 646


Отправить сообщение для Joker-jar с помощью ICQ
По умолчанию

Красивей всего будет если сделать через AJAX
 
Ответить с цитированием

  #3  
Старый 12.01.2009, 10:42
Аватар для svesve
svesve
Постоянный
Регистрация: 15.06.2007
Сообщений: 527
Провел на форуме:
1734541

Репутация: 214


По умолчанию

с аяксом глухо как в танке =(
есть примеры похожих реализаций?
 
Ответить с цитированием

  #4  
Старый 12.01.2009, 10:51
Аватар для Joker-jar
Joker-jar
Постоянный
Регистрация: 11.03.2007
Сообщений: 581
Провел на форуме:
4172659

Репутация: 646


Отправить сообщение для Joker-jar с помощью ICQ
По умолчанию

Напишу небольшой пример, если никто не опередит
 
Ответить с цитированием

  #5  
Старый 12.01.2009, 11:14
Аватар для Joker-jar
Joker-jar
Постоянный
Регистрация: 11.03.2007
Сообщений: 581
Провел на форуме:
4172659

Репутация: 646


Отправить сообщение для Joker-jar с помощью ICQ
По умолчанию

Так-с, ну вроде, работает. Будут проблемы, пиши

PHP код:
<?

  $countries 
= array('Россия''США''Германия');
  
$cities = array(array('Москва''Тверь''Уфа'), array('Нью-Йорк''Сан-Франциско''Бостон'), array('Берлин''Гамбург'));

  if (isset(
$_GET['do']) && $_GET['do'] === 'getcities')
    {
      
$cid intval($_GET['cid']);
      echo 
'<option value="-1">Выберите город...'."\n";
      for (
$i 0$i count($cities[$cid]); $i++)
        echo 
'<option value="'.$i.'">'.$cities[$cid][$i]."\n";
      exit;
    }

?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<body>

  <script>
    function GetXmlHttpObject()
    {
      var objXMLHttp=null;
      if (window.XMLHttpRequest)
        {
          objXMLHttp=new XMLHttpRequest();
        }
      else
        if (window.ActiveXObject)
          {
            objXMLHttp=new ActiveXObject('Microsoft.XMLHTTP');
          }
        return objXMLHttp;
    }
    
    function OnChangeCountry()
    {
      if (xmlHttp.readyState == 4 || xmlHttp.readyState == 'complete')
        {
          forma.city.innerHTML = xmlHttp.responseText;
          forma.city.disabled = false;
        }
    }
  
    function ChangeCountry()
    {
      cid = forma.country.value;
      if (cid == -1)
        {
          forma.city.disabled = true;
        }
      else
        {
          xmlHttp = GetXmlHttpObject();
          url = "/test.php?do=getcities&cid=" + cid;
          xmlHttp.onreadystatechange = OnChangeCountry;
          xmlHttp.open("GET", url, true);
          xmlHttp.send(null);
        }
    }
  </script>

  <form name="forma" method="post">
    <select name="country" onchange="ChangeCountry()">
      <option value="-1">Выберите страну...
      <?
        
for ($i 0$i count($countries); $i++)
          echo 
'<option value="'.$i.'">'.$countries[$i]."\n";
      
?>
    </select>
    <select name="city" disabled>
      <option value="-1">Выберите город...
    </select>
  </form>
</body>
</html>
 
Ответить с цитированием

  #6  
Старый 12.01.2009, 11:34
Аватар для Joker-jar
Joker-jar
Постоянный
Регистрация: 11.03.2007
Сообщений: 581
Провел на форуме:
4172659

Репутация: 646


Отправить сообщение для Joker-jar с помощью ICQ
По умолчанию

Борода в IE. Он не хочет innerHTML в select пихать. Пришлось сделать через DOM. Не совсем красиво, но мысль ты должен уловить:

PHP код:
<?

  $countries 
= array('Россия''США''Германия');
  
$cities = array(array('Москва''Тверь''Уфа'), array('Нью-Йорк''Сан-Франциско''Бостон'), array('Берлин''Гамбург'));

  if (isset(
$_GET['do']) && $_GET['do'] === 'getcities')
    {
      
$cid intval($_GET['cid']);
      echo 
'-1;Выберите город...'."\n";
      for (
$i 0$i count($cities[$cid]); $i++)
        {
          echo 
$i.';'.$cities[$cid][$i];
          if (
$i count($cities[$cid]) - 1) echo "\n";
        }
      exit;
    }

?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>
<body>

  <script>
    function GetXmlHttpObject()
    {
      var objXMLHttp=null;
      if (window.XMLHttpRequest)
        {
          objXMLHttp=new XMLHttpRequest();
        }
      else
        if (window.ActiveXObject)
          {
            objXMLHttp=new ActiveXObject('Microsoft.XMLHTTP');
          }
        return objXMLHttp;
    }
    
    function OnChangeCountry()
    {
      if (xmlHttp.readyState == 4 || xmlHttp.readyState == 'complete')
        {
          opts = xmlHttp.responseText.split("\n");
          forma.city.options.length = 0;
          for (i = 0; i < opts.length; i++)
            {
              opt = opts[i].split(";");
              forma.city.options[i] = new Option(opt[1], opt[0]);
            }
          //forma.city.innerHTML = xmlHttp.responseText;
          forma.city.disabled = false;
        }
    }
  
    function ChangeCountry()
    {
      cid = forma.country.value;
      if (cid == -1)
        {
          forma.city.disabled = true;
        }
      else
        {
          xmlHttp = GetXmlHttpObject();
          url = "/test.php?do=getcities&cid=" + cid;
          xmlHttp.onreadystatechange = OnChangeCountry;
          xmlHttp.open("GET", url, true);
          xmlHttp.send(null);
        }
    }
  </script>

  <form name="forma" method="post">
    <select name="country" onchange="ChangeCountry()">
      <option value="-1">Выберите страну...
      <?
        
for ($i 0$i count($countries); $i++)
          echo 
'<option value="'.$i.'">'.$countries[$i]."\n";
      
?>
    </select>
    <select name="city" disabled>
      <option value="-1">Выберите город...
    </select>
  </form>
</body>
</html>
 
Ответить с цитированием

  #7  
Старый 12.01.2009, 12:25
Аватар для svesve
svesve
Постоянный
Регистрация: 15.06.2007
Сообщений: 527
Провел на форуме:
1734541

Репутация: 214


По умолчанию

Спс все работает!
 
Ответить с цитированием

  #8  
Старый 12.01.2009, 13:06
Аватар для krypt3r
krypt3r
Познавший АНТИЧАТ
Регистрация: 27.04.2007
Сообщений: 1,044
Провел на форуме:
3660186

Репутация: 905


По умолчанию

Еще вариант
Две таблицы
Таблица Отделы - поля ид отдела, название отдела.
Таблица Должности - ид должности, ид отдела, название должности.
PHP код:
<?php
  $connect 
pg_connect ('host=xxx.xxx.xxx.xxx dbname=xxx user=xxx password=xxx');
  if (!
$connect) {
    echo 
'Fuck';
  } else {
    
pg_query ($connect'set client_encoding=utf8');
    
$text "<html>\n<head>\n<title>Page Title</title>\n";
    
$text .= "</head>\n";
    
$text .= "<body>\n";
    
$text .= "<form name=\"frm\">\n";
    
$text .= "<select id=\"sel1\" onClick=\"location.href = '/test_a.php?otd_id=' + this.value\">\n";
    
$otd pg_query ($connect'select id, name from otd order by id');
    if (isset (
$_GET['otd_id']) && !empty ($_GET['otd_id']))
      
$otd_id intval ($_GET['otd_id']);
    else
      
$otd_id = -1;
    while (
$otd_res pg_fetch_array ($otd)) {
      
$text .= "<option value=\"{$otd_res['id']}\" " . ($otd_id >= && $otd_res['id'] == $otd_id 'selected' '') . ">{$otd_res['name']}</option>\n";
    }
    
$text .= "</select><br><br><br>\n";
    
$text .= "<select id=\"sel2\">\n";
    if (
$otd_id >= 0) {
      
$dolg pg_query ($connect'select id, otd_id, name from dolg where otd_id = ' $otd_id);
      while (
$dolg_res pg_fetch_array ($dolg)) {
        
$text .= "<option value={$dolg_res['id']}>{$dolg_res['name']}</option>\n";
      }
    }
    
$text .= "</select>";
    
$text .= "</form>\n";
    
$text .= '</body></html>';
    echo 
$text;
    
pg_close ($connect);
  }
?>
Для постгреса, но не думаю, что возникнет проблема перевести на мускуль. Тестилось на FF & O.

Последний раз редактировалось krypt3r; 12.01.2009 в 13:09..
 
Ответить с цитированием

  #9  
Старый 12.01.2009, 13:34
Аватар для svesve
svesve
Постоянный
Регистрация: 15.06.2007
Сообщений: 527
Провел на форуме:
1734541

Репутация: 214


По умолчанию

Во на пыхе немного понятней для меня
спс,щас буду его под себя крутить!
один вопрос,когда идет выбор из списка почемуто если просто кликнем на раскрытие то сразу идет выборка 0 ид,но если зажать кнопку и выбрать нужный отдел то выбирает то что надо.....мб баг?
 
Ответить с цитированием
Ответ





Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ