1

ユーザーが選択するチェックボックスのリストがあるとしましょう。

<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 で既にチェックされていることを確認するにはどうすればよいですか?

4

4 に答える 4

2

私が過去に行ったことは、何百行もの肥大化を避けるためにこれです...

最初に、「チェックされた」インスタンスなしで、変数内のすべての 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;
于 2012-04-22T13:21:16.053 に答える
0

私はそこにある条件のすべてのバリエーションを試し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()を使用して、以前に選択されたものを見つけ、対応するボックスをチェック済みとしてレンダリングします。

于 2014-10-17T21:44:49.330 に答える
0

次のようなことができます。

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

(上記の$utilities変数は、$_REQUEST['utilities']コードの構造に応じて、 のようなものの代用です。)

于 2012-04-22T13:01:49.887 に答える
0

そのように?

<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
   }
?>
于 2012-04-22T13:10:07.917 に答える