Начальное значение "select" из БД.
Код:
<select name="podr" id="podr" style="width:150;">
<option value="0">без подразделения</option>
<option value="1">подразделение 1</option>
<option value="2">подразделение 2</option>
<option value="3">подразделение 3</option>
<option value="4">подразделение 4</option>
<option value="5">подразделение 5</option>
<option value="6">подразделение 6</option>
</select>
<option value="0">без подразделения</option>
<option value="1">подразделение 1</option>
<option value="2">подразделение 2</option>
<option value="3">подразделение 3</option>
<option value="4">подразделение 4</option>
<option value="5">подразделение 5</option>
<option value="6">подразделение 6</option>
</select>
Из базы данных в переменную [COLOR="Purple"]$podr[/COLOR] считывается целочисленное значение, соответствующее подразделению. Каким образом сделать необходимую опцию начальной (т.е. [COLOR="Red"]selected[/COLOR][COLOR="Purple"]="selected"[/COLOR]) в зависимости от значения переменной $podr?
Код:
<select name="podr" id="podr" style="width:150;">
<?php
$sel='selected="selected"';
echo '<option value="0" '.($podr==0?$sel:'').'>без подразделения</option>';
for($i=1;$i<=6;$i++)
echo '<option value="'.$i.'" '.($podr==$i?$sel:'').'>подразделение '.$i.'</option>';
?>
</select>
<?php
$sel='selected="selected"';
echo '<option value="0" '.($podr==0?$sel:'').'>без подразделения</option>';
for($i=1;$i<=6;$i++)
echo '<option value="'.$i.'" '.($podr==$i?$sel:'').'>подразделение '.$i.'</option>';
?>
</select>
Както так?
Если да, то проще пихать все в одну таблицу, и добавить в нее поле parent_id.
Выбирать да, можно сабмитить, получать занчения.. но лучше организовать это через Ajax, на первый селекст ставим onchange и xhr-для получение подкатегорий, вставляя их на страницу ЖСом.
Тогда следующий вопрос. В зависимости от опции, выбранной в селекте, будет появляться новый селект с подпунктами. У каждого селекта свои подпункты. Как это возможно сделать? Создать для каждой опции таблицу в БД и при выборе пункта производить SUBMIT и подгружать содержимое в селект?
Возникает новая проблема. Если пытаться извлечь имена, например, из 0-ого уровеня, т.е. запросом "select name from struct where parent_id" mysql_fetch_assoc выдаёт ассоциативный массив, который выводит всё разом... Можно ли как-то обращаться поэлементно к нему?
Нашел функцию вытаскивания дерева. Может ее можно как-то приспособить.
Код:
function ShowTree($ParentID, $lvl) {
global $link;
global $lvl;
$lvl++;
$sSQL="SELECT id, name, parent_id FROM struct WHERE parent_id=".$ParentID." ORDER BY name";
$result = mysql_query($sSQL);
if (mysql_num_rows($result) != 0) {
echo("<UL>\n");
while ( $row = mysql_fetch_array($result) ) {
$ID1 = $row["id"];
echo("<LI>\n");
echo("<A HREF=\""."?ID=".$ID1."\">".$row["name"]."</A>"." \n");
ShowTree($ID1, $lvl);
$lvl--;
}
echo("</UL>\n");
}
}
global $link;
global $lvl;
$lvl++;
$sSQL="SELECT id, name, parent_id FROM struct WHERE parent_id=".$ParentID." ORDER BY name";
$result = mysql_query($sSQL);
if (mysql_num_rows($result) != 0) {
echo("<UL>\n");
while ( $row = mysql_fetch_array($result) ) {
$ID1 = $row["id"];
echo("<LI>\n");
echo("<A HREF=\""."?ID=".$ID1."\">".$row["name"]."</A>"." \n");
ShowTree($ID1, $lvl);
$lvl--;
}
echo("</UL>\n");
}
}