繁体   English   中英

PHP 单环通 2 MySQL 表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM