iT邦幫忙

0

這段 PHP 程式是什麼意思 ?

php

<?
$conn = mysql_connect("localhost","root","123");
mysql_select_db("vote", $conn);
$strSql = "select * from vote order by vNo";
$result = mysql_query($strSql, $conn);
?>

<title>polls</title>

<center>
<h1>線上投票</h1>
<table border="1">
<tr>
<td>標號</td>
<td></td>
<td>投票選項</td>
<td>照片</td>
<td>累計票數</td>
</tr>
<?

以下這兩句什麼意思 , 老師說初學者 , 遇到迴圈陣列往往想不通就掛了 , 不知有什麼辦法可以突破這關呢 ?
if ($result && mysql_num_rows($result) > 0)
{
while ($row = mysql_fetch_array($result))
{[/b][/b] ?>
<tr>
<td align = 'Center'><? echo $row['vNo'] ?></td>
<td align = 'Center'>
<a href=count.php?no=<? echo $row['vNo']; ?>>
<img src="vote.png" border="1"></a>
</td>
<td align = 'Center'><? echo $row['vName']; ?></td>
<td align = 'Center'><img src="<? echo $row['vName']; ?>" border="0" width="100" height="60"></td>
<td align = 'Center'><? echo $row['vCnt']; ?></td>
</tr>
<?
}
}
?>
</table>
</center>

看更多先前的討論...收起先前的討論...
如果是初學者
老師就應該從頭開始一步一步說明
我的說明如下

第一步:先做出最後想要的結果,資料隨便輸入沒關係,舉例如下
<html>
<title>polls</title>
<body>
	<center>
	<h1>線上投票</h1>

	<table border="1">
		<tr>
			<td>標號</td>
			<td></td>
			<td>投票選項</td>
			<td>照片</td>
			<td>累計票數</td>
		</tr>
		
		<tr>
			<td align = 'Center'>0001</td>
			<td align = 'Center'><a href=count.php?no=0001><img src="vote.png" border="1"></a></td>
			<td align = 'Center'>cdfu</td>
			<td align = 'Center'><img src="./images/cdfu.jpg" border="0" width="100" height="60"></td>
			<td align = 'Center'>4096</td>
		</tr>
		<tr>
			<td align = 'Center'>0002</td>
			<td align = 'Center'><a href=count.php?no=0002><img src="vote.png" border="1"></a></td>
			<td align = 'Center'>tecksin</td>
			<td align = 'Center'><img src="./images/tecksin.jpg" border="0" width="100" height="60"></td>
			<td align = 'Center'>2048</td>
		</tr>
	
	</table>

	</center>
</body>
</html>
第二步:找出其中「只出現一次的部份」「會重覆出現的部份」
在本例中
可以看出「只出現一次的部份」包括Line 1-14, Line 31-35
「會重覆的部份」是Line 16-Line29的<tr></tr>部份

接著先處理只出現一次的部份
「會重覆的部份」就是要應用「迴圈」的方式來處理,最後再來寫
加入「只出現一次的部份」後,結果如下:
<?
$conn = mysql_connect("localhost","root","123");
mysql_select_db("vote", $conn);
$strSql = "select * from vote order by vNo";
$result = mysql_query($strSql, $conn);
?>
<html>
<title>polls</title>
<body>
	<center>
	<h1>線上投票</h1>

	<table border="1">
		<tr>
			<td>標號</td>
			<td></td>
			<td>投票選項</td>
			<td>照片</td>
			<td>累計票數</td>
		</tr>
		<?if ($result && mysql_num_rows($result) > 0) { ?>	//如果有抓到資料才要顥示內容,如果沒有就算了
			<tr>
				<td align = 'Center'>0001</td>
				<td align = 'Center'><a href=count.php?no=0001><img src="vote.png" border="1"></a></td>
				<td align = 'Center'>cdfu</td>
				<td align = 'Center'><img src="./images/cdfu.jpg" border="0" width="100" height="60"></td>
				<td align = 'Center'>4096</td>
			</tr>
		<? } ?>
	
	</table>

	</center>
</body>
</html>
補充說明:
Line 01-06 是連接資料庫並 SELECT TABLE 資料到 $result 變數
Line 21 是判斷「如果有抓到資料才需要顯示明細資料」
Line 29 是對應 Line 21 的右括號
原第一步中Line 24-28因為這裡發文的字數限制才刪除掉,不是別的原因
加入「重覆出現的部份」後,結果如下

	<table border="1">
		<tr>
			<td>標號</td>
			<td></td>
			<td>投票選項</td>
			<td>照片</td>
			<td>累計票數</td>
		</tr>
		<?if ($result && mysql_num_rows($result) > 0) { ?>	//如果有抓到資料才要顥示內容,如果沒有就算了
			<?while ($row = mysql_fetch_array($result)){ [/b][/b] ?>	//將資料逐筆取出的標準寫法
				<tr>
					<td align = 'Center'><? echo $row['vNo'] ?></td>
					<td align = 'Center'><a href=count.php?no=<? echo $row['vNo']; ?>><img src="vote.png" border="1"></a></td>
					<td align = 'Center'><? echo $row['vName']; ?></td>
					<td align = 'Center'><img src="<? echo $row['vName']; ?>" border="0" width="100" height="60"></td>
					<td align = 'Center'><? echo $row['vCnt']; ?></td>				
				</tr>
			<? } ?>
		<? } ?>
	</table>
因為字數限制,這裡只貼前一步的Line13-31的部份,其餘部份不變

其中差別在於
Line 10 : 將$result中每一筆資料逐筆取出的標準寫法
Line 12-16 : 以php變數取代原本隨便輸入的資料
Line 18 : 與 Line 10 對應的右括號
總裁 iT邦好手 1 級 ‧ 2011-08-26 10:15:44 檢舉
我在海綿寶寶的心目中果然是排在鐵大前面....哈哈
其實
因為這裡有字數限制
不然前面應該還有一個8192票的cafequeenrock
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

2 個回答

6
wiseguy
iT邦超人 1 級 ‧ 2011-08-25 21:10:01
最佳解答

if ($result && mysql_num_rows($result) > 0)
如果 SQL 執行成功 (不成功則 $result 是 false)
而且上面的 select 指令是有查到資料的 (recordset 筆數 > 0)
才進行下面的逐筆取出。

while ($row = mysql_fetch_array($result))
這是從 recordset 取出一筆,並把每一欄位放在 $row 裡。
假如有個表有三欄 name, password, id
那麼 $row 就會是個陣列如下:
$row[0] = 'John Wolf';
$row['name'] = 'John Wolf';
$row[1] = 'mypassword';
$row['passowrd'] = 'mypassword';
$row[2] = 'john';
$row['id'] = 'john';

如果已經取完了,$row 就會是空陣列,也就導致 while 迴圈結束。

4
gooledh
iT邦新手 1 級 ‧ 2011-08-26 09:15:20

tonychen168提到:
以下這兩句什麼意思 , 老師說初學者 , 遇到迴圈陣列往往想不通就掛了 , 不知有什麼辦法可以突破這關呢 ?

其實我當初學寫程式也是不懂迴圈,陣列是在搞什麼鬼(我是無師自通的)
不過寫久了程式後
就會漸漸了解其用途了
先寫出個一二個問題不要死困擾在這個點
不知為何有時候當下想不透可是過一段時間就會突然靈光一閃就想通了

我要發表回答

立即登入回答