За последние 24 часа нас посетили 73922 программиста и 10166 роботов. Сейчас ищет 2691 программист ...

Связать 2 input chekbox - в зависимости от выбранных значений в первом, выводить соответст. значения

Тема в разделе "PHP для новичков", создана пользователем antlantis, 8 мар 2017.

  1. antlantis

    antlantis Новичок

    С нами с:
    8 мар 2017
    Сообщения:
    3
    Симпатии:
    0
    Здравствуйте, уважаемые программисты!

    Подскажите пожалуйста, есть форма - в ней два input chekbox. первый определяет тип сортируемых вещей, второй - подтип.

    как связать их, чтобы в зависимости от выбранных типов в первом input chekbox - во втором input chekbox выпадали для выбора только соответсвующие подтипы, а не все.


    вот код
    HTML:
    1.  
    2.  
    3. <form method="GET" action="search_filter.php">
    4. <div>
    5. <span>ТИПЫ</span>
    6. <div overflow:auto>
    7.  
    8. [php]$result = mysql_query("SELECT * FROM type",$db);
    9. If (mysql_num_rows($result) > 0)
    10. {
    11.  $row = mysql_fetch_array($result);
    12.  do
    13.  {
    14.  $checked_type = "";
    15.  if ($_GET["type"])
    16.  }
    17. }
    18. echo '
    19. <div><input '.$checked_type.' type="checkbox" name="type[]" value="'.$row["id"].'" id="checktype'.$row["id"].'" /><label for="checktype'.$row["id"].'">'.$row["type"].'</label></div>
    20. ';
    21. }
    22. while ($row = mysql_fetch_array($result));  
    23. }[/php]
    24. </div>
    25. </div>
    26.  
    27.  
    28.  
    29.  
    30. <!-- ПОДТИПЫ -->
    31. <div>
    32. <span>Подтип</span>
    33. <div overflow:auto>
    34.  
    35. [php]$result1 = mysql_query("SELECT * FROM podtype WHERE type = '$checked_type'",$db);
    36.  
    37. If (mysql_num_rows($result1) > 0)
    38. {
    39. $row1 = mysql_fetch_array($result1);
    40. do
    41. {
    42. $checked_podtype = "";
    43. if ($_GET["podtype"])
    44. {
    45. if (in_array($row1["id"],$_GET["podtype"]))
    46. {
    47. $checked_podtype = "checked";
    48. }
    49. }
    50. echo '
    51. <div><input '.$checked_podtype.' type="checkbox" name="podtype[]" value="'.$row1["id"].'" id="checkbrend'.$row1["id"].'" /><label for="checkbrend'.$row1["id"].'">'.
    52.  
    53. $row1["podtype"].'</label></div>
    54. ';
    55. }
    56. while ($row1 = mysql_fetch_array($result));  
    57. }[/php]
    58. </div>
    59. </div>
    60.  
    61. <center><input type="submit" name="submit" id="submit_s" value="Найти" /></center>
    62. </form>
    63.  
    64.  

    Код не срабатывает - во второй input chekbox не отбираются соответствующие данные

    Заранее спасибо большое!!!
     
  2. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.843
    Симпатии:
    1.338
    Адрес:
    Лень
    PHP:
    1. do
    2. {
    3. $checked_type = "";
    4. if ($_GET["type"])
    5. }
    Это что вообще такое ? :D
    --- Добавлено ---
    а то есть в первом все збс ? :D
     
  3. mkramer

    mkramer Суперстар
    Команда форума Модератор

    С нами с:
    20 июн 2012
    Сообщения:
    8.497
    Симпатии:
    1.726
    Это не для php задача, а для javascript. Код бредовый и сточки зрения HTML, и с точки зрения PHP
     
  4. antlantis

    antlantis Новичок

    С нами с:
    8 мар 2017
    Сообщения:
    3
    Симпатии:
    0
    MouseZver, простите если мой код плох. я только начал изучать php и БД.

    PHP:
    1. do
    2. {
    3. $checked_type = "";
    4. if ($_GET["type"])
    5. }
    по идее хотел сохранять выбранные ранные пользователем значения после перезагрузки страницы
    --- Добавлено ---
    MouseZver, часть кода потерял....
    --- Добавлено ---
    Убрал сохранение выбранных в чекбоксах значение при перезагрузке страницы, оставил просто 2 запроса - первый на выдачу значений type в input chekbox из таблицы type


    PHP:
    1. <?php
    2. $result = mysql_query("SELECT * FROM type",$db);
    3. If (mysql_num_rows($result) > 0)
    4. {
    5. $row = mysql_fetch_array($result);
    6. do
    7. {
    8. echo '
    9. <div><input type="checkbox" name="type[]" value="'.$row["id"].'" id="checktype'.$row["id"].'" /><label for="checktype'.$row["id"].'">'.$row["type"].'</label></div>
    10. ';
    11. }
    12. while ($row = mysql_fetch_array($result));
    13. }
    14. ?>
    Второй - выбрать из таблицы podtype (в которой также есть поле type) все значения podtype, которые соответсвуют выбранным в первом input chekbox - значениям type

    Подскажите пожалуйста, что нужно подставить вместо .... при запросе к БД?
    Как прописать в запрос массив с несколькими значениями одной переменной?



    PHP:
    1. <?php
    2. $result1 = mysql_query("SELECT * FROM podtype WHERE .........",$db);
    3.  
    4. If (mysql_num_rows($result1) > 0)
    5. {
    6. $row1 = mysql_fetch_array($result1);
    7. do
    8. {
    9. echo '
    10. <div><input type="checkbox" name="podtype[]" value="'.$row1["id"].'" id="checkpodtype'.$row1["id"].'" /><label for="checkpodtype'.$row1["id"].'">'.$row1
    11.  
    12. ["podtype"].'</label></div>
    13. ';
    14. }
    15. while ($row1 = mysql_fetch_array($result1));
    16. }
    17. ?>
    Поиски ответов в поисковиках не помогли(
     
    #4 antlantis, 8 мар 2017
    Последнее редактирование модератором: 8 мар 2017
  5. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.843
    Симпатии:
    1.338
    Адрес:
    Лень
    стоп СТОООООП...
    вернемся назад...:
    Давайте голову ну грубя говоря мозги переключим на логическое мышление... и начнем каждую строку разбирать по логике

    PHP:
    1. <?php
    2. $result1 = mysql_query("SELECT * FROM podtype WHERE .........",$db);
    3. If (mysql_num_rows($result1) > 0)
    4. {
    5. $row1 = mysql_fetch_array($result1);
    6. do
    7. {
    8. echo '
    9. <div><input type="checkbox" name="podtype[]" value="'.$row1["id"].'" id="checkpodtype'.$row1["id"].'" /><label for="checkpodtype'.$row1["id"].'">'.$row1
    10. ["podtype"].'</label></div>
    11. ';
    12. }
    13. while ($row1 = mysql_fetch_array($result1));
    14. }
    15. ?>
    1. самое первая строка - объявление что это пхп <?php или еще сокр. <? и не забываем наш документ (скрипт) перевести в UTF-8 без BOM кодировку. Инструмент Notepad++
    2. PHP:
      1. $result1 = mysql_query("SELECT * FROM podtype WHERE .........",$db);
      не буду вдаваться в подробностях, больше дела.. $db ага... то есть данный скрипт наш подгружается еще каким то скриптом include или require(рекомендуемо) и там где - то Бд база с подключением. Окай. запрос есть, правильный. В WHERE допустим выбрать все строки с номером 666 - WHERE cid = '666'. Все у нас выбрались нужные данные. Идем дальше...
    3. PHP:
      1. if ( mysql_num_rows ( $result1 ) > 0 ) { ... }
      Можно вовсе !empty ( $result1 ). Проверяем $result1 на кол-во выбранных данных, условие допустит если переменная содержит хоть один массив(строку из таблицы) с данными. У нас есть данные и условие сказало TRUE - допускаем.
    4. дальше идет полный бред и чушь... цикл do{ ... }while() забываем - это 90ые, а у нас 2017 while(){ ... } https://php.ru/manual/control-structures.while.html
      PHP:
      1. while ( $row1 = mysql_fetch_array ( $result1 ) )
      2. {
      3.     printf ( '<div><input type = "checkbox" name = "podtype[]" value = "%s" id = "checkpodtype%s" /><label for = "checkpodtype%s">%s</label></div>',
      4.         $row1['id'],
      5.         $row1['id'],
      6.         $row1['id'],
      7.         $row1['podtype']
      8.     );
      9. }
      https://php.ru/manual/function.printf.html
    5. И самая последняя строка у вас ?> - Это не нужно делать если у вас дальше нету html кода, у нас чистый пхп скрипт.
    В итоге :
    PHP:
    1. <?
    2.  
    3. $result1 = mysql_query ( "SELECT * FROM podtype WHERE .........", $db );
    4.  
    5. if ( mysql_num_rows ( $result1 ) > 0 )
    6. {
    7.     while ( $row1 = mysql_fetch_array ( $result1 ) )
    8.     {
    9.         printf ( '<div><input type = "checkbox" name = "podtype[]" value = "%s" id = "checkpodtype%s" /><label for = "checkpodtype%s">%s</label></div>',
    10.             $row1['id'],
    11.             $row1['id'],
    12.             $row1['id'],
    13.             $row1['podtype']
    14.         );
    15.     }
    16. }
    А да - в конце, как гласит стандарт, оставляем одну пустую строчку.
     
    denis01 нравится это.
  6. antlantis

    antlantis Новичок

    С нами с:
    8 мар 2017
    Сообщения:
    3
    Симпатии:
    0
    MouseZver, спасибо большое, по структуре Вас понял - буду изучать.

    А по запросу к БД - что прописать в условиях вместо ... - пока не понял

    Пробовал задать в условия массив значений переменной. Не сработало.

    Прописал проверку .....
    }
    else {echo 'не извлечены из БД подтипы с данными условиями';}

    и получаю как раз это сообщение ...'не извлечены из БД подтипы с данными условиями'

    То есть получается выбранные значения чекбоксов не попали в глобальный массив GET ?



    PHP:
    1. <?php
    2.  
    3. if(!empty($_GET['type']))
    4. {
    5.      $types = array();
    6.      foreach($_GET['type'] as $type)
    7.      $types[] = "'".mysql_real_escape_string($type)."'";
    8.  
    9.  
    10.      $result1 = mysql_query("SELECT * FROM podtype WHERE type IN (".implode(", ", $types).")",$db);
    11.      If (mysql_num_rows($result1) > 0)
    12.      {
    13.    
    14.         while ( $row1 = mysql_fetch_array ( $result1 ) )
    15.        {
    16.            printf ( '<div><input type = "checkbox" name = "podtype[]" value = "%s" id = "checkpodtype%s" /><label for =
    17.           "checkpodtype%s">%s</label></div>',
    18.             $row1['id'],
    19.             $row1['id'],
    20.             $row1['id'],
    21.             $row1['podtype']
    22.         );
    23.     }
    24. }
    25. else {echo 'не извлечены из БД подтипы с данными условиями';}



    Спасибо большое!!!
     
    #6 antlantis, 8 мар 2017
    Последнее редактирование модератором: 9 мар 2017