iT邦幫忙

0

【PHP 表格的排列???】

我舉例資料庫有四筆資料
name item
('jhon', 'jhon-1'),
('jhon', 'jhon-2'),
('allen', 'allen-1'),
('allen', 'allen-2');

我的程式寫法如下

<?php
$hostname_everyday = "localhost";
$database_everyday = "test";
$username_everyday = "root";
$password_everyday = "root";
$everyday = mysql_pconnect($hostname_everyday, $username_everyday, $password_everyday) or trigger_error(mysql_error(),E_USER_ERROR); 

mysql_select_db($database_everyday, $everyday);

$sql = "
SELECT * 
FROM abc
ORDER BY name, item
";
$Recordset1 = mysql_query($sql, $everyday) or die(mysql_error());
$row_Recordset1 = mysql_fetch_assoc($Recordset1);
$totalRows_Recordset1 = mysql_num_rows($Recordset1);



?>

<html xmlns="http://www.w3.org/1999/xhtml">

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title></title>



<table border="2">
<?php
do
{
	if(preg_match('/-1/',$row_Recordset1['item']))
	{
		echo '<tr>';
		echo '<td>'.$row_Recordset1['name'].'</td>';
		echo '<td>'.$row_Recordset1['item'].'</td>';
	}
	else if(preg_match('/-2/',$row_Recordset1['item']))
	{
		echo '<td>'.$row_Recordset1['item'].'</td>';
		echo '</tr>';
	}
}while($row_Recordset1 = mysql_fetch_assoc($Recordset1));
?>
</table>

結果如下

但如果我希望圖長的像下面這樣
請問程式碼要怎麼寫呢

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

16
silly
iT邦好手 2 級 ‧ 2012-10-11 02:53:01

先不討論資料與程式其他部份可能會有的問題,
就您的問題來說,問題點僅在</tr>這結束標籤,
簡單的去解就是do while迴圈前先設定個暫時變數,迴圈內將它加1,迴圈末將它除以一列預期欄數,若餘數為0就加上</tr>。
以本題為例,長的應該像下面那樣:

<pre class="c" name="code">
.....
$i=0;
do{
  $i++;
  ......其他程式碼.......
  ...
  if($i%6  == 0){
    echo '</tr>';
  }
}while(...)
.....

當然,若欄位有可能是空的,那就必須要補<td>及暫存變數的值進去,免得表格不正確。

6
wiseguy
iT邦超人 1 級 ‧ 2012-10-11 18:32:27
  1. 假如你想把所有的 record 只秀成一列,那麼就直接把 <tr> </tr> 移到 php 碼之外就行了。

    <pre class="c" name="code"><table border="2">
    <tr>
    <?php


    ?>
    </tr>
    </table>

  2. 建議常數字串比對的情況,不要用 RegExp,這是殺雞用牛刀,徒浪費程式效能。你要比 -1, -2 這種常數字串,就用 str??? 之類的函數來比即可。

    <pre class="c" name="code"><table border="2">
    <tr>
    <?php
    do
    {
    switch (substr($row_Recordset1['item'], -2)) // 取 item 最後兩個字元
    {
    case '-1':
    echo '<td>',$row_Recordset1['name'],'</td>';
    case '-2':
    echo '<td>',$row_Recordset1['item'],'</td>';
    break;
    }
    }while($row_Recordset1 = mysql_fetch_assoc($Recordset1));
    ?>
    </tr>
    </table>

ghyzsing iT邦新手 5 級 ‧ 2015-02-22 13:06:09 檢舉

iT邦幫忙MVPwiseguy提到:
直接把 <tr> </tr> 移到 php 碼之外

這個+1

我要發表回答

立即登入回答