0

我的最后一个问题不太好,所以很抱歉“打开”新问题。

重要数据:

表格1

  • 编号:1
  • 编号:2
  • 编号:3

表2

  • 编号:1
  • 编号:3

Query1(id 结果)

  • 1,2,3

Query2(id 结果):

  • 1,3

所以,我有一个复选框,如果每次我获取这 2 个表(使用正确的查询 ofc)并且 table2 中的一些 id 存在于 table1 上,我需要将其更改为“选中”。

我这样做:

<?php
while($row = mysql_fetch_array($Query1))
{
while($row2 = mysql_fetch_array($Query2))
{
$checkit = '';
if($row['id'] == $row2['id'] )
$checkit = 'checked="checked"';
}
?>
<input type="checkbox" name = "checkbox-1" class="checkbox" value ="" <?php echo $checkit ?> />
<?php
}
}
?>

问题:当 1=1 时,我只能“检查”第一个结果。

虽然只取一次。我需要结果应该是这样的(id):11-13 | 21-23 |31-33 和选中的复选框应仅在 11 和 33 时出现

我希望你明白这一点..

4

3 回答 3

1

你有用

$checkit = 'checked="yes"';

应该

 $checkit = 'checked="checked"';

试试这个: -

<?php

    $arr_one = '';
    while($row = mysql_fetch_array($Query1))
    {

        $arr_one[]= $row['id'];

    }


    while($row2 = mysql_fetch_array($Query2))
    {
            $checkit = '';

            $id = $row2['id'];
            if (in_array($id,$arr_one))
            {
                $checkit = 'checked="checked"';
            }



    ?>
            <input type="checkbox" name= "checkbox-1" class="checkbox" value ="" <?php echo $checkit ?> />
    <?php
        }

    ?>
于 2012-08-02T16:40:46.947 回答
1

您需要在内部 while 块之后重置内部结果指针。

    while($row = mysql_fetch_array($Query1))
    {
        while($row2 = mysql_fetch_array($Query2))
        {
              // Your code
        }
        mysql_data_seek($Query2,0);
    }
于 2012-08-02T16:53:44.583 回答
1

我会做:

$t2data = array();
while($row2 = mysql_fetch_assoc($Query2)) {
  $t2data[] = $row2[0];
}

while($row1 = mysql_fetch_assoc($Query1)) {
  if(in_array($row1[0], $t2data)) { 
    $checked = 'checked';
  }
}

话虽如此,如果两个表都在同一个数据库中,最好使用 OUTER JOIN 查询来解决:

select t1.id, (t2.t1_id IS NOT NULL) as checked
  from t1 
  left join t2 on (t1.id = t2.t1_id)

然后循环遍历结果并仅选中查询中已选中=true 的框。

于 2012-08-02T17:00:24.793 回答