作者foxzgerald (O⊥M)
看板PHP
标题Re: [请益] php & xhtml
时间Sun Dec 17 15:19:50 2006
※ 引述《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
1F:→ foxzgerald:PS: <!-- 这是 html 中所使用的注解 --> 12/17 15:20
2F:推 superGA:我觉得用here document就差不多了 这样写有点累 12/17 15:31
3F:→ superGA:这种写法很接近用Smarty了 不如直接用Smarty 12/17 15:32
4F:推 foxzgerald:看规模吧:P 若只是一两千行的小作业,我觉得应该还过意 12/17 15:43
5F:→ foxzgerald:得去。而且 Smarty的 cache tunning如果没弄好,网页大 12/17 15:47
6F:→ foxzgerald:会慢到一种稍微不耐烦的境界 XD 12/17 15:48
7F:推 NUKnigel:谢谢^^"...因为学过C就直接想实做,果然会出错( ̄□ ̄|||) 12/17 16:11
8F:推 NUKnigel:下面第二个重点~也受益良多^^这样写直观多了~再次感谢 12/17 16:17
9F:推 foxzgerald:如果输出内容需要逻辑控制. 用 here document 也会挺繁 12/18 14:31
10F:→ foxzgerald:琐的;这种写法和 smarty中的控制标签类似,但是因为 12/18 14:32
11F:→ foxzgerald:smarty 最後还是把它解析成 php .. 而这种方式是直接以 12/18 14:34
12F:→ foxzgerald:php 控制,理论上效能应该会比较好一点 12/18 14:34