Обновление проверенных флажков в PHP

допустим, у меня есть список флажков, которые выбирает пользователь.

<input type="checkbox" name="utility[]" id="utility[]" value="Water" />Water<br /> <input type="checkbox" name="utility[]" id="utility[]" value="Cable" />Cable<br /> <input type="checkbox" name="utility[]" id="utility[]" value="Electricity" />Electricity<br /> etc... 

Пользователь выбрал «Вода» и добавлен в базу данных. Теперь пользователь хочет обновить список:

 <input type="checkbox" name="utility[]" id="utility[]" value="Water" checked="checked"/>Water<br /> <input type="checkbox" name="utility[]" id="utility[]" value="Cable" />Cable<br /> <input type="checkbox" name="utility[]" id="utility[]" value="Electricity" />Electricity<br /> etc... 

Как я могу проверить, что утилита уже была проверена на PHP?

Related of "Обновление проверенных флажков в PHP"

То, что я делал в прошлом, чтобы сохранить сотни линий раздувания, это …

Сначала скомпилируйте весь html в переменной, без каких-либо «проверенных» экземпляров.

 $boxes = ''; $boxes .= '<input type="checkbox" name="utility[]" id="utility[]" value="Water" />Water<br />'; $boxes .= '<input type="checkbox" name="utility[]" id="utility[]" value="Cable" />Cable<br />'; $boxes .= '<input type="checkbox" name="utility[]" id="utility[]" value="Electricity" />Electricity<br />'; 

Теперь я проверяю ваш массив полей. Я также предоставил образец массива.

 $already_checked = array('Water', 'Electricity'); foreach( $already_checked as $ac ) { $find = 'value="' . $ac . '"'; $replace = $find . ' checked="checked"'; $boxes = str_replace($find, $replace, $boxes); } echo $boxes; 

Вы могли бы сделать что-то вроде этого:

 <input type="checkbox" name="utility[]" value="Water" <?= in_array('Water', $utilities) ? 'checked="checked"' : '' ?>" /> 

(Переменная $utilities приведенная выше, представляет собой резерв для чего-то вроде $_REQUEST['utilities'] , в зависимости от того, как структурирован ваш код.)

Как это?

 <input type="checkbox" name="utility[]" id="utility[]" value="Water" <?php if(isAlreadyChecked("Water")) echo "checked=\"checked\"" ?> />Water<br /> <?php function isAlreadyChecked(value) { //Check if it is already checked and return a boolean } ?> 

Я пробовал каждый из вариантов in_array и там НИКОГДА не мог заставить это работать (проверяя флажки, значения которых были предварительно выбраны и, таким образом, вставлены в базу данных). Я пробовал сложные запросы со стыками таблиц и не везет с этим. Я, наконец, сдался и создал display:hidden div который открыл массив (который по какой-то нечетной причине я должен был IMPLODE, а не взорваться) и перечислил его элементы как текст, разделенный запятыми. Затем я бросил небольшую indexOf() jQuery indexOf() чтобы определить, является ли значение каждого флажка частью указанного массива или нет. Взял мне 10 минут, чтобы сделать это с помощью jQuery, очень просто.

Вот пример кода, который хорошо работает и работает:

 <div class="categories"> <span class="keywords"><?php $categories = array(); $categories = implode(', ', $keywords); echo $categories ?></span> <em>Please verify category selections with each update.</em><br/> <?php include 'db.php'; $sql = mysqli_query($con,"SELECT * FROM categoriesTable ORDER BY Category_Name ASC"); while ($row = mysqli_fetch_assoc($sql)) { $key = urldecode($row['Category_Name']); $id = urlencode($row['catID']); echo "<input type='checkbox' name='Category_Key[]' value='$id' id='cat_$id' $chk> $key<br/>"; } ?> </div> 

CSS устанавливает, что div невидимым:

 .keywords { display:none; visibility:hidden; } 

и часть jQuery:

 $(document).ready(function() { $('.categories input').each(function(index,data) { var str=$('.keywords').text(); var catid = $(this).val(); var chk = str.indexOf(catid); if (chk >= 0) { $(this).prop('checked', true); } }); }); 

Надеюсь, это поможет кому-то еще, кто застрял, задаваясь вопросом, почему условие in_array не позволяет им. Поскольку это попадает в сумеречную зону между данными и пользовательским интерфейсом относительно сохранения данных, я думаю, что это законный маршрут. У вас есть одно выражение «эхо» для создания нескольких .each() в моей ситуации около 40 категорий), а затем простой jQuery .each() чтобы найти то, что было выбрано до этого, и отобразить соответствующие соответствующие поля.