Флажки, использующие отношение многие ко многим php - PullRequest
0 голосов
/ 14 марта 2020

Я пытаюсь создать форму администратора, которая позволяет пользователям выбирать свои требования и сохранять их в БД, используя отношение «многие ко многим». Я могу сгенерировать элементы формы, используя приведенное ниже значение, в то время как l oop и отправить их

while ($rows = $equipresults->fetch()) {
$eqid = $rows['req_id'];
$eqname = $rows['requirement'];
echo "
<label class='checkbox'>
<input type='checkbox' name='requirement[]' value='$eqid'> $eqname 
</label><br>
";}

Приведенный выше код выдает следующее: enter image description here

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

Итак, мой вопрос: как я могу написать al oop, который позволяет мне отображать флажки как проверенные в виде массива, как показано ниже?

    $equipresult = array ( 
[0] => Array ( [artistid] => 2 [req_id] => 1 [requirement] => Microphone ) 
[1] => Array ( [artistid] => [req_id] => 2 [requirement] => Table ) 
[2] => Array ( [artistid] => 2 [req_id] => 3 [requirement] => Chair ) 
[3] => Array ( [artistid] => [req_id] => 4 [requirement] => Microphone Stand ) 
[4] => Array ( [artistid] => [req_id] => 5 [requirement] => Personal Artifacts ) 
[5] => Array ( [artistid] => [req_id] => 6 [requirement] => Set Dressing ) 
[6] => Array ( [artistid] => [req_id] => 7 [requirement] => Raised Step )
[7] => Array ( [artistid] => [req_id] => 8 [requirement] => Other ) ) 

Я пытаюсь отобразить нижеприведенное, основываясь на приведенном выше массиве

enter image description here

Я играл с foreach l oop, но мне просто не удается установить флажки. Как мне l oop через вышеуказанный массив и, если artistid = 2, показать это как «проверено» в html, когда foreach l oop генерирует

$req=explode(",",$rows['requirement']);

if (!empty($equipresult)) {
    foreach ($equipresult as $row) {
      $checked = (in_array($row, $req)) ? 'checked="checked"' : '';
  ?>
            <label class='checkbox'>
                <input type="checkbox" name="requirement[]" value="<?php echo $row;?>"
                    <?php $checked;?>><?php echo implode(", ", $row);?>
            </label><br>
            <?php

}
}
?>

В конечном счете, я пытаясь избежать жесткого кодирования html. Любое руководство здесь будет очень цениться. Я также уверен, что, возможно, есть действительно простой способ сделать это.

Ответы [ 2 ]

1 голос
/ 14 марта 2020

Пример:

<?php
$options =  [
    ["artistid" => 1,  "req_id" => 1,  "requirement" => "Microphone"],
    ["artistid" => 1,  "req_id" => 2,  "requirement" => "Table"],
    ["artistid" => 1,  "req_id" => 3,  "requirement" => "Chair"],
    ["artistid" => 1,  "req_id" => 4,  "requirement" => "Microphone Stand "],
    ["artistid" => 1,  "req_id" => 5,  "requirement" => "Personal Artifacts"],
    ["artistid" => 1,  "req_id" => 6,  "requirement" => "Set Dressing"],
    ["artistid" => 1,  "req_id" => 7,  "requirement" => "Raised Step "]
];
$checkedOptions = [2, 7];

foreach ($options as $option) {
    ?>
    <label class='checkbox'>
        <input type="checkbox" name="requirement[]" value="<?= $option['req_id']?>" <?= in_array($option['req_id'], $checkedOptions)  ? 'checked' : '' ?> >
           <?= $option['requirement'] ?>
    </label>
            <br>
<?php
    }
?>
0 голосов
/ 14 марта 2020

Вам нужен условный оператор, чтобы увидеть, установлена ​​ли для переменной имя вашего поля ввода, которое исходит из массива $_POST[] или $row[], и, если установлено, выводить атрибут checked в поле ввода. То же самое нужно сделать с атрибутом value, если вы динамически создаете свой входной список.

<input type='checkbox' name='microphone' value='$eqid' <?php if($eqname === "microphone"){ echo 'checked'; }> 
<input type='checkbox' name='table' value='$eqid' <?php if($eqname === "table"){ echo 'checked'; }> 
<input type='checkbox' name='chair' value='$eqid' <?php if($eqname === "chair"){ echo 'checked'; }>
<input type='checkbox' name='microphone_stand' value='$eqid' <?php if($eqname === "microphone_stand"){ echo 'checked'; }> 
<input type='checkbox' name='personal_artifacts' value='$eqid' <?php if($eqname === "personal_artifacts"){ echo 'checked'; }> 
<input type='checkbox' name='set_dressing' value='$eqid' <?php if($eqname === "set_dressing"){ echo 'checked'; }>    
<input type='checkbox' name='raised_step' value='$eqid' <?php if($eqname === "raised_step"){ echo 'checked'; }> 
<input type='checkbox' name='other' value='$eqid' <?php if($eqname === "other"){ echo 'checked'; }>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...