Re: [請益] php & xhtml
※ 引述《NUKnigel (簡簡單單)》之銘言:
: 今天第一次碰php & mysql
: 但剛剛忙了一個早上
: 發現如果用xhtml的方法來表示 table
: 會無法顯示 @@
: 但是一改成html就成功顯示...
: 是我的方法錯誤...還是php 和 xhtml本來就不相容呢?
方法錯誤。PHP和 XHTML是不同層面的技術;XHTML 只是
種資料的表現方式,若 PHP的輸出符合 XHTML 的格式,
便不會有相容性上的問題。
請看下面的 code :
echo "<table summary="教師資料">";
上頭有個基本、但不小心卻容易忽略的"脫序"問題。
我想 PHP 解析器應該會跟你抱怨看不懂程式碼。
正確的輸出格式應為
"<table summary=\"教師資料\">"; // A
或是
'<table summary="教師資料">'; // B
或
"<table summary='教師資料'>"; // C
一般我偏好使用 B 的方式,因為 xhtml規格中,我記得有定義
屬性的值以 " quote。
另外,像你這邊有另外一種寫法可以參考:
------------------------------------------------------
<?php
// $link =...
// ...
// 資料庫的連結. (略)
?>
<!-- 以下為原本用 echo 輸出 html 的內容 -->
<table summary="教師資料">
<colgroup span="1"></colgroup>
<!-- 略 -->
<thead>
<tr>
<th scope="col">product_id</th>;
<!-- 略 -->
<!-- 重點來了 :) -->
<!-- 如果 php.ini 的 short_open_tag = off
那麼底下用 <? 的地方需改為 <?php
<?= 則改為 <?php echo ..
這麼一來有點囉唆,所以還是開一下吧 :P -->
<? while($row = mysql_fetch_array($result)): ?>
<tr>
<td><?=$row['product_id']?></td>
<td><?=$row['product_name']?></td>
<!-- 略 -->
</tr>
<? endwhile ?>
</tbody>
</table>
<?php
// 回到 php 中
mysql_free_result($result);
?>
------------------------------------------------------
用上述的寫法有幾個好處:
1. 得到的 HTML是原生的(省掉一些針對 html 原始碼的縮排和脫序)
2. 即便 HTML和 PHP混在一起,還是能使程式碼簡潔
3. HTML的內容如果很複雜,如此編寫方式相對方便檢視除錯
將輸出與程式邏輯分開,有助於提升整體的可維護性。如果曾經
接手別人寫的案子、或維護自己幾個月前寫的程式碼,應該會感
謝前頭有人種樹 XD
現在 Web Application 流行使用 Model-View-Control 的開發方
式。上述例子的編寫方式,其實隱含著相同的精神。
: code
: -----------------------------
: <?php
: $link = mysql_pconnect("localhost", "xxxxxx", "");
: mysql_select_db("shopping") or die("無法選擇資料庫");
: $query = "SELECT * FROM product";
: $result = mysql_query($query) or die("無法送出" . mysql_error( ));
: echo "<table summary="教師資料">";
: echo "<colgroup span="1"></colgroup>";
: echo "<colgroup span="2"></colgroup>";
: echo "<colgroup span="3"></colgroup>";
: echo "<colgroup span="4"></colgroup>";
: echo "<colgroup span="5"></colgroup>";
: echo "<colgroup span="6"></colgroup>";
: echo "<thead>";
: echo "<tr>";
: echo "<th scope="col">product_id</th>";
: echo "<th scope="col">product_name</th>";
: echo "<th scope="col">price</th>";
: echo "<th scope="col">category</th>";
: echo "<th scope="col">product_family</th>";
: echo "<th scope="col">product_class</th>";
: echo "</tr>";
: echo "</thead>";
: echo "<tbody>";
: while ( $row = mysql_fetch_array($result) ){
: echo "<tr>";
: echo "<td scope="row">".$row['product_id']."</td>";
: echo "<td scope="row">".$row['product_name']."</td>";
: echo "<td scope="row">".$row['price']."</td>";
: echo "<td scope="row">".$row['category']."</td>";
: echo "<td scope="row">".$row['product_family']."</td>";
: echo "<td scope="row">".$row['product_class']."</td>";
: echo "</tr>";
: }
: echo "</tbody></table>";
: mysql_free_result($result);
: ?>
--
「640K ought to be enough for anybody.!」
- Bill Gates -
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.119.199.121
→
12/17 15:20, , 1F
12/17 15:20, 1F
推
12/17 15:31, , 2F
12/17 15:31, 2F
→
12/17 15:32, , 3F
12/17 15:32, 3F
推
12/17 15:43, , 4F
12/17 15:43, 4F
→
12/17 15:47, , 5F
12/17 15:47, 5F
→
12/17 15:48, , 6F
12/17 15:48, 6F
推
12/17 16:11, , 7F
12/17 16:11, 7F
推
12/17 16:17, , 8F
12/17 16:17, 8F
推
12/18 14:31, , 9F
12/18 14:31, 9F
→
12/18 14:32, , 10F
12/18 14:32, 10F
→
12/18 14:34, , 11F
12/18 14:34, 11F
→
12/18 14:34, , 12F
12/18 14:34, 12F
討論串 (同標題文章)