请查看此代码:
$current_sql = mysql_query("SELECT * FROM `product_categories` WHERE `product`='{$_GET['id']}'");
$all_sql = mysql_query("SELECT * FROM `categories`");
$in = mysql_fetch_array($current_sql);
while($ca = mysql_fetch_array($all_sql)){
echo("<label><input type=\"checkbox\" name=\"categories[]\" value=\"".$ca['ID']."\" class=\"cat_check\"");
if($edit){
if(in_array($ca['ID'], $in)){
echo(" checked=\"checked\"");
}
}
echo("> " . $ca['category'] . "</label><br/>\n");
}
这是输出:
<label><input type="checkbox" name="categories[]" value="1" class="cat_check" checked="checked"> PS3 Games</label><br/>
<label><input type="checkbox" name="categories[]" value="16" class="cat_check"> Category 2</label><br/>
<label><input type="checkbox" name="categories[]" value="17" class="cat_check" checked="checked"> Category 3</label><br/>
<label><input type="checkbox" name="categories[]" value="18" class="cat_check"> Category 4</label><br/>
<label><input type="checkbox" name="categories[]" value="19" class="cat_check"> Category 5</label><br/>
问题是只复选框值=“17”应该被检查,这里有2个MySQL数据库是结构:
categories:
ID | name
1 PS3 Games
16 Category 3
17 Category 4
18 Category 5
19 Category 6
product_categories
category | product
1 20
17 1
请帮助!!
更新
抱歉忘了添加:
$_GET['id'] = 1
答案 0 :(得分:1)
相反
$in = mysql_fetch_array($current_sql);
做
while ($prod_cat = mysql_fetch_array($current_sql)) {
$in[] = $prod_cat['cat_id']; // where cat_id is the category ID in product_categories table
}
基本上问题是mysql_fetch_array让你回到2个阵列,我猜你有array([0] = 1, [1] =17, etc ...)
之类的东西。这导致两个类别都被检查。如果你在代码中打印$ in,你会看到我的意思。
答案 1 :(得分:0)
这只会为您提供映射表中第一行的数组,这意味着它将包含1和20(类别和产品)。
$ in = mysql_fetch_array($ current_sql);
您可能希望迭代它以获取所有类别以获得正确的功能。但是:
最好将product_categories加入到同一个查询中,并保留某种布尔值以指示哪些已被选中。你现在这样做的方式根本不起作用。
SELECT c.*, IFNULL(pc.category, 0, 1) as checked FROM `categories` c
LEFT JOIN `product_categories` pc ON pc.category = c.ID AND product = {$_GET['id']}
然后你可以检查
if ($resultset['checked'])
因为如果是product_category的一部分则为1,如果不是则为0。
但请务必转义您的参数或使用评论中建议的预准备语句。
答案 2 :(得分:0)
试试这个:
$ current_sql = mysql_query(“SELECT category FROM product_categories
WHERE product
='{$ _ GET ['id']}'LIMIT 1”);
if(($ ca ['ID'] == $ current_sql ['ID'])){
echo(“checked = \”checked \“”);
}
答案 3 :(得分:0)
尝试
$current_sql = mysql_query("SELECT * FROM `product_categories` WHERE `product`='{$_GET['id']}'");
$all_sql = mysql_query("SELECT * FROM `categories`");
$pcs = array();
while($in=mysql_fetch_array($current_sql);)){
$pcs[]=$in['ID']
}
while($ca = mysql_fetch_array($all_sql)){
echo("<label><input type=\"checkbox\" name=\"categories[]\" value=\"".$ca['ID']."\" class=\"cat_check\"");
if($edit){
if(in_array($ca['ID'], $pcs)){
echo(" checked=\"checked\"");
}
}
echo("> " . $ca['category'] . "</label><br/>\n");
}