Я не программист, я по железу. Но прижало и возникла необходимость создать для поступающей на ремонт техники создать небольшую бд. Для регистрации техники выбираем из динамических списков сначало отдел, далее с помощью javascript для второго окна формируется список категории техники отфильтрованный в запросе во выбранному ранее отделу, список для третьего окна должен фильтроваться как по выбранной категории, так и по выбранному отделу, но вот как получить значение выбраного отдела ума не приложу. Чтобы закончить свой проект, осталось решить только эту задачу, но времени в связи с загруженностью на изучение теории нет. Данные задачи приложил. Данные в бд для простоты урезал.
два AND в WHERE, если в разных таблицах, то например sql JOIN по этим таблицам, только почему тема в JavcaScript разделе? Сложность не в SQL запросе?
Сложность не в sql, в пример условие не стал включать чтобы скрипт корректно работал. Проблема в передачи значения поля sp_otdel для условия WHERE id_location = $sp_otdel в запросе для формирования списка номеров техники. По аналогии снимаю значение выбранной категории, но как для этого же $.Get отправить в sp_num_tech.php ещё и значение ранее выбранного отдела. Если две переменных, например $sp_category и $sp_rosp получать соответствующие значения, то проблем применения двойного условия через AND не будет.
Я мало что понял. Если SQL запросы готовы, то все не достающие данные для них можно у пользователя узнать, так как он выбирает select тегом из списка, что он выбрал можно узнать и передавать в PHP который уже и сформирует SQL
В прикреплённом архиве есть всё для понимания, если нет возможности посмотреть наглядно подключив файлы к серверу, то я выложу код сюда
Спойлер: Здесь форма с динамическими списками: PHP: <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> Спойлер: JavaScript 'select.js' Код (Javascript): $(document).ready(function () { $('#sp_otdel').change(function () { var sp_otdel = $('#sp_otdel').val(); var url = 'get_category_tech.php'; $.get( url, "sp_otdel=" + sp_otdel, function (result) { if (result.type == 'error') { alert('error'); return(false); } else { var options = ''; $(result.sp_category_tech).each(function() { options += '<option value="' + $(this).attr('id_category_tech') + '">' + $(this).attr('category') + '</option>'; }); $('#sp_category_tech').html('<option value="0"> - Выберите категорию - </option>'+options); $('#sp_category_tech').attr('disabled', false); } }, "json" ); }); $('#sp_category_tech').change(function () { var sp_category_tech = $(this).val(); if (sp_otdel == '0') { $('#sp_num_tech').html('<option>- Выберите номер -</option>'); $('#sp_num_tech').attr('disabled', true); return(false); } $('#sp_num_tech').attr('disabled', true); $('#sp_num_tech').html('<option>загрузка...</option>'); var url = 'get_num_tech.php'; $.get( url, "sp_category_tech=" + sp_category_tech, function (result) { if (result.type == 'error') { alert('error'); return(false); } else { var options = ''; $(result.sp_num_tech).each(function() { options += '<option value="' + $(this).attr('id') + '">' + $(this).attr('num') + '</option>'; }); $('#sp_num_tech').html('<option value="0"> - Выберите номер - </option>'+options); $('#sp_num_tech').attr('disabled', false); } }, "json" ); }); }); Спойлер: Выборка из бд и формирование списка для второго окна sp_category_tech.php PHP: <?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); ?> Спойлер: выборка и формирование списка для третьего окна sp_num_tech.php PHP: <?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); ?> В последнем спойлере объявлена переменная $sp_otdel = но как мне передать ей значение выбранного отдела из списка первого окна, проблема в том как передать для формирования 3-го списка значения первого и второго окна? По найденым в сети аналогиям передать не получается.
Легче то оно легче, вот только для каждого нового зависимого запроса в базу надо будет форму перезагружать. Такой вариант есть, но как крайняя мера.
Если такой вариант можешь реализовать, то в чём тогда проблема с javascript? Пусть пользователь хоть 10 значений выбирает, ты их потом можешь передать в запрос.
Зависимые списки второй от первого, третий от второго, четвёртый от третьего и т.д. составить получиться, неполучается составить третий список зависимый от результатов первого и второго поля одновременно.
На одном из форумов мне дали пищу для ума по этой теме: Спойлер: http://javascript.ru/forum/showthread.php?p=441962 Код (Javascript): $('form').submit(function(e) { e.preventDefault(); $.get(this.action, $(this).serialize(), function(data) { //ответ сервера }) }) К тому же видимо Бог не оставил, пришло на ум, что можно создать табличку для хранения оперативных данных, заносить туда значение полей, пользоваться ими в процессе заполнения формы а при отправки данных с формы в бд табличку чистить DELETE FROM.
Получил прямой ответ на вопрос, для тех кто ищет подобное решение: Код (Javascript): $('#sp_category_tech').change(function () { var sp_category_tech = $(this).val(); var sp_otdel = $('#sp_otdel').val(); if (sp_otdel == '0') { ... $.get( url, "sp_category_tech=" + sp_category_tech + "&sp_otdel=" + sp_otdel, Спасибо всем!