我正在尝试使用已添加/编辑产品的表单添加一些复选框。
我以前能够添加单选按钮。为此,我使用了这样的开关:
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 ' Green' . tep_draw_checkbox_field('color_id', '1', $green_color_id) . ' 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);
}
我很确定我需要将所选值存储到数组中,然后更改查询以使用该数组。我不知道如何开始或者如果这是正确的。非常感谢任何帮助!
答案 0 :(得分:1)
1)生成复选框,以便将它们作为数组发送:
注意tep_draw_checkbox_field()
(括号)的第一个参数
<table>
<tr>
<td class="main">Colors</td>
<td class="main">
<?php echo ' Green' . tep_draw_checkbox_field('color_id[]', 1, $green_color_id) . '
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 ' Green' . tep_draw_checkbox_field('color_id[]', 1, in_array('1', $pInfo->color_id)) . '
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 . "')");
}
}
?>