【问题标题】:PHP Repeating Region and CheckboxesPHP 重复区域和复选框
【发布时间】:2009-04-23 15:57:36
【问题描述】:

--为清晰起见进行了编辑。

数据库:

tblModule,包含可以启用或禁用的模块列表。 tblData,包含信任列表和它们启用的模块。这链接到 tblData.M01 = tblModule.mod_key

上的 tblModule

从索引页面访问 PHP 页面并将变量 lstModTrust 传递给该页面,以限制从 tblData 返回的记录为单一信任。 tblData.trust_key

运行一个查询,qryModuleList 返回所有模块的列表。这用于生成所有可用模块的表。每行显示模块名称 tblModules.mod_name模块代码 tblModules.mod_code 和一个复选框。

qryModData 将返回为单一信任启用的模块列表,需要在表格中勾选相应的复选框。

然后,此页面将用于启用和禁用信任的模块。如果一个模块未勾选,则该条目将从 tblData 中删除,如果勾选,则插入一个条目,如果没有更改,则数据库中没有更改。

目前我无法根据 qryModData

正确勾选复选框

有什么想法吗?

--已编辑以包含代码--

<table width="50%" border="0" cellspacing="0" cellpadding="0">
    <tr>
        <td>Module</td>
        <td>Module Code</td>
        <td>&nbsp;</td>
    </tr>
    <?php do { ?>
    <tr>
        <td><?php echo $row_qryModuleList['mod_name']; ?></td>
        <td><?php echo $row_qryModuleList['mod_code']; ?></td>
        <td><input <?php if (!(strcmp($row_qryModData['M01'],$row_qryModuleList['mod_code']))) {echo "checked=\"checked\"";} ?>name="chkMod" type="checkbox" id="chkMod" value="<?php echo $row_qryModData['M01']; ?>" /></td>

    </tr>
    <?php } while ($row_qryModuleList = mysql_fetch_assoc($qryModuleList)); ?>
</table>

然后有两个 SQL 查询,一个生成用于构建表的列表,第二个我试图使用它来设置复选框。

qryModuleList
SELECT *
FROM tblmodules
ORDER BY mod_name ASC

qryModData
SELECT *
FROM tbldata
WHERE trust_key = varTrust

varTrust 是从 URL 变量中提取的。

很抱歉一开始没有包含代码。

--编辑新代码。

<?php while ($row_qryModuleList = mysql_fetch_assoc($qryModuleList)) { ?> 
    <tr>
        <td><?php echo $row_qryModuleList['mod_name']; ?></td>
        <td><?php echo $row_qryModuleList['mod_code']; ?></td>
        <td><input <?php if (strcmp($row_qryModData['M01'],$row_qryModuleList['mod_key']) != 0) {echo "checked=\"checked\"";} ?>name="chkMod" type="checkbox" id="chkMod" value="<?php echo $row_qryModData['M01']; ?>" /></td>

    </tr>
<?php } ; ?>

--为新代码编辑。

<tr class="tblHead">
    <td>Module</td>
    <td>Module Code</td>
    <td>Enabled\Disabled</td>
</tr>

<?php
$mod_data = array();
while ($row_qryModData = mysql_fetch_assoc($qryModData))
    array_push($mod_data, $row_qryModData['M01']);
$currentRow = 0;
while ($row_qryModuleList = mysql_fetch_assoc($qryModuleList)) {
?>
    <tr bgcolor="<?php echo($currentRow++ % 2)?"#CCFFFF":"#FFCCFF";?>">
        <td><?php echo $row_qryModuleList['mod_name']; ?></td>
        <td><?php echo $row_qryModuleList['mod_code']; ?></td>
        <td><input <?php if (false !== (array_search($mod_data, $row_qryModuleList['mod_key']))) echo "checked=\"checked\""; ?> name="chkMod" type="checkbox" id="chkMod" value="<?php echo $row_qryModData['M01']; ?>" /></td>
    </tr>
<?php } ; ?>

【问题讨论】:

  • 肯定需要一些代码示例来辅助

标签: php forms checkbox dreamweaver


【解决方案1】:

我想我现在明白了。您需要做的是将所有允许的模块放入一个数组中,然后使用array_search() 函数找到它。

例子:

$mod_data = array();

while ($row_qryModData = mysql_fetch_assoc($qryModData)) array_push($mod_data, $row_qryModData['M01']);

这会将所有可用模块放入一个数组中。

接下来,当您循环浏览“ModuleList”查询时,使用 array_search() 方法尝试在其中找到“ModKey”变量。如果您这样做,请选中该框。如果没有,什么也不做。

例子:

<td><input <? if (false !== (array_search($mod_data, $row_qryModuleList['mod_code'])) echo "checked=\"checked\" "; ?>name="chkMod" type="checkbox" id="chkMod" value="<?php echo $row_qryModData['M01']; ?>" /></td>

(我使用“!==”的原因是因为该函数可以返回 false 或可能等于 false 也可能不等于的值。阅读我上面链接的页面了解更多信息)

【讨论】:

  • 我认为添加该属性通常会更好...checked="checked"
  • 我在想同样的事情(合规等等),但打字更快。不过,谢谢。
  • 嗨,斯蒂芬。已根据您的建议进行更改。现在发生的事情是除了一个复选框之外的所有复选框都被选中。我在某个地方犯了一些重大错误吗?我实际上是在以正确的方式解决这个问题,还是对我正在尝试做的事情有更好的解决方案?当我注意到我比较错误的字段时,我也做了一些细微的改变。 'mod_key' 不是 'mod_code',我的错。
  • @4D:我编辑了我的代码,因为我想我之前可能误解了你。不要使用不等于 ("!="),而是尝试使用完全等于 ("==") 进行比较。另外,只是想知道,您是在脚本开始时调用第二个查询(基于您的复选框被选中的查询)还是应该在 while 循环的每次迭代中调用它?
  • 斯蒂芬。有时我不善于解释事情。创建每个复选框后,我希望它查看第二个查询“qryModData”的结果,以查看该模块是否存在于 M01 列中。如果是这样,则应选中该复选框。现在有'=='意味着什么都不检查。我将重新编辑问题以尝试更好地解释。斯蒂芬也感谢您对此的帮助。我很感激。
猜你喜欢
  • 2011-07-26
  • 1970-01-01
  • 2012-06-19
  • 2013-10-24
  • 2018-09-25
  • 1970-01-01
  • 2011-11-10
  • 2017-06-06
  • 1970-01-01
相关资源
最近更新 更多