在PHP中更新已经检查过的复选框

时间:2012-04-22 12:55:59

标签: php mysql checkbox

假设我有一个用户选择的复选框列表。

<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...

用户选择了Water并将其添加到数据库中。现在用户想要更新列表:

<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 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

你可以这样做:

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

(上面的$utilities变量是$_REQUEST['utilities']之类的替代品,具体取决于您的代码的结构。)

答案 2 :(得分: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
   }
?>

答案 3 :(得分:0)

我尝试了in_array条件的每个变体,并且永远不会让它工作(检查其值已经被选中并因此插入数据库的复选框)。我尝试使用表连接的复杂查询,也没有运气。我终于放弃并生成了一个打开数组的display:hidden div(由于一些奇怪的原因我不得不IMPLODE而不是爆炸)并将其项目列为逗号分隔文本。然后我扔了一个小jQuery indexOf()魔法来确定每个复选框的值是否是所述数组的一部分。用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”语句来生成多个复选框(在我的情况下大约有40个类别)然后是一个简单的jQuery .each()来定位之前选择的内容并将其对应的框渲染为已选中。