Как отобразить отмеченные флажки вместе с непроверенными - PullRequest
0 голосов
/ 25 октября 2019

У меня есть 5 флажков, из которых пользователь может выбрать один или несколько вариантов. Выбранные варианты затем обновляются в базе данных. Выбор пользователя затем отображается / просматривается на другой странице. Однако моя проблема в том, что я хочу показать обновленные варианты вместе с невыбранными вариантами при выполнении цикла foreach в PHP.

Это 5 флажков

<input type="checkbox" name="interest[]" value="fishing">Fishing
<input type="checkbox" name="interest[]" value="camping">Camping
<input type="checkbox" name="interest[]" value="hiking">Hiking
<input type="checkbox" name="interest[]" value="swimming">Swimming
<input type="checkbox" name="interest[]" value="running">Running

<br><br>
<input type="submit" name="submit" value="Submit">

Вот код, который обновляет

if (isset($_POST["submit"])) {

 $interestArr = $_POST['interest'];


$interest = new Interest();
$newArr = implode(',', $interestArr);

$interest->updateInterests($id=19, $newArr);

}

Вот код, который отображает

<?php 

 $interest = new Interest();
 $interests = $interest->showInterests($userid=19)->interests;

 $newArr = explode(',', $interests);

 foreach ($newArr as $data) {

 echo '<input type="checkbox" name="interest[]" value="'.$data .'" checked>'.$data;
}

Варианты обновления сохраняютсяпод столбцом интересов в БД, например, так что рыбалка, кемпинг, бег

И цикл foreach отображает их флажок с правильными соответствующими метками.

Как я могу отобразить другие флажки, которые былине выбран только для того, чтобы пользователь мог захотеть внести изменения?

Спасибо.

Ответы [ 3 ]

0 голосов
/ 25 октября 2019

Вот простой пример, иллюстрирующий основную идею. Этот код предназначен для запуска в одном скрипте.

Основные идеи:

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

index.php

<?php
// Keep this outside of the if statement so the form has access to it.
$availableInterests = [
    'fishing',
    'camping',
    'hiking',
    'swimming',
    'running',
];

// Keep this outside of the if statement so the form has access to it.
$selectedInterests = [];

if ($_SERVER['REQUEST_METHOD'] === 'POST') {

    // Cast the posted interests to an array in case the user submitted an empty list. 
    // An empty list would be NULL if we didn't cast it. 
    $selectedInterests = (array)$_POST['interest'];

    // foreach $selectedInterests insert into DB...

    // Let this code `fall through` to render the form again.
    // $selectedInterests is now populated and can be used in to the form below to keep the selected checkboxes checked.
}
?>

<form method="post">

    <!-- Using the `global` $availableInterests array to drive our form. -->
    <? foreach ($availableInterests as $interest): ?>

        <!-- Do we want to render the checkbox as checked? -->
        <?php $checked = (in_array($interest, $selectedInterests)) ? ' checked' : ''; ?>

        <input type="checkbox"
               name="interest[]"
               value="<?php echo $interest; ?>"
            <?php echo $checked; ?>>
        <?php echo ucfirst($interest); ?>

    <?php endforeach; ?>

    <br><br>

    <input type="submit" name="submit" value="Submit">

</form>
0 голосов
/ 25 октября 2019

Чтобы помочь другим, которые могут оказаться в подобной ситуации, я хотел бы опубликовать то, что сейчас является рабочим решением, по крайней мере для меня, на основе вдохновения Мохаммеда Ясин ЧАБЛИ. Вантия, который был первым, кто прокомментировал, действительно помогает мне оценить то, что должно было последовать. Спасибо, ребята.

<?php

  $interest = new Interest();
  $interests = $interest->showInterests($userid=19)->interests;
  $choices = $interest->showInterests($userid=19)->choices;

  $selected = explode(',', $interests);
  $choices = explode(',', $choices);

  foreach ($choices as $choice) {

   if(in_array($choice,$selected )){
        echo '<input type="checkbox" name="interest[]" value="'.$choice .'" 
    checked>'.$choice;

    }else{
     echo '<input type="checkbox" name="interest[]" value="'.$choice .'" 
      unchecked>'.$choice;

    } 
}
0 голосов
/ 25 октября 2019

Предположим, у вас есть массив списков выбора, например:

$choices = ["Fishing", "Camping" , "Hiking","Swimming" , "Running" ]

после того, как пользователь выберет свой выбор

$interests = ["Fishing" , "Running" ];

В вашем случае, основная строка ответа:

$interest = new Interest();
$interests = $interest->showInterests($userid=19)->interests;
$newArr = explode(',', $interests); 

Предположим, что $ newArr равняется $ интересов в мае.

 foreach ($interests as $interest) {
 echo 'you have choose '.$interest.PHP_EOL;
}

В результате:

you have choose Fishing
you have choose Running

Для не выбранных:

$notInterests = array_diff($choices,$interests);

 foreach ($notInterests as $notInterest) {
 echo 'you have not choose '.$notInterest.PHP_EOL;
}

В результате:

you have not choose Camping
you have not choose Hiking
you have not choose Swimming

Для обработки в один цикл:

foreach ($choices as $choice) {

  if(in_array($choice,$interests )){
     echo'you have choose '.$choice.PHP_EOL ;
  }else{
      echo 'you have not choose '.$choice.PHP_EOL;
  }

}

Надеюсь, это поможет вам.

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