Форма с флажками, получая все отмеченные флажки - PullRequest
0 голосов
/ 11 марта 2019

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

У меня есть следующая форма:

<form method="post" action="<?php echo ROOT ?>HomeController/createTournament/" enctype="multipart/form-data">
 <div class="form-group">
        <label for="participants">Select participants</label><br>
            <?php foreach($players as $p): ?>
                <input type="checkbox" name="participants" value="<?php echo $p['name'];?>"> <?php echo $p['name'];?><br>
            <?php endforeach; ?>
    </div>
    <button type="submit" class="btn btn-primary btn-block" name="create">Show participants</button>
</form>

В этой форме отображается флажок, а за флажком - имя участника.

Это мой метод:

 public function createTournament() {
    if(isset($_POST["create"])) {
        $participants = $_POST['participants'];
    } 
    include('app/views/showTournament.php');
}

Это означает, что я сохраняю отмеченные в $ участники, верно?

В файле showTournament у меня есть доступ к $ partipants. Я пытаюсь var_dump $ partpants, и он показывает мне:

string(6) "Onlyoneselected name"

Итак, я попробовал foreach, чтобы получить ВСЕ выбранные имена.

 <?php 
foreach($participants as $p) {
    echo $p;
}
;?>

В foreach ничего не отображается, но файл имеет доступ к $ участникам. Мне нужны все имена на моем экране, чтобы я мог начать их рандомизировать. Что я делаю не так?

Ответы [ 2 ]

4 голосов
/ 11 марта 2019
<input type="checkbox" name="participants"

Эта строка является корнем ваших проблем.

Поскольку каждый флажок имеет одно и то же имя, значение $_POST['participants'] переопределяется для каждого флажка в списке.

Если вы измените этот фрагмент на:

<input type="checkbox" name="participants[]"

, тогда $_POST['participants'] станет массивом всех проверенных значений.

1 голос
/ 11 марта 2019

Вам нужно несколько значений флажка.

И, следовательно, HTML-имя ввода должно быть кратным (массив)

<input type="checkbox" name="participants" вернет строку, только последнее переданное значение.

<input type="checkbox" name="participants[]" вернет массив всех отправленных значений.

Итак, замена name="participants" на name="participants[]" будет работать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...