2个复选框 - 其中一个不起作用

时间:2012-03-31 18:04:24

标签: php

我有一个奇怪的问题。如果用户被禁止,这是我的表格,复选框已选中,如果没有,复选框为空。

<tr>
    <td>{$user4.username}</td>
    <td>{$user4.email}</td>
    <td>{$user4.name} {$user4.surname}</td>
    {if !$user4.banned}
    <td><center><input type="checkbox" name="banCheckBan" value="{$user4.id}" /></center></td>
    {else}
       <td><center><input type="checkbox" name="banCheckBan2" value="{$user4.id}" checked /></center></td>
    {/if}
    {if $user4.status}
    <td><center><input type="checkbox" name="removeCheck" value="{$user4.id}"></center></td>
    {else}
      <td><center><input type="checkbox" name="removeCheckNoRemove" value="{$user4.id}" checked></center></td>
    {/if}
</tr>

在控制器方面,我使用下面的代码.BancheckBan正常工作。但是,banCheckBan2无法正常工作。可能是什么原因?

 if (isset($_POST['updateBanRemove'])) {

            if (isset($_POST['banCheckBan2']))
                  NCore::db('USER')->updateAsArray(array('BANNED' => 0))->eq('ID', $_POST['banCheckBan2'])->execute();
           elseif (isset($_POST['banCheckBan'])){
                NCore::db('USER')->updateAsArray(array('BANNED' => 1))->eq('ID', $_POST['banCheckBan'])->execute();
            }
        }

2 个答案:

答案 0 :(得分:2)

只有checked个复选框将发送到服务器。因此,在取消选中复选框时,您的条件将无法取消用户的解除。

解决这个问题的一种可能性可能是:

(查看方)

<input type="hidden" name="userID" value="{$user4.id}" />

{if !$user4.banned}
  <td>
    <center>
      <input type="checkbox" name="banCheckBan" value="1" />
    </center>
  </td>
{else}
  <td>
    <center>
      <input type="checkbox" name="banCheckBan" value="1" checked />
    </center>
  </td>
{/if}

(控制器端)

if (isset($_POST['updateBanRemove'])) {
  if (!isset($_POST['banCheckBan'])) {
    NCore::db('USER')
      ->updateAsArray(array('BANNED' => 0))
      ->eq('ID', $_POST['userID'])
      ->execute();
  } elseif ($_POST['banCheckBan']) {
    NCore::db('USER')
      ->updateAsArray(array('BANNED' => 1))
      ->eq('ID', $_POST['userID'])
      ->execute();
  }
}

答案 1 :(得分:0)

如果要检查其值,那么您要比较的复选框是否需要与if相同?