Показать сообщение отдельно
  #5 (permalink)  
Старый 22.01.2017, 11:24
Интересующийся
Отправить личное сообщение для dfii Посмотреть профиль Найти все сообщения от dfii
 
Регистрация: 21.01.2017
Сообщений: 12

Приемочный, сдаточный, контрольный и т.д. это гипотетические отделы. Писать реальные отделы посчитал не желательным. Извеняюсь что ввёл в заблуждение своей фантазией

Код формы:
[spoiler]
<html>
<head>
<meta charset="utf-8" />
<title>Ремонт - Поступление</title>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="selects.js"></script>
</head>
<body>
<?php
	function sp_otdel()      {
                $dbc = mysqli_connect ('localhost', 'root', '', 'select3');
                $query = "SELECT * FROM tbl_otdel ORDER BY name";
                $query_res = mysqli_query ($dbc, $query);
                $sp_otdel = array();
                while($row = mysqli_fetch_assoc($query_res))    {
                        $sp_otdel[] = $row;                              }
                return $sp_otdel;        }
        $sp_otdel = sp_otdel();
?>
	<form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>">
                <select name='sp_otdel' id='sp_otdel'>
                <option value="0"> - Выберите отдел - </option>
                <?php foreach($sp_otdel as $item)       {echo "<option value='".$item['id']."'>".$item['name']."</option>";} ?>
                </select><br /><br />
                
                <select name='sp_category_tech' id='sp_category_tech' disabled="disabled">
     		<option value="0"> - Выберите категорию - </option>
                </select><br /><br />

                <select name='sp_num_tech' id='sp_num_tech' disabled="disabled">
	         	<option value="0"> - Выберите номер - </option>
                </select><br /><br />
	</form>
</body>
</html>
[/spoiler]

Первый список формируется функцией при загрузке формы, после выбора значения в первом поле срабатывает скрипт и на основе этого значения формирует список категорий техники принадлежащий выбранному отделу. Второй список формируется кодом:
[spoiler]
<?php
$sp_otdel = @intval($_GET['sp_otdel']);
$dbc = mysqli_connect ('localhost', 'root', '', 'select3' );
$query = "SELECT tbl_number_tech.*, tbl_category.* FROM tbl_number_tech, tbl_category WHERE tbl_number_tech.id_location = $sp_otdel AND tbl_category.id = tbl_number_tech.id_category_tech GROUP BY tbl_category.category";
$regs = mysqli_query($dbc, $query);
if ($regs) {
    $num = mysqli_num_rows($regs);      
    $i = 0;
    while ($i < $num) {
       $sp_category_tech[$i] = mysqli_fetch_assoc($regs);   
       $i++;
    }     
    $result = array('sp_category_tech'=>$sp_category_tech);  
}
else {
	$result = array('type'=>'error');
}
print json_encode($result); 
?>
[/spoiler]

Результат выборки возвращается обратно в JavaScript, откуда в форму в виде HTML кода.
После выбора категории техники на основе значения ПЕРВОГО и второго полей должен сформироваться третий список, НО значения второго поля я передаю по аналогии первой функции javascript'a, но вместе с со значением второго поля не могу передать значение ранее выбранного первого поля.
Этот код ждёт значения обеих предыдущих полей:
[spoiler]
<?php
$sp_category_tech = @intval($_GET['sp_category_tech']);
$sp_otdel = ; // Сюда нужно передать значение первого поля
$dbc = mysqli_connect ('localhost', 'root', '', 'select3' );
$query = "SELECT * FROM tbl_number_tech WHERE id_category_tech = $sp_category_tech AND id_location = $sp_otdel";
$regs = mysqli_query($dbc, $query);
if ($regs) {
    $num = mysqli_num_rows($regs);      
    $i = 0;
    while ($i < $num) {
       $sp_num_tech[$i] = mysqli_fetch_assoc($regs);   
       $i++;
    }     
    $result = array('sp_num_tech'=>$sp_num_tech);  
}
else {
	$result = array('type'=>'error');
}
print json_encode($result); 
?>
[/spoiler]

Ещё меня немного удивила одно выражение в теме Формирование связанных списков select произвольной вложенности, где в начале статьи приводится:
Цитата:
Для двух зависимых списков (я публиковал пример более 5 лет назад!) ситуация простая и понятная, но люди задают вопрос — а как развить пример для вложения 3х списков?
Ответ — никак. Придется менять практически все, потому слово — менять тут не подходит.
Более конкретно:
[spoiler]
$('#sp_category_tech').change(function () { // Функция запускает скрипт при изменении поля sp_category_tech
var sp_category_tech = $(this).val(); // Инициализирует переменную sp_category_tech и передаёт ей значение второго поля
var sp_otdel = $('sp_otdel').val(); // Тут переменной sp_otdel по замыслу должно быть передано значение первого поля, но этого не происходит.
... // тут всякий дисабл для полей
var url = 'get_num_tech.php'; // объявляется переменная url  с именем скрипта для фомирования третьего списка
$.get(url, "sp_category_tech=" + sp_category_tech, // тут смутно представляю что с помощью get должен запуститься скрипт, которому передаются значения выбраных полей, но как это воплотить в код?
[/spoiler]

Последний раз редактировалось dfii, 22.01.2017 в 11:24. Причина: как тут спойлеры работают?
Ответить с цитированием