0

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

数据库:

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

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

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

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

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

目前我无法根据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 } ; ?>
4

1 回答 1

0

我想我现在明白这一点了。您需要做的是将所有允许的模块放入一个数组中并使用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 而可能不等于的内容。阅读我上面链接的页面以获取更多信息)

于 2009-04-23T17:15:19.863 回答