iT邦幫忙

DAY 22
6

逐步提昇PHP技術能力系列 第 22

逐步提昇PHP技術能力 - 逐步改善軟體架構 - 一個「古典」php論壇

PHP最早的應用,大概就是從資料庫讀取一些資料,然後把資料填入到html中來輸出。思考的方向,其實是以html的呈現為主,PHP本身的角色,主要是讓頁面可以動態呈現資料。這樣的架構,會把所有的邏輯混和在一支程式的各個地方,維護會比較麻煩。
既然要改善,所以需要有一個有改善需要的PHP程式。為了這個持續改善的目標,我們從最「古典」的風格開始,也有人叫他義大利麵。

這個PHP程式是一個簡單的論壇,用粗獷的html構成頁面,利用PHP判斷是否有登入,撈取論壇資料,顯示在頁面上。像這樣:

<?php
session_start();
if(isset($_SESSION['user'])) {
	$member = true;
}
$conn = mysql_connect('localhost', 'root', '');
if(!$conn)
	die('mysql connection error.');

mysql_select_db('myforum');
?>


	<table width="800" border="1" cellpadding="0" cellspacing="0" align="center">
		<!-- header start -->
		<tr>
			<th align="left">我的論壇</th>
		<tr>
			<form method="post" action="login.php">
				<td style="text-align:right" bgcolor="#336699">
					<table align="right">
						<tr>
							<td>登入後可留言  </td>
							<td>帳號</td>
							<td><input type="text" name="account"></td>
							<td>密碼</td><td><input type="password" name="password"></td>
							<td><input type="submit" value="登入"></td>
						</tr>
					</table>
				</td>  
			</form>
		</tr>
		<!-- header end -->
		<!-- content start-->
		<tr height="600">
			<td valign="top">
				<table width="100%" border="1" cellspacing="0" cellpadding="5">
					<tr bgcolor="#DDEEFF">
						<th>論壇名稱</th>
						<th>文章數</th>
						<th>最新文章</th>
						<th>操作</th>
					</tr>
<?php
	$sql = "SELECT f.*,count(a.forums_id) AS count  FROM forums f LEFT JOIN articles a ON a.forums_id = f.id GROUP BY a.forums_id ORDER BY f.id";
	$result = mysql_query($sql, $conn);
	$count = 0;
	while($row = mysql_fetch_array($result)) {
		if($count%2==0) {
			$style = 'bgcolor="#EEFFEE"';
		} else {
			$style = 'bgcolor="#FFFFFF"';
		}
		$sql = "SELECT * FROM articles WHERE forums_id=".$row['id']." ORDER BY id DESC LIMIT 1";
		$result1 = mysql_query($sql, $conn);
		$row1 = mysql_fetch_array($result1);
?>
					<tr <?php echo $style;?>>
						<td><?php echo $row['name'];?></td>
						<td><?php echo $row['count'];?></td>
						<td><?php echo $row1['title'];?></td>
						<td>
							<button onclick="document.loation.href='articles.php?id=<?php echo $row['id'];?>'">進入</button>
						</td>
					</tr>
<?php
		$count++;
	}
?>
				</table>
			</td>
		</tr>
		<!-- content end -->
		<!-- footer start -->
		<tr bgcolor="#336699">
			<td align="center">
				<font color="#EFEFEF">Copyright 1899  by Fillano</font>
			</td>
		</tr>
		<!-- footer end -->
	</table>

畫面長這樣:

基本的程式結構,都是配合html的頁面呈現而做的,結果就是...頁面跟所有的資料邏輯,全部混和在一起。

其實,在開發的過程中,最常變動的反而不是背後的資料邏輯,而是頁面的呈現。但是因為所有的資料都混在一起,即使是要改頁面,也會動到資料邏輯。而且html跟php混在一起,其實很難閱讀。除了要多花時間改動頁面然後整合資料邏輯,也容易不小心動到資料邏輯而出現更大的錯誤。

======

從明天開始,就先做第一步改進,把頁面跟資料拆開。希望這個拆開的過程能花最少的力氣(這樣才容易說服老闆花這樣的工期),同時也不容易發生錯誤。當然,隨著修改的進行,會一步一步碰到更多支程式,也需要解決更多的問題。不過因為一次只動一小部分,所以不會花太多時間,也比較不容易出錯。


上一篇
逐步提昇PHP技術能力 - 開發工具 : 試用xinc (2)
下一篇
逐步提昇PHP技術能力 - 逐步改善軟體架構 - 分離出頁面的邏輯
系列文
逐步提昇PHP技術能力30

1 則留言

0
老鷹(eagle)
iT邦高手 1 級 ‧ 2013-10-23 08:21:25

這是我以前的寫法哭
不過現在用框架,都分離了!!
沙發拍手筆記

我要留言

立即登入留言