私はそこにある条件のすべてのバリエーションを試しin_array
ましたが、これを機能させることはできませんでした(値が以前に選択され、データベースに挿入されたチェックボックスをオフにしました)。テーブル結合を使用して複雑なクエリを試しましたが、それもうまくいきませんでした。私は最終的にあきらめてdisplay:hidden
div
、配列を開く を生成し (何らかの奇妙な理由で、爆発するのではなく IMPLODE しなければなりませんでした)、その項目をコンマ区切りのテキストとしてリストしました。indexOf()
次に、各チェックボックスの値が上記の配列の一部であるかどうかを判断するために、小さな jQueryマジックを投入しました。jQueryでこれを行うのに10分かかりました。非常に簡単です。
ライブで正常に動作するサンプルコードを次に示します。
<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
これが、なぜ条件が失敗するのか疑問に思っている他の誰かの助けになることを願っています. これは、データの永続性に関して、データと UI の間のトワイライト ゾーンにあるため、正当な方法だと思います。複数のチェックボックスを生成する「echo」ステートメントが 1 つあります (私の状況では約 40 のカテゴリがあります)。次に、単純な jQuery.each()
を使用して、以前に選択されたものを見つけ、対応するボックスをチェック済みとしてレンダリングします。