【问题标题】:update mysql table based on checked checkboxes根据选中的复选框更新 mysql 表
【发布时间】:2014-04-26 04:53:11
【问题描述】:

我有一个表,其中有一列名为 extension_list,其中包含逗号分隔值

200,201,202,203,204

如果我有一个从数据库中选择这些的循环:

$stmt = $pbx01_pdoconn->prepare("SELECT * from client where parent_client_id = :parent_client_id ");
$stmt->execute(array(':parent_client_id' => $customerid));
$records = $stmt->fetchAll(PDO::FETCH_ASSOC);
foreach($records as $result) {
    $stmt = $pbx01_pdoconn->prepare("SELECT * from extension where client_id = :client_id ");
    $stmt->execute(array(':client_id' => $result["id"]));
    $extension = $stmt->fetch();
    if($extension["type"] == 'term') {
        echo '<tr>
    <td>'.$result["name"].' ('.$extension["number"].')</a></td>
    </tr>';
    }
}

如何在每个值旁边显示复选框,如果 $extension["number"] 值在 extension_list 列中,请勾选复选框。

此外,当勾选复选框并按下提交按钮时,它将更新 extension_list 列并将该值添加到逗号分隔列表中

【问题讨论】:

  • 请注意,如果您需要使用查询来操作它们,那么在数据库中存储逗号分隔值几乎总是一个坏主意。适当规范化的结构会更好。
  • 在单列中使用逗号分隔的列表通常是不好的设计。最好使用关系表来存储该信息。所以你可能会有clientsextensionsclients_x_extensions 的表,而后者会有client_idextension_id 的列。

标签: php mysql sql checkbox


【解决方案1】:

您应该规范化您的表格。

然后你可以有这样的 HTML 输入复选框:

&lt;input type="checkbox" name="extensions[]" value="&lt;?php echo $extension['id'] ?&gt;"&gt;

然后,在您的脚本中,您可以像这样处理它们:

$extensions = isset($_POST['extensions'])  && is_array($_POST['extensions']) ? $_POST['extensions'] : array();
foreach($extensions as $extension) {
  // use $extension here
}

这应该有助于为您指明正确的方向。

【讨论】:

  • 如何运行和更新查询以删除数字或在逗号分隔列表中添加数字?
  • “你应该标准化你的表”。拥有一个仅包含单个扩展但具有返回父表的外键的子表就是一个示例 (1:N)
【解决方案2】:
<input name="extenstionbox[]" id="extenstionbox" type="checkbox" value="<? echo $extension['id']; ?>" <?php if(in_array($extension['id'], $extensions)) echo 'checked="checked"';?>>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多