PHP表填充

时间:2015-01-14 09:16:52

标签: php html

我在表格中显示数据时遇到问题。 代码采用多个id,对数据库运行它们并在表中显示结果。

  $counter = 0;
  foreach ($_POST['multi'] as  $artid) {
          $quee = 'select w.title, m.mediatype,w.year,w.len,w.heigh,w.size  from works w left join  `media` m on w.media_id = m.media_id  where w.work_id = "' . $artid.'"';
          $rs=$DBH->query($quee); 
          $rows_returned = $rs->num_rows;
        while($row = $rs->fetch_assoc())
            { 
                 $str1 = $row['title'] ."</br>".$row['mediatype']."</br>".$row['len'] ."x".$row['heigh'] . " ".$row['size']."</br>".$row['year'];

        echo '<tr>';
        if($counter == 0) {
        echo '<td width="45%">'. $str1 .'</td>';
        $counter = 1;
        break;
        }
        echo '<td width="10%">&nbsp;</td>';
        if($counter == 1) {
        echo '<td width="45%">'. $str1 .'</td>';
        $counter = 0;
        break;
        }
        echo '</tr>';   

}

        }

输出我 enter image description here

预期输出

enter image description here

任何猜测我做错了什么?

5 个答案:

答案 0 :(得分:2)

$counter = 0;
foreach ($_POST['multi'] as  $artid) {
$quee = 'select w.title, m.mediatype,w.year,w.len,w.heigh,w.size  from works w left join  `media` m on w.media_id = m.media_id  where w.work_id = "' . $artid.'"';
$rs=$DBH->query($quee); 
$rows_returned = $rs->num_rows;

while($row = $rs->fetch_assoc())
{ 
   $str1 = $row['title'] ."</br>".$row['mediatype']."</br>".$row['len'] ."x".$row['heigh'] . " ".$row['size']."</br>".$row['year'];

    if($counter == 0) {
    echo '<tr>';
    echo '<td width="45%">'. $str1 .'</td>';
    $counter = 1;
    break;
    }
    echo '<td width="10%">&nbsp;</td>';
    if($counter == 1) {
    echo '<td width="45%">'. $str1 .'</td>';
    $counter = 0;
    echo '</tr>';  
    break;
    }
}

}

在if($ counter == 0)下保持echo,以便在counter为0时创建新行并保持在if($ counter == 1)

之下

它将如何解决问题。

答案 1 :(得分:2)

我假设您正在使用计数器将宽度标记仅添加到第一行。这不是必需的。这足以实现您的目标:

echo '<tr>
         <td>'.$str1.'</td><td>&nbsp;</td><td>'.$str1.'</td>
      </tr>';

并添加一些css,如下:

tr:first-child td {
    width:10%;
}

tr:first-child td:first-child, tr:first-child td:last-child {
     width:45%;
}

设置第一行的正确宽度。

答案 2 :(得分:1)

对于$ counter的两个值,看起来你很早就突破了。所以html输出可能是无效的,而不是你期望的。

当$ counter为0时,在输出填充单元格或结束之前会中断。 您可以删除中断并使用其他内容,以确保始终达到结束。但是你仍然只会每行输出一个填充的单元格,因为你为每个循环输出一个完整的..

要获得每行两条记录,只需在输出第二条记录后关闭该行 - 可能是这样的:

while($row = $rs->fetch_assoc()) { 
        $str1 = $row['title'] ."</br>".$row['mediatype']."</br>".$row['len'] ."x".$row['heigh'] . " ".$row['size']."</br>".$row['year'];

        if($counter == 0) {
            echo '<tr>';
            echo '<td width="45%">'. $str1 .'</td>';
            $counter = 1;
        } else {
            echo '<td width="10%">&nbsp;</td>';
            echo '<td width="45%">'. $str1 .'</td>';
            $counter = 0;
            echo '</tr>';
        }

    }

编辑:你也应该检查整个事情是否以1计数结束,并在这种情况下关闭该行。

答案 3 :(得分:0)

根据您发布的结果(以及您的预期),也许您可​​以尝试在第二个echo '</tr>'内移动if行?

即。改变这个:

if($counter == 1) {
    echo '<td width="45%">'. $str1 .'</td>';
    $counter = 0;
    break;
}
echo '</tr>';

到此:

if($counter == 1) {
    echo '<td width="45%">'. $str1 .'</td>';
    echo '</tr>';   
    $counter = 0;
    break;
}

答案 4 :(得分:0)

问题在于你利用&#34;休息&#34;声明:break将停止执行最接近的while或for语句(在你的例子中,它是while($ row = $ rs-&gt; fetch_assoc())执行将被破坏)。

这里发生的事情如下:

首先是循环打印&#34; tr&#34;然后做

echo ''. $str1 .'';
因为你有$ counter == 0,你设置$ counter = 1然后执行休息。

第二个循环,你正在打印另一个&#34; tr&#34;没有关闭第一个(这导致一个奇怪的行为),现在$ counter == 1是真的,你将打印两个&#34; td&#34;

重新开始休息,一切都应该可以正常工作

  $counter = 0;
  foreach ($_POST['multi'] as  $artid) {
          $quee = 'select w.title, m.mediatype,w.year,w.len,w.heigh,w.size  from works w left join  `media` m on w.media_id = m.media_id  where w.work_id = "' . $artid.'"';
          $rs=$DBH->query($quee); 
          $rows_returned = $rs->num_rows;
        while($row = $rs->fetch_assoc())
            { 
                 $str1 = $row['title'] ."</br>".$row['mediatype']."</br>".$row['len'] ."x".$row['heigh'] . " ".$row['size']."</br>".$row['year'];

        echo '<tr>';
        if($counter == 0) {
        echo '<td width="45%">'. $str1 .'</td>';
        $counter = 1;
        }
        echo '<td width="10%">&nbsp;</td>';
        if($counter == 1) {
        echo '<td width="45%">'. $str1 .'</td>';
        $counter = 0;
        }
        echo '</tr>';   

}

        }