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

你可以这样做:

<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 回答
0

我尝试了in_array条件的所有变体,但永远无法让它工作(检查其值先前已被选中并因此插入数据库的复选框)。我尝试使用表连接进行复杂查询,但也没有运气。我最终放弃并生成了一个display:hidden div打开数组(出于某种奇怪的原因,我不得不 IMPLODE 而不是爆炸)并将其项目列为逗号分隔的文本。然后我加入了一点 jQueryindexOf()魔法来确定每个复选框的值是否是所述数组的一部分。用 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 之间关于数据持久性的暮光之城,我认为这是一条合法的路线。您有一个“回声”语句来生成多个复选框(在我这里有大约 40 个类别),然后是一个简单的 jQuery.each()来定位之前选择的内容并将其对应的框呈现为选中状态。

于 2014-10-17T21:44:49.330 回答