PHP单循环通过2个MySQL表

时间:2011-06-28 11:32:10

标签: php mysql loops

请查看此代码:

    $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

4 个答案:

答案 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");
}
相关问题