Просмотр полной версии : Ниспадающий список и MySql
Есть 2 ниспадающих списка
1. список выводит список отделов организации (делается запрос к бд и выводим инфу)
2. список ДОЛЖЕН выводить должности конкретного выбранного отдела..... как это можно релизовать?
тобишь я кликаю в первом списке на отдел формируется запрос к базе с id отдела и выводится из бд список должностей во второй ниспадающий список
Joker-jar
12.01.2009, 10:31
Красивей всего будет если сделать через AJAX
с аяксом глухо как в танке =(
есть примеры похожих реализаций?
Joker-jar
12.01.2009, 10:51
Напишу небольшой пример, если никто не опередит :)
Joker-jar
12.01.2009, 11:14
Так-с, ну вроде, работает. Будут проблемы, пиши
<?
$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>
Joker-jar
12.01.2009, 11:34
Борода в IE. Он не хочет innerHTML в select пихать. Пришлось сделать через DOM. Не совсем красиво, но мысль ты должен уловить:
<?
$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>
Еще вариант
Две таблицы
Таблица Отделы - поля ид отдела, название отдела.
Таблица Должности - ид должности, ид отдела, название должности.
<?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 >= 0 && $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.
Во на пыхе немного понятней для меня
спс,щас буду его под себя крутить!
один вопрос,когда идет выбор из списка почемуто если просто кликнем на раскрытие то сразу идет выборка 0 ид,но если зажать кнопку и выбрать нужный отдел то выбирает то что надо.....мб баг?
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot