PHP单循环通过2个MySQL表

PHP单循环通过2个MySQL表,php,mysql,loops,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

请查看此代码:

    $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");

    }
请帮忙

更新:

抱歉,忘记添加:

$_GET['id'] = 1
反而

$in = mysql_fetch_array($current_sql);

基本上,问题是返回2个数组,我猜您有类似于
数组([0]=1,[1]=17,等等…
)。这将导致检查这两个类别。如果您在代码中打印$in,您将看到我的意思。

$in = mysql_fetch_array($current_sql);


基本上,问题是返回2个数组,我猜您有类似于
数组([0]=1,[1]=17,等等…
)。这将导致检查这两个类别。如果您在代码中打印$in,您将看到我的意思。

这将只给您一个数组,它位于映射表的第一行,这意味着它将包含1和20(类别和产品)

$in=mysql\u fetch\u数组($current\u sql)

为了获得正确的功能,您可能希望遍历它以获得所有类别。但是:

您最好将产品类别加入到同一个查询中,并保留某种布尔值以指示哪些类别已被选中。你现在这样做根本行不通

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'])
因为如果它是产品类别的一部分,它将是1,如果不是,它将是0


但是一定要转义您的参数,或者按照注释中的建议使用预先准备好的语句。

这只会给您一个映射表第一行的数组,这意味着它将包含1和20(类别和产品)

$in=mysql\u fetch\u数组($current\u sql)

为了获得正确的功能,您可能希望遍历它以获得所有类别。但是:

您最好将产品类别加入到同一个查询中,并保留某种布尔值以指示哪些类别已被选中。你现在这样做根本行不通

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'])
因为如果它是产品类别的一部分,它将是1,如果不是,它将是0

但一定要避开你的参数,或者按照别人在评论中的建议使用预先准备好的语句。

试试这个: $current_sql=mysql_query(“从
product_categories
WHERE
product
='{$\u GET['id']}'限制1中选择类别”)

如果($ca['ID']=$current_sql['ID'])){ echo(“checked=\”checked\”);
}试试这个: $current_sql=mysql_query(“从
product_categories
WHERE
product
='{$\u GET['id']}'限制1中选择类别”)

如果($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");
}
$current\u sql=mysql\u query(“从`product\u categories`中选择*,其中`product`='{$\u GET['id']}'”;
$all\u sql=mysql\u查询(“从“类别”中选择*”;
$pcs=array();
而($in=mysql\u fetch\u数组($current\u sql);){
$pcs[]=$in['ID']
}
而($ca=mysql\u fetch\u数组($all\u sql)){
echo(“$ca['category']”,
\n); }
试试看

$current\u sql=mysql\u query(“从`product\u categories`中选择*,其中`product`='{$\u GET['id']}'”;
$all\u sql=mysql\u查询(“从“类别”中选择*”;
$pcs=array();
而($in=mysql\u fetch\u数组($current\u sql);){
$pcs[]=$in['ID']
}
而($ca=mysql\u fetch\u数组($all\u sql)){
echo(“$ca['category']”,
\n); }
什么条件会告诉您要选中此复选框。Offtopic:您应该使用准备好的语句或使用转义
$\u GET['id']
以避免SQL注入。是否可以执行var\u转储($in);出口就在$in=mysql_fetch_数组($current_sql)?您的条件是什么,它会告诉您要选中此复选框。Offtopic:您应该使用准备好的语句或使用转义
$\u GET['id']
,以避免SQL注入。是否可以执行var\u转储($in);出口就在$in=mysql_fetch_数组($current_sql)?