Здравствуйте, уважаемые программисты! Подскажите пожалуйста, есть форма - в ней два input chekbox. первый определяет тип сортируемых вещей, второй - подтип. как связать их, чтобы в зависимости от выбранных типов в первом input chekbox - во втором input chekbox выпадали для выбора только соответсвующие подтипы, а не все. вот код HTML: <form method="GET" action="search_filter.php"> <div> <span>ТИПЫ</span> <div overflow:auto> [php]$result = mysql_query("SELECT * FROM type",$db); If (mysql_num_rows($result) > 0) { $row = mysql_fetch_array($result); do { $checked_type = ""; if ($_GET["type"]) } } echo ' <div><input '.$checked_type.' type="checkbox" name="type[]" value="'.$row["id"].'" id="checktype'.$row["id"].'" /><label for="checktype'.$row["id"].'">'.$row["type"].'</label></div> '; } while ($row = mysql_fetch_array($result)); }[/php] </div> </div> <!-- ПОДТИПЫ --> <div> <span>Подтип</span> <div overflow:auto> [php]$result1 = mysql_query("SELECT * FROM podtype WHERE type = '$checked_type'",$db); If (mysql_num_rows($result1) > 0) { $row1 = mysql_fetch_array($result1); do { $checked_podtype = ""; if ($_GET["podtype"]) { if (in_array($row1["id"],$_GET["podtype"])) { $checked_podtype = "checked"; } } echo ' <div><input '.$checked_podtype.' type="checkbox" name="podtype[]" value="'.$row1["id"].'" id="checkbrend'.$row1["id"].'" /><label for="checkbrend'.$row1["id"].'">'. $row1["podtype"].'</label></div> '; } while ($row1 = mysql_fetch_array($result)); }[/php] </div> </div> <center><input type="submit" name="submit" id="submit_s" value="Найти" /></center> </form> Код не срабатывает - во второй input chekbox не отбираются соответствующие данные Заранее спасибо большое!!!
PHP: do { $checked_type = ""; if ($_GET["type"]) } Это что вообще такое ? --- Добавлено --- а то есть в первом все збс ?
MouseZver, простите если мой код плох. я только начал изучать php и БД. PHP: do { $checked_type = ""; if ($_GET["type"]) } по идее хотел сохранять выбранные ранные пользователем значения после перезагрузки страницы --- Добавлено --- MouseZver, часть кода потерял.... --- Добавлено --- Убрал сохранение выбранных в чекбоксах значение при перезагрузке страницы, оставил просто 2 запроса - первый на выдачу значений type в input chekbox из таблицы type PHP: <?php $result = mysql_query("SELECT * FROM type",$db); If (mysql_num_rows($result) > 0) { $row = mysql_fetch_array($result); do { echo ' <div><input type="checkbox" name="type[]" value="'.$row["id"].'" id="checktype'.$row["id"].'" /><label for="checktype'.$row["id"].'">'.$row["type"].'</label></div> '; } while ($row = mysql_fetch_array($result)); } ?> Второй - выбрать из таблицы podtype (в которой также есть поле type) все значения podtype, которые соответсвуют выбранным в первом input chekbox - значениям type Подскажите пожалуйста, что нужно подставить вместо .... при запросе к БД? Как прописать в запрос массив с несколькими значениями одной переменной? PHP: <?php $result1 = mysql_query("SELECT * FROM podtype WHERE .........",$db); If (mysql_num_rows($result1) > 0) { $row1 = mysql_fetch_array($result1); do { echo ' <div><input type="checkbox" name="podtype[]" value="'.$row1["id"].'" id="checkpodtype'.$row1["id"].'" /><label for="checkpodtype'.$row1["id"].'">'.$row1 ["podtype"].'</label></div> '; } while ($row1 = mysql_fetch_array($result1)); } ?> Поиски ответов в поисковиках не помогли(
стоп СТОООООП... вернемся назад...: Давайте голову ну грубя говоря мозги переключим на логическое мышление... и начнем каждую строку разбирать по логике PHP: <?php $result1 = mysql_query("SELECT * FROM podtype WHERE .........",$db); If (mysql_num_rows($result1) > 0) { $row1 = mysql_fetch_array($result1); do { echo ' <div><input type="checkbox" name="podtype[]" value="'.$row1["id"].'" id="checkpodtype'.$row1["id"].'" /><label for="checkpodtype'.$row1["id"].'">'.$row1 ["podtype"].'</label></div> '; } while ($row1 = mysql_fetch_array($result1)); } ?> самое первая строка - объявление что это пхп <?php или еще сокр. <? и не забываем наш документ (скрипт) перевести в UTF-8 без BOM кодировку. Инструмент Notepad++ PHP: $result1 = mysql_query("SELECT * FROM podtype WHERE .........",$db); не буду вдаваться в подробностях, больше дела.. $db ага... то есть данный скрипт наш подгружается еще каким то скриптом include или require(рекомендуемо) и там где - то Бд база с подключением. Окай. запрос есть, правильный. В WHERE допустим выбрать все строки с номером 666 - WHERE cid = '666'. Все у нас выбрались нужные данные. Идем дальше... PHP: if ( mysql_num_rows ( $result1 ) > 0 ) { ... } Можно вовсе !empty ( $result1 ). Проверяем $result1 на кол-во выбранных данных, условие допустит если переменная содержит хоть один массив(строку из таблицы) с данными. У нас есть данные и условие сказало TRUE - допускаем. дальше идет полный бред и чушь... цикл do{ ... }while() забываем - это 90ые, а у нас 2017 while(){ ... } https://php.ru/manual/control-structures.while.html PHP: while ( $row1 = mysql_fetch_array ( $result1 ) ) { printf ( '<div><input type = "checkbox" name = "podtype[]" value = "%s" id = "checkpodtype%s" /><label for = "checkpodtype%s">%s</label></div>', $row1['id'], $row1['id'], $row1['id'], $row1['podtype'] ); } https://php.ru/manual/function.printf.html И самая последняя строка у вас ?> - Это не нужно делать если у вас дальше нету html кода, у нас чистый пхп скрипт. В итоге : PHP: <? $result1 = mysql_query ( "SELECT * FROM podtype WHERE .........", $db ); if ( mysql_num_rows ( $result1 ) > 0 ) { while ( $row1 = mysql_fetch_array ( $result1 ) ) { printf ( '<div><input type = "checkbox" name = "podtype[]" value = "%s" id = "checkpodtype%s" /><label for = "checkpodtype%s">%s</label></div>', $row1['id'], $row1['id'], $row1['id'], $row1['podtype'] ); } } А да - в конце, как гласит стандарт, оставляем одну пустую строчку.
MouseZver, спасибо большое, по структуре Вас понял - буду изучать. А по запросу к БД - что прописать в условиях вместо ... - пока не понял Пробовал задать в условия массив значений переменной. Не сработало. Прописал проверку ..... } else {echo 'не извлечены из БД подтипы с данными условиями';} и получаю как раз это сообщение ...'не извлечены из БД подтипы с данными условиями' То есть получается выбранные значения чекбоксов не попали в глобальный массив GET ? PHP: <?php if(!empty($_GET['type'])) { $types = array(); foreach($_GET['type'] as $type) $types[] = "'".mysql_real_escape_string($type)."'"; $result1 = mysql_query("SELECT * FROM podtype WHERE type IN (".implode(", ", $types).")",$db); If (mysql_num_rows($result1) > 0) { while ( $row1 = mysql_fetch_array ( $result1 ) ) { printf ( '<div><input type = "checkbox" name = "podtype[]" value = "%s" id = "checkpodtype%s" /><label for = "checkpodtype%s">%s</label></div>', $row1['id'], $row1['id'], $row1['id'], $row1['podtype'] ); } } else {echo 'не извлечены из БД подтипы с данными условиями';} Спасибо большое!!!