![](/img/trans.png)
[英]php & mysql - loop through columns of a single row and passing values into array
[英]PHP single loop through 2 MySQL tables
请查看此代码:
$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");
}
这是 output:
<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/>
问题是只有复选框 value="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
反而
$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 arrays 我猜你有类似array([0] = 1, [1] =17, etc...)
的东西。 这导致两个类别都被检查。 如果您在代码中打印 $in,您将明白我的意思。
这只会为您提供一个包含映射表第一行的数组,这意味着它将包含 1 和 20(类别和产品)。
$in = mysql_fetch_array($current_sql);
您可能希望遍历它以获取所有类别以获得正确的功能。 但:
您最好将您的 product_categories 加入到同一个查询中,并保留某种 boolean 值以指示哪些已被选中。 你现在这样做的方式根本行不通。
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。
但请务必按照评论中的建议转义您的参数或使用准备好的语句。
试试这个: $current_sql = mysql_query("SELECT category FROM product_categories
WHERE product
='{$_GET['id']}' LIMIT 1");
if(($ca['ID']== $current_sql['ID'])){ echo("checked=\"checked\"");
}
尝试
$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");
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.