Re: [請益] php & xhtml

看板PHP作者 (O⊥M)時間17年前 (2006/12/17 14:34), 編輯推噓5(507)
留言12則, 3人參與, 最新討論串2/2 (看更多)
※ 引述《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
PS: <!-- 這是 html 中所使用的註解 -->
12/17 15:20, 1F

12/17 15:31, , 2F
我覺得用here document就差不多了 這樣寫有點累
12/17 15:31, 2F

12/17 15:32, , 3F
這種寫法很接近用Smarty了 不如直接用Smarty
12/17 15:32, 3F

12/17 15:43, , 4F
看規模吧:P 若只是一兩千行的小作業,我覺得應該還過意
12/17 15:43, 4F

12/17 15:47, , 5F
得去。而且 Smarty的 cache tunning如果沒弄好,網頁大
12/17 15:47, 5F

12/17 15:48, , 6F
會慢到一種稍微不耐煩的境界 XD
12/17 15:48, 6F

12/17 16:11, , 7F
謝謝^^"...因為學過C就直接想實做,果然會出錯( ̄□ ̄|||)
12/17 16:11, 7F

12/17 16:17, , 8F
下面第二個重點~也受益良多^^這樣寫直觀多了~再次感謝
12/17 16:17, 8F

12/18 14:31, , 9F
如果輸出內容需要邏輯控制. 用 here document 也會挺繁
12/18 14:31, 9F

12/18 14:32, , 10F
瑣的;這種寫法和 smarty中的控制標籤類似,但是因為
12/18 14:32, 10F

12/18 14:34, , 11F
smarty 最後還是把它解析成 php .. 而這種方式是直接以
12/18 14:34, 11F

12/18 14:34, , 12F
php 控制,理論上效能應該會比較好一點
12/18 14:34, 12F
文章代碼(AID): #15XEJuY3 (PHP)
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 2 之 2 篇):
文章代碼(AID): #15XEJuY3 (PHP)