За последние 24 часа нас посетили 15742 программиста и 1666 роботов. Сейчас ищут 825 программистов ...

Array + вывод нужных значений в <option>

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

  1. HolodZhe

    HolodZhe Новичок

    С нами с:
    23 авг 2016
    Сообщения:
    57
    Симпатии:
    1
    Здравствуйте. Уже не знаю сколько мучаюсь, но возникла жесткая проблема, есть массив, который выводится из базы:
    PHP:
    1. (
    2.     [0] => Array ( [game_id] => 1 [game_min_slots] => 20 [game_max_slots] => 100 )
    3.     [0] => Array ( [game_id] => 2 [game_min_slots] => 6 [game_max_slots] => 32 )
    4. )
    В принципе, половина переменных убрана, т.к. они не нужны, и вот что тут есть: game_id - ид игры, и следующие два поля минимальное и максимальное кол-во слотов для данного гейм-ида.

    Еще чуть объяснений..
    Вот поле, где выбирается сама игра:
    [​IMG]
    Вот как выглядит код, этой самой выборки:
    PHP:
    1. <label for="game" class="col-sm-2 control-label">Игра:</label>
    2. <div class="col-sm-3">
    3.     <select class="form-control" id="gameid" name="gameid" onChange="updateForm()">
    4.         <?php foreach($games as $item): ?>
    5.             <option value="<?php echo $item['game_id'] ?>"><?php echo $item['game_name'] ?></option>
    6.         <?php endforeach; ?>
    7.     </select>
    8. </div>
    И нужно чтобы в поле "Слотов" (см. скриншот выше), выводилось нужное кол-во слотов. Например, если я в поле выбрал SAMP, то в поле "Слотов", должен появиться выбор от 20 до 100 (game_min_slots и game_max_slots), если я выберу например CS GO, то в поле "Слотов" должна быть выборка, от 6 до 32...

    Не знаю, доходчиво ли объяснил (скорее всего нет :(), если кто меня поймет, прошу помочь, ибо уже реально 3 час сижу, и никак не могу вывести...
    --- Добавлено ---
    Если сделать например так:
    PHP:
    1. <select class="form-control" id="slots" name="slots" onChange="updateForm()">
    2.     <?php foreach($games as $item): ?>                                          
    3.         <?php for($i = $item['game_min_slots']; $i <= $item['game_max_slots']; $i++): ?>
    4.             <option value="<?php echo $i ?>"><?php echo $i ?></option>
    5.         <?php endfor; ?>
    6.     <?php endforeach; ?>
    7. </select>
    Тогда в поле "Слотов", в саму выборку выходит Слоты от 20 до 100 (первая игра) И СРАЗУ ЗА НЕЙ ЖЕ слоты 6 и до 32 (вторая игра), но мне нужно как то узнать, что я выбрал в пункте "Игра" и ссылаясь на это, уже как то выводить нужный промежуток слотов (от game_min_slots до game_max_slots)
    [​IMG]

    На этом скриншоте показано, что получилось. Если у меня выбрана игра SAMP (game_id 1), то должно вывести от 20 до 100 (до зеленой черты), а если игра CS:GO (game_id 2), то должно вывести от 6 до 32 (от зеленой черты)
     
    #1 HolodZhe, 15 май 2017
    Последнее редактирование: 15 май 2017
  2. HolodZhe

    HolodZhe Новичок

    С нами с:
    23 авг 2016
    Сообщения:
    57
    Симпатии:
    1
    Видимо никто, ничего не понял, эхж(
     
  3. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
  4. MouseZver

    MouseZver Суперстар

    С нами с:
    1 апр 2013
    Сообщения:
    7.819
    Симпатии:
    1.333
    Адрес:
    Лень
    js все делает, php лишь JSON инфу загоняет и по ней парсит ПОСЛЕ выборки игры
     
  5. rishard

    rishard Новичок

    С нами с:
    20 сен 2016
    Сообщения:
    228
    Симпатии:
    27
    Не присмотреться ли вам к связанным селектам, реализуемым на уровне js, коли уж прозвучало процитированное условие? Попробуйте, всяко новые знания на пользу. Самое простое и удобное, что я нашел в свое время в контексте решения этой задачи - это jquery.chained.min.js , отличная штука:

    Код (Javascript):
    1. /*! Chained 1.0.0 - MIT license - Copyright 2010-2014 Mika Tuupola */
    2. !function(a,b){"use strict";a.fn.chained=function(c){return this.each(function(){function d(){var d=!0,g=a("option:selected",e).val();a(e).html(f.html());var h="";a(c).each(function(){var c=a("option:selected",this).val();c&&(h.length>0&&(h+=b.Zepto?"\\\\":"\\"),h+=c)});var i;i=a.isArray(c)?a(c[0]).first():a(c).first();var j=a("option:selected",i).val();a("option",e).each(function(){a(this).hasClass(h)&&a(this).val()===g?(a(this).prop("selected",!0),d=!1):a(this).hasClass(h)||a(this).hasClass(j)||""===a(this).val()||a(this).remove()}),1===a("option",e).size()&&""===a(e).val()?a(e).prop("disabled",!0):a(e).prop("disabled",!1),d&&a(e).trigger("change")}var e=this,f=a(e).clone();a(c).each(function(){a(this).bind("change",function(){d()}),a("option:selected",this).length||a("option",this).first().attr("selected","selected"),d()})})},a.fn.chainedTo=a.fn.chained,a.fn.chained.defaults={}}(window.jQuery||window.Zepto,window,document);
    Соответственно, решение задачи, в чем-то аналогичной вашей, выглядело у меня следующим образом, довольно компактно (for example):

    Код (Text):
    1. <script src="jquery.min.js"></script>
    2. <script src="jquery.chained.min.js"></script>
    3.  
    4. <select id="town" name="town">
    5.     <option value="">--</option>
    6.     <?foreach($mailSettings->getAllCyties() as $city){?>
    7.         <option value="<?=preg_replace('/[^\w\d]/iu', '_', $city)?>"><?=$city?></option>
    8.     <?}
    9. ?>
    10. </select>
    11. <select id="vac" name="vac">
    12.     <option value="">--</option>
    13. <?foreach($mailSettings->getAllVacanciesByCity() as $city => $vacancies){
    14.     foreach ($vacancies as $vacancy){?>
    15.         <option value="<?=htmlentities($vacancy)?>" class="<?=preg_replace('/[^\w\d]/iu', '_', $city)?>"><?=$vacancy?></option>
    16.     <?}
    17. }?>
    18. </select>
    19.  
    20. <script>
    21. $("#vac").chained("#town");
    22. </script>

    Оф. сайт js-плагина с примерами: http://appelsiini.net/projects/chained/ .