使用mysql数据库的复选框

时间:2011-11-18 18:52:52

标签: php mysql

我正在尝试使用已添加/编辑产品的表单添加一些复选框。

我以前能够添加单选按钮。为此,我使用了这样的开关:

if (!isset($pInfo->color_id)) 
    $pInfo->color_id = '1';
switch ($pInfo->color_id) {
    case '1': $green_color_id = true;
        break;
    case '2': $turquoise_color_id = true;
        break;
    default: $green_color_id = true;
}

但是现在,由于我想使用复选框,我不认为我可以使用这样的开关,因为我想要挑选多种颜色,并且每一种颜色作为单独的字段插入数据库。

这是我的php / html用于创建复选框:

 <tr>
     <td class="main">Colors</td>
     <td class="main">
         <?php echo '&nbsp;Green' . tep_draw_checkbox_field('color_id', '1', $green_color_id) . '&nbsp;Turquoise' . tep_draw_checkbox_field('color_id', '2', $turquoise_color_id); 
         ?>
     </td>
 </tr>

这是我实际将其插入数据库的查询:

if (!isset($HTTP_GET_VARS['color_id'])) {
    tep_db_query("insert into " . TABLE_PRODUCTS_TO_COLORS . " (products_id, color_id) values ('" . (int)$products_id . "', '" . (int)$color_id . "')");
}
else {
    mysql_query("update " . TABLE_PRODUCTS_TO_COLORS . " SET  color_id = '" . (int)$color_id . "' WHERE products_id ='" . (int)$products_id . "'");
}     

这是自定义函数tep_draw_checkbox_field的定义方式:

function tep_draw_checkbox_field($name, $value = '', $checked = false, $compare = '') {
    return tep_draw_selection_field($name, 'checkbox', $value, $checked, $compare);
}

我很确定我需要将所选值存储到数组中,然后更改查询以使用该数组。我不知道如何开始或者如果这是正确的。非常感谢任何帮助!

1 个答案:

答案 0 :(得分:1)

1)生成复选框,以便将它们作为数组发送:

注意tep_draw_checkbox_field()(括号)的第一个参数

<table>
    <tr>
        <td class="main">Colors</td>
        <td class="main">
         <?php echo '&nbsp;Green' . tep_draw_checkbox_field('color_id[]', 1, $green_color_id) . '
                     &nbsp;Turquoise' . tep_draw_checkbox_field('color_id[]', 2, $turquoise_color_id); ?></td>
    </tr>
</table>

2)关于开关:确保$pInfo->color_id是一个数组。而是使用开关,使用in_array()

<?php
if (!isset($pInfo->color_id)) $pInfo->color_id = Array('1');
if (in_array('1', $pInfo->color_id)) { $green_color_id = true; }
if (in_array('2', $pInfo->color_id)) { $turquoise_color_id = true; }
    ?>

如果您在in_array()中使用tep_draw_checkbox_field()作为第三个参数,那会更容易,这可以节省您为每种颜色定义变量:

<table>
    <tr>
        <td class="main">Colors</td>
        <td class="main">
         <?php echo '&nbsp;Green' . tep_draw_checkbox_field('color_id[]', 1, in_array('1', $pInfo->color_id)) . '
                     &nbsp;Turquoise' . tep_draw_checkbox_field('color_id[]', 2, in_array('2', $pInfo->color_id)); ?></td>
    </tr>
</table>

3)最后,插入数据库:$HTTP_GET_VARS['color_id'](更好:使用$_GET['color_id'])现在是一个数组。

<?php
// First, delete all n entries of colors-to-products
tep_db_query("delete from " . TABLE_PRODUCTS_TO_COLORS . " WHERE products_id = '" . (int)$products_id . "'");

     // now insert colors from form-request
if (is_array($_GET['color_id'])) {
         foreach ($_GET['color_id'] as $colorid) {
                     tep_db_query("insert into " . TABLE_PRODUCTS_TO_COLORS . " (products_id, color_id) values ('" . (int)$products_id . "', '" . (int)$colorid . "')");
         }
}

?>