返回主頁
    .
    .
    .
商業數據程式分析
SQL資料分析
scipy統計數據分析
人工智慧概論(通識)
python商業預測
商用多媒體設計
企業倫理
VB.NET程式
C++程式
C#程式
JAVA程式
python基礎
python網頁Django
python大數據分析
python解線性代數
python解數學微積分
python人工智慧概論
資料庫應用
網頁與動畫設計
Bootstrap
Html5+CSS+javascript
互動網頁程式設計
PHP
Unity遊戲程式
CocosCreator遊戲
Solar2D遊戲
網頁遊戲:Scratch
遊戲引擎:Construct
AppInventor手機程式
智慧手機程式(jQM)
ionic+angularJS
Android手機程式
多媒體概論
Flash 3D商務網站
電子商務實作Asp
Project遠距教學
數典實作
Office實用技巧
PDA程式
出書一
出書二
初級網頁製作
傳醫概論
    .
    .
    .
    .


 


 
 
陳擎文教學網:互動網頁程式設計(PHP,asp.net)
所需相關的工具與知識:
 資料庫操作 -- Access,或SQL server
 資料庫程式 -- SQL 語法
 Dreamweaver-- 坊間最常用來製作網頁的基本軟體
 Visual Studio .NET (ASP.NET)-- 坊間最常用來製作與伺服器資料庫連線的網頁工具
PHP, ASP.NET程式--二一種常見的互動網頁程式
 VB.NET程式-- 一種常見的視窗程式
 
  上課程式碼即時貼網站 線上黑板( Online blackboard) 上課即時貼(guestBook) 4月30日範例 有道翻譯
  找工作 小兵立大功 104人力銀行 yes123求職網 1111人力銀行
  考試題目 考試題目(Exam) 畢業門檻(Graduation threshold) 2018通識課規定  
  Visual Studio 2017 免費版下載(download free)only for windows 10 免費下載(Community社群版本) 安裝步驟說明    
  Goole 輸入法(Input software) Goole輸入法(Input:exe) Goole 輸入法(Input:zip) online goole input(中文) online goole input(英文)
  漢語拼音 查詢某中文字的拼音 注音-漢語拼音 對照表(1) 注音-漢語拼音 對照表(2) Indonesia Pronunciation vs Chinese
  範例網站示範:dreamweaver 商務網站 商品搜尋網 留言板 電子報
    新聞發佈系統 會員管理系統 討論區  
  範例網站示範:vb.net+asp.net+網頁模板 商品搜尋網 訂閱電子報網 討論區 會員管理系統
    新聞發佈系統 一般留言板    
 
 
 
二,第二種後端伺服器網頁程式:PHP(simplified PHP)


Chp1. 架站練習,與蒐集已經寫好的各類互動網站

Chp2. PHP基本,變數,算術運算子,比較運算子,邏輯運算子

Chp3. 選擇控制結構

Chp4. html→php→html,之間傳遞參數,與轉換網址

Chp5. 陣列

Chp6. 各種迴圈

Chp11. 在網頁之間傳遞參數的cookie與session

Chp12. 物件變數,物件變數陣列

Chp13. PHP讀取資料庫方法一:程序導向的介面:mysqli_connect()

Chp15. PHP讀取資料庫方法三:物件PDO:$result=$conn->query($sql)

Chp16. ajax非同步http請求

 
 
常用指令:
(1)echo 中文,不顯示亂碼
header('Content-Type: text/html; charset=utf-8');
 
Chp1 : 架站練習,PHP互動網站
(1) 01.商業資訊系統的三層架構

商業資訊系統的三層架構:
A.客戶端app(client,前端):html,app
B.伺服器網頁(server,後端):php,asp.net,python-django
C.資料庫(database):mySQL,SQL server

1 01.使用Apache架站

01.下載架站軟體:下載phpStudy

下載phpStudy V8.1

02.練習範例:源碼
A.貓走路網頁(html)
B.網頁模板(html)

C.PHP討論區範例(php+mySQL資料庫)
D.discuz論壇範例(php+mySQL資料庫)
解壓縮,將upload複製到www
帳號密碼root


常用的論壇程式:Molyx,Discuz,PHPwind,BMB
範例:
常見的的論壇程式有: 
1. vBB (PCZone ) 
2. IPB ( MSFN ) 
3. phpBB ( 竹貓
4. Discuz ( 大多數中文網站載點二
5. PHPWind ( 數位男女 )

 
Chp2.PHP基本,變數,算術運算子,比較運算子,邏輯運算子
1 輸出一段文字

<?php
echo "大家新年快樂" ;
?>

2 註解

<?php
#  第一種註解 
// 第二種註解
/* 第三種註解
可以註解很多行
*/
echo "大家新年快樂" ;
?>

3

變數

$a

<?php
$a = 5;
$b = 6;
echo $a+$b;
?>

4

字串運算子

$a.$b.$c

<?php
$a = "您總共購買";
$b = "1000";
$c = "元";
$a = $a.$b.$c;
echo $a;
?>

1.祝福大家:<?php
echo "新年快樂,恭喜發財。";

echo "<br/>2.";
$a = 500;
$b = 600;
echo $a+$b."元";

echo "<hr/>3.";
$a = "你總共購買";
$b = 1100;
$c ="元";
//$a =$a.$b.$c;
echo $a.$b.$c;
?>

5

算數運算子

+(加法)
-(減法)
*(乘法)
/(除法)
%(取餘數)

<?php
$a = 10;
echo $a+5;
echo "<br/>";
echo $a-5;
echo "<br/>";
echo $a*5;
echo "<br/>";
echo $a/5;
echo "<br/>";
echo $a%3;
?>

6

比較運算子

等於(==)
不等於(!=)
大於(>)
小於(<)
大於等於(>=)
小於等於(<=)

var_dump($a)
//輸出變數$a的資料型態(對true,或錯false)

<?php
$a = 1>2;
var_dump($a); //輸出變數$a的資料型態(對true,或錯false)

echo '<br>';

$b = 1<2;
var_dump($b);
?>

比較運算子
運算子 意義 範例 說明
== 相等 $a == $b $a等於$b
=== 全等 $a === $b $a等於$b, 
且資料格式相同。
!= 不相等 $a != $b $a不等於$b
<>  不相等 $a <> $b $a不等於$b
!== 不全等 $a !== $b $a不等於$b, 
或資料格式不相同。
小於 $a < $b $a小於$b
大於 $a > $b $a大於$b
<= 小於或等於 $a <= $b $a小於或等於$b
>= 大於或等於 $a >= $b $a大於或等於


7

邏輯運算子

與(and、&&)
或(or、||)
僅一(xor)
不是(!)

var_dump($a)
//輸出變數$a的資料型態(對true,或錯false)

<?php
$a = (5>6 or 8<9);
var_dump($a);
echo '<br>';

$b = (5>6 and 8<9);
var_dump($b);
echo '<br>';

$c = !(5>6); //負負得正,變成true
var_dump($c);
?>

邏輯運算子(Logical Operators)
運算子 同義 意義 範例 說明
and && $a and $b $a與$b皆為真
or || $a or $b $a與$b至少有一個為真
xor   僅一 $a xor $b $a與$b僅有一個為真
!   不是 !$a $a不為真
&& and $a && $b $a與$b皆為真
|| or $a || $b $a與$b至少有一個為真

 

 
Chp3. 選擇控制結構
1

if控制結構

if(條件){
子句;
}

<?php
$a = 7;
$b = 6;
if($a >= $b){
echo $a."大於等於".$b;
}
?>

echo "$a大於等於$b";

2

if…else…控制結構

if(條件){
子句一;
}else{
子句二;
}

<?php
$a = 6;
$b = 7;
if($a >= $b){
echo $a."大於等於".$b;
}else{
echo $a."小於".$b;
}
?>

echo "$a大於等於$b";
echo "$a小於$b";

3

 

if…elseif…else…控制結構

if(條件一){
子句一;
}elseif(條件二){
子句二;
}else{
子句三;
}

<?php
$a = 6;
$b = 6;
if($a > $b){
echo "$a大於等於$b";
}elseif($a==$b){
echo "$a等於$b";
}else{
echo "$a小於$b";
}
?>

4

 

switch 控制結構

switch($i){
case 1:
子句一;
break;
case 2:
子句二;
break;
case 3:
子句三;
break;
default:
子句四;
break;
}

<?php
$a=80;
switch(true){
case $a==100:
echo $a."滿分";
break;
case $a>=85 && $a<100:
echo $a."分,好成績";
break;
case $a>=65 && $a<85:
echo $a."分,還不錯";
break;
case $a>=50 && $a<65:
echo $a."分,要加油";
break;
case default:
echo $a."分,認真點";
break;
}
於$b";
}
?>

5

 

三元運算子(?:)控制結構

echo 條件?子句一:子句二;

變數==(條件)?子句一:子句二;

<?php
$a=80;
echo ($a>=0)?"及格":"不及格";
?>

 
Chp4. html→php→html,之間傳遞參數,與轉換網址
目錄 4-1傳回主機,計算加法(txt顯示) 4-5註冊會員(php讀取html5各種元件) 4-6單選題考試(php讀取radiobutton) 4-7複選購物總金額(php讀取checkbox) 4-9下拉選單衣服樣式(php讀取selec)
1

表單資料上傳
(從html傳遞參數給php)
表單  method="post" 

取得表單上的欄位值:
$_POST["欄位變數"]

1.下載表單的html語法,建立exp04-1.html

2.填入參數:
 method="post"
action="exp04-1.php"

填入三個欄位的命名:
input type="text" name="t1"
input type="text" name="t2"

3.撰寫exp4-18.php
<?php

$a = $_POST["t1"];
$b = $_POST["t2"];
$c = $a+$b;
echo "總和為:".$c;

?>

4.結果範例

網頁間傳遞資料的方法有二種:
(都必須大寫)
(1).GET:有上傳資料量的限制,一般傳送大量的資料或者上傳檔案都不會使用GET
(2).POST:適合用來傳送大量的資料,直接的由伺服器接收。

  網址顯示資料否? 可否在網址修改資料?
POST 不會 不行
GET

(3).所以用POST傳遞資料比較安全

(4)在PHP接收所傳遞來資料的指令
$_POST["欄位變數"]
$_GET
["欄位變數"]

5

註冊會員
php讀取html5各種元件

各種html5元件,只有radio,checkbox要先檢查是否有值,isset($_POST["Radiousa"]),若有值才進行計算,若沒判斷會有錯誤

(從html傳遞參數給php)

1.下載表單的html語法 ,建立exp04-5.html

2.填入參數:
 method="post"
action="exp04-5.php"

填入三個欄位的命名:
input type="text" name="a1"
input type="text" name="a2"

3.撰寫 exp04-5.php
<?php
$a1 = $_POST["a1"];

...

if(isset($_POST["a10"])){
$a10 = $_POST["a10"];
}else{
$a10 = false;
....
}
?>

4.結果範例

6

單選題考試

php讀取radiobutton單選鈕的name名稱,把value值儲存到該變數

(從html傳遞參數給php)

1.下載表單的html語法 ,建立exp04-6.html

2.填入參數:
 method="post"
action="exp04-6.php"

填入三個欄位的命名:
<label><input type="radio" name="Rusa" id="a1" value="1億人">1億人</label>
<label><input type="radio" name="Rusa" id="a2" value="2億人">2億人</label>

3.撰寫 exp04-6.php
<?php
$Rusa = $_POST["Rusa"];

$score=0;
if($Rusa=="3億人"){
$score=100;
}

?>

4.結果範例

7

複選購物總金額


php讀取checkbox複選選鈕的多個name名稱,並把value值儲存到該變數

但php讀取checkbox時要先判斷是否有值,isset($_POST["a1"]),若有值才進行計算,若沒判斷會有錯誤

(從html傳遞參數給php)

1.下載表單的html語法 ,建立exp04-7.html

2.填入參數:
 method="post"
action="exp04-7.php"

填入三個欄位的命名:
<input type="checkbox" name="a1" value="iphoneX手機">iphoneX手機:NT$35,000元

3.撰寫 exp04-7.php
<?php
$txt="";
$money=0;
if(isset($_POST["a1"])){
$txt .= $_POST["a1"].",";
$money +=35000;
}
if(isset($_POST["a2"])){
$txt .= $_POST["a2"].",";
$money +=27000;
}
if(isset($_POST["a3"])){
$txt .= $_POST["a3"].",";
$money +=30000;
}
if(isset($_POST["a4"])){
$txt .= $_POST["a4"].",";
$money +=16000;
}

?>

4.結果範例

9

下拉選單衣服樣式

php讀取select的name名稱,數值為value

(從html傳遞參數給php)

1.下載表單的html語法 ,建立exp04-9.html

2.填入參數:
 method="post"
action="exp04-9.php"

填入三個欄位的命名:
<label class="col-sm-2" for="list01name">選擇服裝款式: </label>
<select class="col-sm-10" name="list01name" class="form-control">
<option value="牛仔褲500元">牛仔褲</option>
<option value="連身裙800元">連身裙</option>
<option value="襯衫1500元">襯衫</option>
<option value="西裝5000元">西裝</option>
<option value="夾克2000元">夾克</option>
</select>

3.撰寫 exp04-9.php
<?php
echo "你所購買的衣服樣式為:".$_POST["list01name"]."<br/>size為:".$_POST["list02name"];
?>
4.結果範例

 
Chp5. 陣列
目錄 三種一維陣列的使用 foreach的二種格式 exp5-7複選購物總金額 exp5-8計算各科全班平均成績
1

三種一維陣列的使用

隨機取得陣列的編號:array_rand()

<?php
echo "//第一種陣列 $a[0] =...";
$a[0] = "Did you lose weight intentionally?妳有故意在減肥嗎?";
$a[1] = "I've got missed calls. 我有未接來電耶~";
$a[2] = "I wonder which shoes to put on. 該穿那雙鞋呢?";
$a[3] = "I don't have a good appetite these days. 最近都沒什麼胃口";
$a[4] = "Don't even think about it~ 想都別想啦!!";

echo "顯示第1句英文:<br/>";
echo $a[0]."<br/>";

echo "顯示所有英文:<br/>";
for($i=0;$i<=4;$i++){
echo $a[$i]."<br/>";
}

echo "<br/><br/>";
/////////////////////////////////////////////////////////
echo "//第二種陣列 $a = array(,,,)";
$b = array("Did you lose weight intentionally?妳有故意在減肥嗎?",
"I've got missed calls. 我有未接來電耶~",
"I wonder which shoes to put on. 該穿那雙鞋呢?",
"I don't have a good appetite these days. 最近都沒什麼胃口",
"Don't even think about it~ 想都別想啦!!");

echo "顯示第2句英文:<br/>";
echo $b[1]."<br/>";

echo "顯示所有英文:<br/>";
foreach($b as $v){
echo "$v<br/>";
}
echo "<br/><br/>";
/////////////////////////////////////////////////////////
echo "//第三種陣列 $a = array(索引=>值,,,)";
$c = array(0=>"Did you lose weight intentionally?妳有故意在減肥嗎?",
1=>"I've got missed calls. 我有未接來電耶~",
2=>"I wonder which shoes to put on. 該穿那雙鞋呢?",
3=>"I don't have a good appetite these days. 最近都沒什麼胃口",
4=>"Don't even think about it~ 想都別想啦!!");

echo "顯示第3句英文:<br/>";
echo $c[2]."<br/>";

echo "顯示所有英文:<br/>";
print_r($c);

echo "<br/><br/>";
/////////////////////////////////////////////////////////
echo "//隨機取得陣列的編號:array_rand()<br/>";
$key = array_rand($c);
echo($c[$key]);
?>
4.結果範例

2

陣列編號可以是中英文 $a['李大同'] =..."

foreach的二種格式
foreach($tel as $v){
...
}

foreach($tel as $i=>$v){
...
}

<?php
//////////////////////////////////////////////////
echo "//陣列編號可以是中英文 $a['李大同'] =...";
$tel["李大同"] = "0912123456";
$tel["張花花"] = "0956789741";
$tel["林美美"] = "0985274136";
$tel["宋妮妮"] = "0945695174";
$tel["吳盼盼"] = "0995715325";

echo "顯示第張花花同學電話:<br/>";
echo $tel["張花花"]."<br/>";

echo "顯示所有同學電話:<br/>";
foreach($tel as $v){
echo $v."<br/>";
}

echo "<br/><br/>";
//////////////////////////////////////////////////
echo "// foreach第二種格式,foreach(陣列 as 索引編號 =>值){...}";
$score["李大同"] = 90;
$score["張花花"] = 85;
$score["林美美"] = 60;
$score["宋妮妮"] = 99;
$score["吳盼盼"] = 75;

echo "顯示所有資料:<br/>";
foreach($tel as $i=>$v){
echo $i."同學的分數".$v."<br/>";
}

?>

4.結果範例

7

複選購物總金額


php讀取checkbox複選選鈕的多個name陣列名稱phone[],並把value值儲存到該變數$_POST["phone"]

但php讀取checkbox時要先判斷是否有值,isset($_POST["a1"]),若有值才進行計算,若沒判斷會有錯誤

(從html傳遞參數給php)

1.下載表單的html語法 ,建立exp06-7.html

2.填入參數:
 method="post"
action="exp06-7.php"

填入三個欄位的命名:
<input type="checkbox" name="phone[]" value="iphoneX手機">iphoneX手機:NT$35,000元

3.撰寫 exp06-7.php
<?php
if(isset($_POST["phone"])){
$txt="";
foreach($_POST["phone"] as $v){
$txt .= $v."<br/>";
}
echo "你所採購的物品為:<br/>$txt";

?>
4.結果範例

8

計算各科全班平均成績

前端網頁用多個陣列stuname[],數學math[],英文english[]

label不是form元素,只能用<input type='hidden' name='stu[0][]' value='宋妮妮'>

1.下載表單的html語法 ,建立exp06-8.html

2.填入參數:
 method="post"
action="exp06-8.php"

填入三個欄位的命名:
<label class="col-sm-offset-1 col-sm-3 bg-info text-center">李大同</label>
<input type="hidden" name="stuname[]" value="李大同">
<label class="col-sm-3 bg-danger text-center">
<input type="text" value="85" size="6" maxlength="3 class="form-control" name="math[]">
</label>
<label class="col-sm-3 bg-success text-center">
<input type="text" value="65" size="6" maxlength="3 class="form-control" name="english[]">

3.撰寫 exp06-8.php
<?php
echo "//label不是form元素,只能用<input type='hidden' name='stuname[]' value='宋妮妮'><br/>";
$txt="";
$stuname = $_POST["stuname"];
foreach($stuname as $v){
$txt .= $v.",";
}
echo "學生姓名:$txt <br/>";

/////////////////////////////////
$txt="";
$math = $_POST["math"];
foreach($math as $v){
$txt .= $v.",";
}
echo "數學成績:$txt <br/>";

/////////////////////////////////
$txt="";
$english = $_POST["english"];
foreach($english as $v){
$txt .= $v.",";
}
echo "英文成績:$txt <br/>";

/////////////////////////////////
echo "數學平均成績:".array_sum($math)/count($math)."<br/>";
/////////////////////////////////
echo "英文平均成績:".array_sum($english)/count($english)."<br/>";


?>
4.結果範例

 
 
 
Chp6. 各種迴圈
目錄 6-1各種計數迴圈(for,while) 6-2不用計數器的迴圈(while) 6-3搜尋字串:用函數\$key=array_search() 6-4搜尋字串,不用計數器的while迴圈
6-5搜尋字串,用計數器的while迴圈(2) 6-6搜尋字串,用函數array_search(陣列)>0找到,=false沒找到 6-7複選購物總金額(php讀取checkbox的多個name陣列phone[] 6-8計算各科全班平均成績(前端網頁用陣列stuname[],數學math[])
6-9計算各科全班平均成績(前端網頁用一個陣列stu[][])
練習範例 6-1各種計數迴圈(for,while) 6-2不用計數器的迴圈(while) 6-3搜尋字串:用函數\$key=array_search() 6-4搜尋字串,不用計數器的while迴圈
6-5搜尋字串,用計數器的while迴圈(2) 6-6搜尋字串,用函數array_search(陣列)>0找到,=false沒找到 6-7複選購物總金額(php讀取checkbox的多個name陣列phone[] 6-8計算各科全班平均成績(前端網頁用陣列stuname[],數學math[])
6-9計算各科全班平均成績(前端網頁用一個陣列stu[][]) 6-10計算各科全班平均成績(同一網頁傳給自己,用stu[][])
1

各種計數迴圈

for($i=1;$i<=4;$i++){
...
}

$i=1;
while($i<=4){
.....
$i++;
}

$i=1;
do{
....
$i++;
}while($i<=4);

foreach($stu as $v){
....
}

foreach($stu as $key=>$v){
....
}

迴圈印到第3個,跳過不印,其它繼續:continue

迴圈印到第3個,就中斷印出陣列:break

<?php

$stu = array(1=>"Orange","Banana","Grape","Apple","Flower");

////////////////////////////////////////////////
echo "<br/>//for迴圈印出陣列:<br/>";
for($i=1;$i<=4;$i++){
echo $stu[$i].", ";
}

////////////////////////////////////////////////
echo "<br/><br/>//while迴圈印出陣列:<br/>";
$i=1;
while($i<=4){
echo $stu[$i].", ";
$i++;
}

////////////////////////////////////////////////
echo "<br/><br/>//do...while迴圈印出陣列:<br/>";
$i=1;
do{
echo $stu[$i].", ";
$i++;
}while($i<=4);

////////////////////////////////////////////////
echo "<br/><br/>//迴圈印到第3個,跳過不印,其它繼續:continue<br/>";
for($i=1;$i<=4;$i++){
if($i==3) continue;
echo $stu[$i].", ";
}

////////////////////////////////////////////////
echo "<br/><br/>//迴圈印到第3個,就中斷印出陣列:break<br/>";
$i=1;
while($i<=4){
if($i==3)break;
echo $stu[$i].", ";
$i++;
}

////////////////////////////////////////////////
echo "<br/><br/>//foreach迴圈印出陣列:<br/>";
foreach($stu as $v){
echo $v.", ";
}

////////////////////////////////////////////////
echo "<br/><br/>//foreach迴圈印出陣列(也有印出編號):<br/>";
foreach($stu as $key=>$v){
echo $key."=".$v.", ";
}
?>

4.結果範例

2

不用計數器的迴圈

不用計數器的while迴圈,印出陣列:while(($v=current($陣列)) != NULL){..next(陣列)...

不用計數器的while迴圈,印出陣列:while(($v=next($陣列)) != NULL){...

不用計數器的while迴圈,印出陣列:while((list($key,$v) =each($fruit))){..

這個方法最適合非數字key編號陣列,而是文字編號陣列

<?php

$fruit = array(1=>"Orange","Banana","Grape","Apple","Flower");

////////////////////////////////////////////////
echo "<br/>//不用計數器的while迴圈,印出陣列:while(($v=current($陣列)) != NULL){..next(陣列)...<br/>";
while(($v=current($fruit)) != NULL){
echo $v." ," ;
next($fruit);
}

reset($fruit);
echo "<br/><br/>";
////////////////////////////////////////////////
echo "<br/>//不用計數器的while迴圈,印出陣列:while(($v=next($陣列)) != NULL){...<br/>";
while(($v=next($fruit)) != NULL){
echo $v." ," ;
}

reset($fruit);
echo "<br/><br/>";
////////////////////////////////////////////////
echo "<br/>//不用計數器的while迴圈,印出陣列:while((list($key,$v) =each($fruit))){...<br/>";
echo "//這個方法最適合非數字key編號陣列,而是文字編號陣列<br/>";
while((list($key,$v) =each($fruit))){
echo $key."個數值為".$v." ," ;
}

echo "<br/><br/>";
////////////////////////////////////////////////
echo "<br/>//不用計數器的while迴圈,印出陣列:while((list($key,$v) =each($fruit))){...<br/>";
echo "//這個方法最適合非數字key編號陣列,而是文字編號陣列<br/>";
$tel["李大同"] = "0912123456";
$tel["張花花"] = "0956789741";
$tel["林美美"] = "0985274136";
$tel["宋妮妮"] = "0945695174";
$tel["吳盼盼"] = "0995715325";
while(list($key,$v)=each($tel)){
echo $key."電話為".$v."<br/>" ;
}
?>

4.結果範例

3

搜尋字串,不用計數器的while迴圈,印出陣列

while(list($key,$v) = each($fruit)){
if($v==$txt){
....
break;
}
}

搜尋字串:用函數:
$key = array_search('字串',陣列)
找不到傳回false
$key是找到的位置

<?php

$fruit = array(1=>"Orange","Banana","Grape","Apple","Flower");

////////////////////////////////////////////////
echo "<br/>//搜尋字串,不用計數器的while迴圈,印出陣列:<br/>";
$txt="Apple2";
while(list($key,$v) = each($fruit)){
if($v==$txt){
echo "找到 $txt";
break;
}
if($key==count($fruit)){
echo "沒有找到 $txt";
}

echo "<br/><br/>";
////////////////////////////////////////////////
echo "<br/>//搜尋字串:用函數:\$key = array_search('字串',陣列)。找不到傳回false<br/>";
$txt="Apple3";
$key = array_search($txt,$fruit);
if($key==false) echo "找不到".$txt;
else echo "找到".$txt.",在第".$key."個位置";
}
?>

4.結果範例

4

搜尋字串,不用計數器的while迴圈,印出陣列

while(($v=current($fruit)) != NULL){
if($v==$txt){
....
break;
}
}

<?php

$fruit = array(1=>"Orange","Banana","Grape","Apple","Flower");

////////////////////////////////////////////////
echo "<br/>//搜尋字串,不用計數器的while迴圈,印出陣列:<br/>";
$txt="Apple";
while(($v=current($fruit)) != NULL){
if($v==$txt){
echo "找到 $txt";
break;
}
if(key($fruit)==count($fruit)){
echo "沒有找到 $txt";
}
next($fruit);
}
?>

4.結果範例

5

搜尋字串,用計數器的while迴圈,印出陣列

$i=1;
while($i<=count($fruit)){
if($fruit[$i]==$txt){
...
break;
}
$i++;
}

<?php

$fruit = array(1=>"Orange","Banana","Grape","Apple","Flower");

////////////////////////////////////////////////
echo "<br/>//搜尋字串,用計數器的while迴圈,印出陣列:<br/>";
$txt="Apple2";
$i=1;
while($i<=count($fruit)){
if($fruit[$i]==$txt){
echo "找到 $txt";
break;
}
if($i==4){
echo "沒有找到 $txt";
}
$i++;
}
?>

4.結果範例

6

搜尋字串,不用迴圈,用函數:array_search(陣列)>0找到,=0沒找到

if(array_search($txt,$fruit) ==0){
...;
}

if( ($key =array_search($txt,$fruit)) !=0){
...
}

<?php

$fruit = array(1=>"Orange","Banana","Grape","Apple","Flower");

////////////////////////////////////////////////
echo "<br/>//搜尋字串,不用迴圈,用函數:array_search(陣列)<br/>";
$txt="Apple2";
if(array_search($txt,$fruit) ==0){
echo "沒有找到 $txt";
}else{
echo "找到 $txt";
}

echo "<br/><br/>";
////////////////////////////////////////////////
echo "<br/>//方法二,一樣方法,函數:array_search(陣列)<br/>";
$txt="Grape";
if( ($key =array_search($txt,$fruit)) !=0){
echo "找到 $txt";
}else{
echo "沒有找到 $txt";
}
?>

4.結果範例

7

複選購物總金額


php讀取checkbox複選選鈕的多個name陣列名稱phone[],並把value值儲存到該變數$_POST["phone"]

但php讀取checkbox時要先判斷是否有值,isset($_POST["a1"]),若有值才進行計算,若沒判斷會有錯誤

(從html傳遞參數給php)

1.下載表單的html語法 ,建立exp06-7.html

2.填入參數:
 method="post"
action="exp06-7.php"

填入三個欄位的命名:
<input type="checkbox" name="phone[]" value="iphoneX手機">iphoneX手機:NT$35,000元

3.撰寫 exp06-7.php
<?php
if(isset($_POST["phone"])){
$txt="";
foreach($_POST["phone"] as $v){
$txt .= $v."<br/>";
}
echo "你所採購的物品為:<br/>$txt";

?>
4.結果範例

8

計算各科全班平均成績

前端網頁用多個陣列stuname[],數學math[],英文english[]

label不是form元素,只能用<input type='hidden' name='stu[0][]' value='宋妮妮'>

1.下載表單的html語法 ,建立exp06-8.html

2.填入參數:
 method="post"
action="exp06-8.php"

填入三個欄位的命名:
<label class="col-sm-offset-1 col-sm-3 bg-info text-center">李大同</label>
<input type="hidden" name="stuname[]" value="李大同">
<label class="col-sm-3 bg-danger text-center">
<input type="text" value="85" size="6" maxlength="3 class="form-control" name="math[]">
</label>
<label class="col-sm-3 bg-success text-center">
<input type="text" value="65" size="6" maxlength="3 class="form-control" name="english[]">

3.撰寫 exp06-8.php
<?php
echo "//label不是form元素,只能用<input type='hidden' name='stuname[]' value='宋妮妮'><br/>";
$txt="";
$stuname = $_POST["stuname"];
foreach($stuname as $v){
$txt .= $v.",";
}
echo "學生姓名:$txt <br/>";

/////////////////////////////////
$txt="";
$math = $_POST["math"];
foreach($math as $v){
$txt .= $v.",";
}
echo "數學成績:$txt <br/>";

/////////////////////////////////
$txt="";
$english = $_POST["english"];
foreach($english as $v){
$txt .= $v.",";
}
echo "英文成績:$txt <br/>";

/////////////////////////////////
echo "數學平均成績:".array_sum($math)/count($math)."<br/>";
/////////////////////////////////
echo "英文平均成績:".array_sum($english)/count($english)."<br/>";


?>
4.結果範例

9

計算各科全班平均成績

前端網頁用一個陣列stu[][],但是同一類,例如姓名stu[0][],數學stu[1][]

label不是form元素,只能用<input type='hidden' name='stu[0][]' value='宋妮妮'>

1.下載表單的html語法 ,建立exp06-9.html

2.填入參數:
 method="post"
action="exp06-9.php"

填入三個欄位的命名:
<label class="col-sm-offset-1 col-sm-3 bg-info text-center">李大同</label>
<input type="hidden" name="stu[0][]" value="李大同">
<label class="col-sm-3 bg-danger text-center">
<input type="text" value="85" size="6" maxlength="3" class="form-control" name="stu[1][]">
</label>
<label class="col-sm-3 bg-success text-center">
<input type="text" value="65" size="6" maxlength="3" class="form-control" name="stu[2][]">

3.撰寫 exp06-9.php
$txt="";
$stu = $_POST["stu"];
print_r($stu);

echo "<br/><br/>";
/////////////////////////////////
list($stuname,$math,$english) = $stu;

//////////////////////////
echo "//從二維陣列,拆解成幾個一維陣列,其中的stuname陣列<br/>";
while(list($key,$v)=each($stuname)){
echo $v.",";

}
echo "<br/><br/>";
///////////////////////////////////
echo "//用兩個迴圈,印出二維陣列<br/>";
foreach($stu as $v1){
foreach($v1 as $v2){
$txt .= $v2.",";
}
$txt .= "<br/>";
}
echo "學生姓名:<br/>$txt <br/>";

/////////////////////////////////
/////////////////////////////////
echo "//印出平均成績:<br/>";
echo "數學平均成績:".array_sum($math)/count($math)."<br/>";

/////////////////////////////////
echo "英文平均成績:".array_sum($english)/count($english)."<br/>";


4.結果範例

 
 
Chp11. 在網頁之間傳遞參數的cookie與session
練習範例 11-1建立背景顏色的cookie 11-2建立背景顏色的cookie陣列 11-3下拉選單設定cookie後,關閉瀏覽器再開啟,文字顏色設定還在 11-4session設定已登入網頁時間
1

cookie 儲存在客戶端瀏覽器的文字記錄 

用途;記錄購物車、會員登入,網頁style喜好設定,或瀏覽紀錄 

缺點1:如果用戶端的瀏覽器關閉 cookie 的使用,那就沒辦法記錄這些相關資訊((改善法:PHP4以後有 session 來替代))

缺點2:cookie 由於是儲存在用戶端電腦,所以被竊取的風險比較高(改善法:重要的資料應該盡量採用 session 來儲存)

限制1:目前每個瀏覽器最多只能儲存 300 個 cookie。

限制2:每個瀏覽器對單一網站只能儲存 20 的 cookie。

限制3:用戶端電腦的 cookie 只要關閉就沒辦法使用。

cookie指令:setcookie("變數名稱","內容","保存期限","路徑","網域","安全") 
後面三個可以省略 

注意:cookie指令前面不能有任何網頁輸出,所以若在網頁使用,第一行必須有 ob_start()才不會有錯誤 


建立背景顏色的cookie:
setcookie('bgcolor','pink',time()+1800秒) 

建立背景顏色的cookie:
setcookie('bgcolor','pink',mktime(0,0,0,10,15,2050)
 

讀取cookie指令:$_COOKIE["變數"] 
注意:讀取前要先測試,該變數是否存在?if(isset($_COOKIE["變數"]))..else... 

 

讓cookie失效,方法一:讓bgcolor值,過期 
A.指令一:$_COOKIE["變數","內容",time()-1800秒] 
B.指令二:$_COOKIE["變數","內容",mktime(0,0,0,10,15,2010) 

 

讓cookie失效,方法二:將bgcolor值,清空 
指令:$_COOKIE["變數",""] 

 

範例結果

 

<?php ob_start();
///////////////////////////////////////////////////
echo "//建立背景顏色的cookie:setcookie('bgcolor','pink',time()+1800秒) <br/>";
echo "//建立背景顏色的cookie:setcookie('bgcolor','pink',mktime(0,0,0,10,15,2050) <br/>";
//setcookie("bgcolor","pink",time()+1800);
setcookie("bgcolor","pink",mktime(0,0,0,10,15,2050))
;

///////////////////////////////////////////////////
echo "//查詢cookie的設定值:bgcolor <br/>";
echo "<a href='exp11-1a.php'>查詢cookie的設定值bgcolor</a> <br/>";
echo "<a href='exp11-1b.php'>瀏覽讀取cookie的網頁</a> <br/>";
echo "<a href='exp11-1c.php'>讓cookie失效,方法一:讓bgcolor值,過期</a> <br/>";
echo "<a href='exp11-1d.php'>讓cookie失效,方法二:將bgcolor值,清空</a> <br/>";
echo "<a href='exp11-1.php'>重新設定讓cookie的bgcolor值,pink</a> <br/>";

?>

exp11-1a.php

<?php ob_start();
///////////////////////////////////////////////////
///////////////////////////////////////////////////
if(isset($_COOKIE["bgcolor"])) echo "cookie變數bgcolor的內容為:".$_COOKIE["bgcolor"];
else echo "cookie變數bgcolor,不存在";

?>

exp11-1b.php

<style>
body{
background-color:<?php
if(isset($_COOKIE["bgcolor"])) echo $_COOKIE["bgcolor"];
else echo "yellow";
?>

}
</style>

exp11-1c.php

<?php ob_start();

if(isset($_COOKIE["bgcolor"])) {
// echo "已經將cookie變數bgcolor過期,7600秒(60分)了:";
// setcookie("bgcolor","pink",time()-7600);
echo "已經將cookie變數bgcolor過期,2010年10月15)了:";
setcookie("bgcolor","pink",mktime(0,0,0,10,15,2010));
}
else echo "cookie變數bgcolor,不存在";

?>

exp11-1d.php

<?php ob_start();
if(isset($_COOKIE["bgcolor"])) {
echo "已經將cookie變數bgcolor,清空了:";
setcookie("bgcolor","");
}
else echo "cookie變數bgcolor,不存在";

?>

2

cookie陣列 

cookie指令:setcookie("\array["變數"]","內容","保存期限","路徑","網域","安全") 
後面三個可以省略 
注意,這裡陣列,前面不需要$ 


建立背景顏色的cookie:
setcookie('mycolor[0]','pink',time()+1800秒) 

建立文字顏色的cookie:
setcookie('mycolor[1]','pink',mktime(0,0,0,10,15,2020) 

讀取cookie指令:$_COOKIE["變數"] 

接收cookie變數:$_COOKIE['bgcolor']

讓cookie失效,方法一:讓bgcolor值,過期 
指令一:$_COOKIE["變數","內容",time()-1800秒] 
指令二:$_COOKIE["變數","內容",mktime(0,0,0,10,15,2010) 

讓cookie失效,方法二:將bgcolor值,清空 
指令:$_COOKIE["mycolor[bg]",""] 


範例結果

<?php ob_start();
echo "//建立背景顏色的cookie:setcookie('mycolor[0]','pink',time()+1800秒) <br/>";
echo "//建立文字顏色的cookie:setcookie('mycolor[1]','pink',mktime(0,0,0,10,15,2020) <br/>";
//setcookie("mycolor[bg]","pink",time()+1800);
setcookie("mycolor[bg]","pink",mktime(0,0,0,10,15,2050));
setcookie("mycolor[txt]","blue",mktime(0,0,0,10,15,2050));

///////////////////////////////////////////////////
echo "//查詢cookie的設定值:bgcolor <br/>";
echo "<a href='exp11-2a.php'>查詢cookie的設定值bgcolor</a> <br/>";
echo "<a href='exp11-2b.php'>瀏覽讀取cookie的網頁</a> <br/>";
echo "<a href='exp11-2c.php'>讓cookie失效,方法一:讓bgcolor值,過期</a> <br/>";
echo "<a href='exp11-2d.php'>讓cookie失效,方法二:將bgcolor值,清空</a> <br/>";
echo "<a href='exp11-2.php'>重新設定讓cookie的mycolor的bg,txt顏色值,pink</a> <br/>";

?>

exp11-2a.php

<?php ob_start();
if(isset($_COOKIE['mycolor']['bg']) and isset($_COOKIE['mycolor']['txt'])){
echo "cookie變數mycolor的背景顏色內容為:".$_COOKIE['mycolor']['bg'];
echo "<br/>cookie變數mycolor的文字顏色內容為:".$_COOKIE['mycolor']['txt'];
}else{
echo "COOKIE變數不存在";
}

?>

exp11-2b.php

<style>
body{

background-color:<?php
if(isset($_COOKIE['mycolor']['bg']) and isset($_COOKIE['mycolor']['txt'])){
echo $_COOKIE["mycolor"]["bg"];
}else{
echo "yellow";
}

?>;
color:<?php
if(isset($_COOKIE['mycolor']['bg']) and isset($_COOKIE['mycolor']['txt'])){
echo $_COOKIE["mycolor"]["txt"];
}else{
echo "red";
}
?>;

}
</style>

exp11-2c.php

<?php ob_start();
if(isset($_COOKIE['mycolor']['bg']) and isset($_COOKIE['mycolor']['txt'])){
// echo "已經將cookie變數bgcolor過期,7600秒(60分)了:";
// setcookie("mycolor[bg]","pink",time()-7600);
echo "已經將cookie變數mycolor過期,2010年10月15)了:";
setcookie("mycolor[bg]","pink",mktime(0,0,0,10,15,2010));
setcookie("mycolor[txt]","blue",mktime(0,0,0,10,15,2010));
}
else echo "cookie變數mycolor,不存在";

?>

exp11-2d.php

<?php ob_start();
if(isset($_COOKIE['mycolor']['bg']) and isset($_COOKIE['mycolor']['txt'])){
echo "已經將cookie變數mycolor,清空了:";
setcookie("mycolor[bg]","");
setcookie("mycolor[txt]","");

}
else echo "cookie變數mycolor,不存在";

?>

3

設定cookie後,關閉瀏覽器再開啟,文字顏色設定還在


三個if判別,(1)不是第一開啟網頁,根據下拉式選單的顏色顯示:
if(isset(\$_POST["selcolor"])){

三個if判別,(2)第一次開啟網頁,但已經有cookie設定:
if(isset(\$_COOKIE["cookiecolor"])){

三個if判別,(3)第一次開啟網頁,也沒有cookie設定,則文字顏色為黑色:else{}


 

範例結果

<?php
ob_start();
if(isset($_POST["selcolor"])){
//不是第一開啟網頁,根據下拉式選單的顏色顯示,並設定cookie
$mycolor = $_POST["selcolor"];
//設定cookie
}else if(isset($_COOKIE["cookiecolor"])){

//第一次開啟網頁,但已經有cookie設定
$mycolor = $_COOKIE["cookiecolor"];
}else{
//第一次開啟網頁,也沒有cookie設定,則文字顏色
為黑色
$mycolor = "black";
}

//設定cookie:
setcookie("cookiecolor",$mycolor,time()+36000);
?>

<style>
body{
font-size:18px;
}
p{
text-align:center;
color:<?php echo $mycolor; ?>;
}
h2{
text-align:center;
color:<?php echo $mycolor; ?>;
}
.author{
text-align:right;
color:<?php echo $mycolor; ?>;
}
div{
float:left; /* 讓區塊與下個區塊由左至右排列 */
margin:10px;
}
</style>

4

session:儲存於伺服器端,不用擔心用戶禁用session的問題,但計錄檔案的負荷由伺服器承擔 
用途;重要或機密資訊,例如(用戶登入帳號,記錄購物車) 

缺點1:如果關閉瀏覽器過久(超過24分鐘),session的生命週期就結束
缺點2:若沒有關閉瀏覽器,但超過24分鐘沒有動作瀏覽器,session的生命週期也會結束
改善時間週期:若要延長24分鐘的限制,必須修改伺服器的php.ini設定

限制1:同一瀏覽器的前後網頁之間,才能彼此傳遞參數

 

一、啟用 Session : session_start() 
二、給變數值並記錄在伺服器上:$_SESSION['UserName']='Jordan'; 
三、取得 session 的值,使用 $_SESSION["變數名稱"]:echo $_SESSION['UserName'];
四、刪除 session:unset($_SESSION['變數名稱']);
或是session_destroy(); 


設定第一次登入的session變數:
$_SESSION['comeintime']=time () 

注意:$_SESSION["comeintime2"] 是字串,不是時間 
注意: 將$_SESSION["comeintime2"] 字串,轉換成時間 
注意:但是不能直接印出$date1,因為它的形態是時間,不是字串 

注意:要將時間轉成造成是:$date1->format('Y年n月j日 G時i分s秒') 

注意:結論:session是字串 
注意:不可寫成 $_SESSION['comeintime2'] = $date1;

 

讀取session變數指令:$_SESSION["變數"] 
注意:讀取前要先測試,該變數是否存在
if(isset($_SESSION["變數"]))..else... 


注意:$_SESSION["comeintime2"] 是字串,不是時間 
注意:要將時間轉成造成是:$date1->format('Y年n月j日 G時i分s秒') 
結論:session是字串 
所以要將session是字串 => 轉成時間 => 再轉成字串顯示format() 


日期時間的比較 diff()
$date2 = new DateTime();
$timediff = $date1->diff($date2);
$timediff->format('%h 時 %i 分 %s 秒');

 

讓session失效,方法一:刪除全部:session_unset() 

讓session失效,方法二:刪除某個:unset($_SESSION['x']) 

讓session失效,方法一:刪除全部:session_destroy() 


範例結果

<?php session_start();
echo "///////////////////////////////////////////////////<br/>";
echo "//一、啟用 Session : session_start() <br/>";
echo "//二、給變數值並記錄在伺服器上:\$_SESSION['UserName']='Jordan'; <br/>";
echo "//三、取得 session 的值,使用 \$_SESSION[\"變數名稱\"]:echo \$_SESSION['UserName'];<br/>";
echo "//四、刪除 session:unset(\$_SESSION['變數名稱']);或是session_destroy(); <br/>";

echo "<br/><br/>";
///////////////////////////////////////////////////
echo "//設定第一次登入的session變數:\$_SESSION['comeintime']=time () <br/>";
echo "//注意,若要使用日期時間前,務必要先設定時區,方法一: date_default_timezone_set('Asia/Taipei'),日本是Asia/Tokyo <br/>";
echo "//方法二: \$timezone = new DateTimeZone('Asia/Taipei');<br/>";

//date_default_timezone_set('Asia/Taipei');
$timezone = new DateTimeZone('Asia/Taipei');

 

echo "//注意:\$_SESSION[\"comeintime2\"] 是字串,不是時間 <br/>";
echo "//注意: 將\$_SESSION[\"comeintime2\"] 字串,轉換成時間 <br/>";
echo "//注意:但是不能直接印出\$date1,因為它的形態是時間,不是字串 <br/>";
echo "//注意:要將時間轉成造成是:\$date1->format('Y年n月j日 G時i分s秒') <br/>";
echo "//注意:結論:session是字串 <br/>";
echo "注意:不可寫成 \$_SESSION['comeintime2'] = \$date1;<br/>";

if(!isset($_SESSION['comeintime2'])){
//傳統time()寫法
//$_SESSION['comeintime2']=time();

/////////////////////////////////////////////////
//物件時間寫法:
$date1 = new DateTime('now',$timezone);
$_SESSION['comeintime2'] =$date1->format('Y-m-d H:i:s');
//注意:不可寫成 \$_SESSION['comeintime2'] = $date1;
}
///////////////////////////////////////////////////
echo "<br/><br/>";
echo "<a href='exp11-4a.php'>查詢第一次登入本網頁的時間</a> <br/>";
echo "<a href='exp11-4b.php'>查詢至今停留的時間</a> <br/>";
echo "<a href='exp11-4c.php'>刪除session,方法一:unset(\$_SESSION['變數名稱'])</a> <br/>";
echo "<a href='exp11-4d.php'>刪除session,方法二:session_destroy() <br/>";

?>

exp11-4a.php

<?php session_start();
$date1 = new DateTime($_SESSION["comeintime2"]);
echo "你的第一次登入時間為:".$date1->format('Y年n月j日 G時i分s秒');
}else echo "session變數comeintime,不存在";

?>

exp11-4b.php

<?php session_start();
$date1 = new DateTime($_SESSION['comeintime2']);
$date2 = new DateTime();
$timediff = $date1->diff($date2);
echo "<br/>你登入後停留至今的時間有:".$timediff->format('%h 時 %i 分 %s 秒');

}else echo "session變數comeintime,不存在";

?>

exp11-4c.php

<?php session_start();
if(isset($_SESSION['comeintime2'])) {
echo "已經將session變數comintime,刪除了:";
unset($_SESSION['comeintime2']);

}
else echo "cookie變數bgcolor,不存在";

?>

exp11-4d.php

<?php session_start();
if(isset($_SESSION['comeintime2'])) {
echo "已經將session變數全部刪除了:";
session_unset();

}
else echo "cookie變數bgcolor,不存在";

?>

 

 

 
Chp12. 物件變數,物件變數陣列
練習範例 12-1物件變數(建構子函數,解構子函數) 12-2物件變數的簡易宣告(設定網頁背景顏色,文字顏色) 12-3物件變數的static function,物件常數的引用 12-4兩種物件陣列:班上同學資料(姓名,電話,LineID)
12-5雲端主機,判別下拉選單是第幾個(阿Q桶麵查詢價錢庫存) 12-6雲端主機計算物件陣列,計算各科全班平均成績 12-7物件陣列(把陣列當作物件來操作):ArrayObject(陣列)  
1

class 名稱{....} 
member: public $a1; 公有成員
member: var $a1; 公有成員(就是public)
member: private $a1;私有成員(只能被其定義的類別存取)
method: public function show(){....}
method: public可以省略{

method: 給定起始值:建構子函數:function __construct($a1='',$a2=0,$a3=0){...』
method: 建構子函數,若要能夠允許沒有給定起始值的宣告,必須給定預設值,例如$a1='',$a2=0 

method: 解構子函數,釋放物件變數:function __destruct(){$this->name = NULL;} 
method: 設定member變數值,$this->name = $a1

宣告物件變數:$my = new phone()
使用物件method: $my->show()
釋放物件變數:$my = NULL;

 

範例結果

 

<?php
//////標準寫法/////////////////////////////////////////////
class phone{
var $name;
public $price;
public $num;
public function __construct($a1="",$a2=0,$a3=0){
$this->name = $a1;
$this->price = $a2;
$this->num = $a3;
}
public function __destruct(){
$this->name = NULL;
$this->price = NULL;

$this->num = NULL;
echo "<br/>宣告的物件變數已經被釋放了";
}
public function show(){
echo "你要購買的手機是".$this->name.",數量是".$this->num.",單價為".$this->price;
}
}

//////////////////////////////////////////////////
$myp1 = new phone();
$myp1->name = "iphoneX手機";
$myp1->price = 35000;
$myp1->num = 2;
$myp1->show();

echo "<br/><br/>";
$myp2 = new phone('Samsung Galaxy Note 8手機',30000,5);
$myp2->show();

echo "<br/><br/>";
$myp1 = NULL;
$myp2 = NULL;

echo "//物件變數的比較 ==, === <br/>";
echo "兩個物件變數宣告內容一樣,兩種符合(==),但是還是兩個物件(不符合===) <br/>";
echo "讓物件2=物件1,則兩者(符合===)(符合==) <br/>";
/////////////////////////////////////////////////////////////
$myp4 = new phone('Samsung Galaxy Note 8手機',30000,5);

$myp5 = new phone('Samsung Galaxy Note 8手機',30000,5);

$myp6 = $myp5;
///4-5//////////////////////////////////
if($myp4==$myp5)echo "$myp4 == $myp5 <br/>";
else echo "$myp4 != $myp5 <br/>";
if($myp4===$myp5)echo "$myp4 === $myp5 <br/>";
else echo "$myp4 !== $myp5 <br/>";

//5-6///////////////////////////////////
if($myp6==$myp5)echo "$myp6 == $myp5 <br/>";
else echo "$myp6 != $myp5 <br/>";
if($myp6===$myp5)echo "$myp6 === $myp5 <br/> <br/>";
else echo "$myp6 !== $myp5 <br/>";

?>

2

物件變數的簡易宣告
簡易物件變數宣告
member:用var取代public
function:不需要寫public

 

範例結果

<?php
//////簡易寫法/////////////////////////////////////////////
class webpage{
var $title;
var $bgcolor;
var $txtcolor;
var $h1txt;
function __construct($a1="標題",$a2="white",$a3="black",$a4="測試"){
$this->title = $a1;
$this->bgcolor = $a2;

$this->txtcolor = $a3;
$this->h1txt = $a4;
}
function __destruct(){
$this->title = NULL;
$this->bgcolor = NULL;
$this->txtcolor = NULL;
$this->h1txt = NULL;

}
function show(){
$str = "<!DOCTYPE html><html xmlns='http://www.w3.org/1999/xhtml'><head><meta http-equiv='Content-Type' content='text/html; charset=utf-8' /><title>".$this->title."</title><style>body{ background-color:".$this->bgcolor."; color:".$this->txtcolor.";}</style></head><body><h1>".$this->h1txt."</h2></body></html>";
echo $str;
}
}

//////////////////////////////////////////////////
//$myweb = new webpage("網頁物件","gray","purple","物件變數的宣告與呼叫");
//$myweb = new webpage("新年祝福","blue","white","心想事成,事事如意");
$myweb = new webpage("生日祝福","pink","darkgreen","福如東海,壽比南山");
$myweb->show();

?>

3

物件變數的static function不需要宣告,直接用類似呼叫普通function的方式使用 
定義法: static function cubic(){...} 

呼叫法: class變數名稱::cubic(); 

範例: mymath::cubic(); 

 


物件常數(pi) 
定義法:const pi=3.14
物件常數在class外部的引用法: class變數名稱::pi 
範例: mymath::pi 

物件常數在class內部的引用法:self::pi 

 

範例結果

<?php
/////////////////////////////////////////////////////////////
class mymath{
const pi=3.14;
static function cubic($a1){
return $a1*$a1*$a1;
}
static function circlearea($a1){
return self::pi*$a1*$a1;
}

}
/////////////////////////////////////////////////////////////
echo "// 計算三次方///////////////////////////////////////////////////<br/>";
$num =5;
echo $num."的三次方是".mymath::cubic($num);

echo "<br/><br/>";
/////////////////////////////////////////////////////////////
echo "// 計算圓形面積///////////////////////////////////////////////////<br/>";
$num =5;
echo "半徑".$num."的圓形面積是".mymath::circlearea($num);

?>

4

物件陣列:班上同學資料(姓名,電話,LineID) 

第一種物件陣列 :
不需要宣告陣列,直接設定元素
$stu[0]= new student(... 
$stu[1]= new student(..) 

第二種物件陣列
$member = array(new student(...),new student(...),new student(...)) 

物件陣列的迴圈:物件陣列的代號是 $member 
foreach($member as $i=>$v){...} 

 

範例結果

<?php
class student{
var $name;
var $tel;
var $line;
function __construct($a1="",$a2="",$a3=""){
$this->name=$a1;
$this->tel=$a2;
$this->line=$a3;
}
function __destruct(){
$this->name=NULL;
$this->tel=NULL;
$this->line=NULL;
}
}
echo "////第一種物件陣列//////////////////////////////////////////////// <br/>";
$stu[0]= new student("李大同","0936-456741","tom234");
$stu[1]= new student("張花花","0925-753951","jolin987");
$stu[2]= new student("林美美","0942-654852","julie22");

//印出全班姓名
for($i=0;$i<=2;$i++){
echo "全班姓名:".$stu[$i]->name.", ";
}

echo "/////第二種物件陣列/////////////////////////////////////////////// <br/>";
$member = array(new student("李大同","0936-456741","tom234"),
new student("張花花","0925-753951","jolin987"),
new student("林美美","0942-654852","julie22"));

//印出全班姓名,電話
foreach($member as $i=>$v){
echo $member[$i]->name.", ".$member[$i]->tel."<br/>";
}

?>

5

傳回雲端主機,判別下拉選單是第幾個

1.觀念:php沒有onchange()事件,都必須由form-action-submit傳送

2.觀念:php不能夠寫到javascript程式碼區內,彼此不相容

3.觀念:若表單元件要直接呼叫php,只能用ajax事件

 

4.如何得到selectedIndex(I):將option 的value設定為0,1,2,3..,那麼由\$_POST得到的就是selectedIndex

 

5.如何得到selectedIndex(II):不然就要while(list(..) = each(..){比對選到的intm名稱與物件資料名稱一樣時的\$key,就是selectedIndex

6.php讀取select的name名稱,數值為value

 

6.如何在php設定表單select的選項:在option內判斷,若選到就顯示selected
例如:<option value="阿Q桶麵" <?php if($key==0){echo 'selected';}?>阿Q桶麵</option>

 

7.如何在php設定input-text的內容:在input內的value='...'
例如:<input type="text" class="form-control" name="num" value="<?php echo $mynum;?>">

 

範例結果

<?php
///class////////////////////////////////
class product{
var $name;
var $price;
var $num;
function __construct($a1="",$a2=0,$a3=0){
$this->name = $a1;
$this->price = $a2;
$this->num = $a3;
}
function __destruct(){
$this->name=NULL;
$this->price=NULL;
$this->num=NULL;
}
}// end class
///////////////////////////////////
$myp = array(new product("阿Q桶麵",30,560),
new product("可口可樂",15,150),
new product("義美水餃",85,50),
new product("鐵路便當",50,30));

$selname="";
$myprice = 0;
$mynum = 0;
$key =0;

//讀取selection的數值//////////////////////////////////////////////
if(isset($_POST['list01name'])){
$selname = $_POST['list01name'];
while(list($i,$v) = each($myp)){
if($myp[$i]->name==$selname){
$myprice = $myp[$i]->price;
$mynum = $myp[$i]->num;
$key = $i;

break;
}
}// end while
}// end if isset

?>

<select class="col-sm-10" name="list01name" class="form-control" >
<option value="阿Q桶麵" <?php if($key==0){echo 'selected';}?>>阿Q桶麵</option>
<option value="可口可樂" <?php if($key==1){echo 'selected';}?>>可口可樂</option>
<option value="義美水餃" <?php if($key==2){echo 'selected';}?>>義美水餃</option>
<option value="鐵路便當" <?php if($key==3){echo 'selected';}?>>鐵路便當</option>
</select>

 

<div class="col-sm-10"><input type="text" class="form-control" name="price" value="<?php echo $myprice;?>"></div>

6

 

雲端主機計算陣列,計算各科全班平均成績

1.前端網頁用多個陣列stuname[],數學math[],英文english[]

2.如何把前端陣列,變成後端的物件陣列:用迴圈foreach(){$stu[$i] = new student($_POST['陣列'][$i],$_POST['陣列'][$i],$_POST['陣列'][$i]);

 

3.如何更新畫面上最新的input text 數學,英文的輸入數值:在
<input type="text" name="math[]" value="<?php if(isset($_POST['stuname'])){echo $_POST['math'][0];}else echo 85;?>">

 

範例結果

<?php
class student{
var $name;
var $math;
var $english;
function __construct($a1="",$a2=0,$a3=0){
$this->name = $a1;
$this->math = $a2;
$this->english = $a3;
}
}// end class
// 設定 stu物件變數陣列/////////////////////////////////////////////////////
$avgmath =0;
$avgenglish =0;

if(isset($_POST['stuname'])){
foreach($_POST['stuname'] as $i=>$v){
$stu[$i] = new student($_POST['stuname'][$i],$_POST['math'][$i],$_POST['english'][$i]);
}// end foreach

//////計算全班數學,英文平均//////////////////////////////////
$temp1=0;
$temp2=0;
foreach($stu as $i=>$v){
$temp1 += $stu[$i]->math;
$temp2 += $stu[$i]->english;
}
$avgmath =$temp1/count($stu);
$avgenglish =$temp2/count($stu);

//////更新最新的input text 數學,英文輸入數值////////////////////////////////

}// end if(isset())

?>

<input type="text" size="6" maxlength="3 class="form-control" name="math[]" value="<?php if(isset($_POST['stuname'])){echo $_POST['math'][0];}else echo 85;?>">

 

<div class='row'>
<label class='col-sm-offset-1 col-sm-3 bg-info text-center'>全班平均成績</label>
<label class='col-sm-3 bg-danger text-center'><?php echo $avgmath; ?></label>
<label class='col-sm-3 bg-success text-center'><?php echo $avgenglish; ?></label></div>

7

範例結果

物件陣列(把陣列當作物件來操作):ArrayObject(陣列)
物件陣列:$a=new ArrayObject()
印出物件陣列:print_r($a)
印出物件陣列:var_dump($a)

取出值:->offsetGet:$objay->offsetGet(2)

非編號指標物件陣列取出值,offsetGet:$objay->offsetGet('李大同')

計算物件陣列ArrayObject的數目:$a->count()

foreach迴圈印出物件陣列ArrayObject: foreach($arrayObj as $i=>$v){)

新增一個元素到ArrayObject陣列最後:->append(元素1)

新增二個元素以上到ArrayObject陣列最後:->append(陣列),或是->append(array(元素1,元素2))

檢查某個指標(文字或編號)是否存在:->offsetExists(編號)

修改某個指標(文字或編號)的內容:->offsetSet(編號,數值)

前往某個指標(編號):$iterator->seek(編號)

到下一筆:$iterator->next()
到第一筆:$iterator->rewind()
目前指標:$iterator->key()
目前內容:$iterator->current()

 

範例結果

 

ArrayObject物件陣列若要用->取出值,則宣告時必須:
= new ArrayObject($data, ArrayObject::ARRAY_AS_PROPS)

若是宣告成$arrayObj = new ArrayObject($data);,
不能用->,必須用->offsetGET()

ArrayObject物件陣列= new ArrayObject($data, ArrayObject::ARRAY_AS_PROPS)

計算物件陣列ArrayObject的數目:count(陣列)


印出全部:物件陣列ArrayObject的數目:var_dump(陣列)

印出全部物件陣列1
foreach($arrayObj as $i=>$v){)

ArrayObject物件陣列,不能使用二維陣列

<?php

$fruit = array(1=>"Orange","Banana","Grape","Apple","Flower");

echo "////////////////////////////////////////////////////////////////////<br/>";
echo "//取出值:->offsetGet:\$objay->offsetGet(2)<br/>";
echo "<br/>offsetGet印出第2個".$objay->offsetGet(2);
echo "<br/>offsetGet印出第2個:\$objay->2 出現錯誤";

echo "////////////////////////////////////////////////////////////////////<br/>";
echo "//非編號指標物件陣列取出值,offsetGet:\$objay->offsetGet('李大同')<br/>";
$score["李大同"] = 90;
$score["張花花"] = 85;
$score["林美美"] = 60;
$score["宋妮妮"] = 99;
$score["吳盼盼"] = 75;
$objary2 = new ArrayObject($score);
echo "<br/>offsetGet印出李大同分數".$objary2->offsetGet('李大同');

echo "////////////////////////////////////////////////////////////////////<br/>";
echo "物件陣列的數目有".$objay->count();
echo "<br/>物件陣列的數目有".count($objay);

echo "////////////////////////////////////////////////////////////////////<br/>";
echo "//foreach迴圈印出物件陣列ArrayObject: foreach(\$arrayObj as \$i=>\$v){)<br/>";
foreach($objay as $i=>$v){
echo $i.':'.$v."<br/>";
}

echo "////////////////////////////////////////////////////////////////////<br/>";
echo "//新增一個元素到ArrayObject陣列最後:->append(元素1)<br/>";
$objay->append("mango");
print_r($objay);

echo "////////////////////////////////////////////////////////////////////<br/>";
echo "//新增二個元素以上到ArrayObject陣列最後:->append(陣列),或是->append(array(元素1,元素2))<br/>";
$objay->append(array("lemon","papaya"));
print_r($objay);

echo "////////////////////////////////////////////////////////////////////<br/>";
echo "//檢查某個指標(文字或編號)是否存在:->offsetExists(編號) <br/>";
$data = array('name'=>'張花花','email'=>'huahua@domain.com','score'=>70);
$objay = new ArrayObject($data);
echo '檢查:score指標是否存在?:'. $objay->offsetExists('score')."<br/>";

echo "////////////////////////////////////////////////////////////////////<br/>";
echo "//修改某個指標(文字或編號)的內容:->offsetSet(編號,數值) <br/>";
$objay = new ArrayObject($score);
$objay->offsetSet('李大同','0');
echo '李大同最新的分數:'. $objay->offsetGet('李大同')."<br/>";

echo "////////////////////////////////////////////////////////////////////<br/>";
echo "//前往某個指標(編號):\$iterator->seek(編號) <br/>";
$objay = new ArrayObject($score);
$iterator = $objay->getIterator();
if($iterator->valid()){

$iterator->seek(3);
echo '宋妮妮最新的分數:'.$iterator->current();
}

echo "////////////////////////////////////////////////////////////////////<br/>";
echo '到下一筆'."<br/>";;
$iterator->next();
echo '目前指標:'.$iterator->key()."<br/>";;
echo '目前內容:'.$iterator->current()."<br/>";;
echo '到第一筆'."<br/>";;
$iterator->rewind();
echo '目前指標:'.$iterator->key()."<br/>";;
echo '目前內容:'.$iterator->current()."<br/>";;

 

echo "////////////////////////////////////////////////////////////////////<br/>";
echo "////////////////////////////////////////////////////////////////////<br/>";
$data = array('name'=>'張花花','email'=>'huahua@domain.com','score'=>70);
$arrayObj = new ArrayObject($data, ArrayObject::ARRAY_AS_PROPS);

echo "//計算物件陣列ArrayObject的數目:count(陣列)<br/>";
echo "物件陣列的數目有".count($arrayObj);

echo "印出全部物件陣列".var_dump($arrayObj);
echo "<br/><br/>印出全部物件陣列".print_r($arrayObj);

echo "////////////////////////////////////////////////////////////////////<br/>";
echo "//foreach迴圈印出物件陣列ArrayObject
foreach($arrayObj as $i=>$v){
echo $i.':'.$v."<br/>";
}

echo "////////////////////////////////////////////////////////////////////<br/>";
echo "//ArrayObject物件陣列,不能使用二維陣列 <br/>";

 
 
 
Chp13. PHP讀取資料庫方法一:程序導向的介面:mysqli_connect(),mysqli_query(), mysqli_fetch_array()
練習範例 13-1讀取第1,2筆記錄,計算筆數 13-2讀取資料庫全部記錄 13-3.關鍵字查詢  
  13-7新增一筆記錄到資料表 13-8刪除一筆記錄 13-9修改一筆記錄  
  13-10新增一筆記錄(避免SQL Injection,輸入一些特殊字元而逃過檢查,而造成正常登入)) 13-11留言板card  
關鍵程式碼(頭尾連線物件) mysql.inc.php mysqlclose.inc.php    
關鍵程式碼(一般) 查詢所有記錄 查詢關鍵字 迴圈產生表格
  新增一筆記錄 刪除一筆記錄 修改一筆記錄  
  總共幾筆記錄 總共幾個欄位  
上面範例的表單設計網頁檔 exp13-3 exp13-7 exp13-8 exp13-9
關鍵程式碼(表格呈現) 查詢顯示全部(1)不分頁,bootstrap,沒排序 查詢顯示顯示分頁-沒排序-沒刪除修改 查詢顯示顯示分頁-有排序-沒刪除修改  
  查詢顯示顯示分頁-有排序-有刪除修改      
關鍵程式碼(輸入文字按鈕) 一組輸入文字方塊+按鈕(1)按鈕後,文字會不見 一組輸入文字方塊+按鈕(2)按鈕後,文字保留 兩組輸入文字方塊,一個按鈕(在同一行)  
關鍵程式碼(留言板card) 留言板card顯示全部(1) 留言板card顯示全部(2) 留言板card顯示分頁  
關鍵程式碼(其它) 查詢資料表,顯示全部(不分頁,bootstrap) 查詢資料表,顯示全部(分頁,排序,bootstrap)    
  新增刪除修改一筆(分頁,bootstrap)      
下載練習mySQL資料庫 下載資料庫      
 

關鍵程式碼(mysql.inc.php)

//引入資料庫設定檔案
//include("mysql.inc.php");
require_once("mysql.inc.php");

<?php
//資料庫設定
$dbServer = "localhost";
$dbUser = "root";
$dbPass = "密碼";
$dbName = "資料庫";

//連線資料庫伺服器
$conn = @mysqli_connect($dbServer, $dbUser, $dbPass, $dbName);

if (mysqli_connect_errno($conn))
die("無法連線資料庫伺服器");

//設定連線的字元集為 UTF8 編碼
mysqli_set_charset($conn, "utf8");
?>

 

關鍵程式碼(mysql.inc.php)

////釋放記憶體////////////////////////////
require_once("mysqlclose.inc.php");

<?php
////釋放記憶體////////////////////////////
mysqli_free_result($result); // 釋放result物件佔用的記憶體
mysqli_close($conn); //關閉資料庫連接

?>

 

關鍵程式碼

//引入資料庫設定檔案
require_once("mysql.inc.php");
//include mysql.inc.php

 

////釋放記憶體////////////////////////////
require_once("mysqlclose.inc.php");

<?php
header('Content-Type: text/html; charset=utf-8');

//引入資料庫設定檔案
require_once("mysql.inc.php");

// 【書籍】欄位
$sql = "SELECT 書籍名稱,價格 FROM books WHERE 價格 > 400";
$result = mysqli_query($conn, $sql);

//使用表格顯示資料
echo '以下是價格大於 400 的書籍<br />
<table border="1"><tr><th>書籍名稱</th><th>價格</th></tr>';

//使用迴圈逐筆讀取記錄
while ($row = mysqli_fetch_array($result)) {
echo "<tr><td> $row[0] </td><td> $row[1] </td></tr>";
}

echo '</table>';

////釋放記憶體////////////////////////////
require_once("mysqlclose.inc.php");
?>

 

總共幾筆記錄

$num = mysqli_num_rows($result);

<?php
$sql="SELECT * FROM books";
$result=mysqli_query($conn, $sql);
//取得查詢結果的筆數
$num = mysqli_num_rows($result);

?>

 

總共幾個欄位

$num = mysqli_num_fields($result);

<?php
$sql="SELECT * FROM books";
$result=mysqli_query($conn, $sql);
//欄位數目
$num = mysqli_num_fields($result);

?>

 

查詢結果一次給定陣列

$rowall
= mysqli_fetch_all($result,MYSQLI_ASSOC);

<?php
$sql="SELECT * FROM books";
$result=mysqli_query($conn, $sql);
//查詢結果一次給定陣列
$rowall = mysqli_fetch_all($result,MYSQLI_ASSOC);

?>

MYSQLI_ASSOC:文字欄位
MYSQLI_NUM:數字欄位
MYSQLI_BOTH:兩者都有

 

查詢結果迴圈給定陣列

$row[]=
mysqli_fetch_array($result,MYSQLI_ASSOC)

<?php
$sql="SELECT * FROM books";
$result=mysqli_query($conn, $sql);
//查詢結果迴圈給定陣列
while($row[]=mysqli_fetch_array($result,MYSQLI_ASSOC)){
$str =$row['書籍名稱'];
}

?>

$row=mysqli_fetch_array($result,MYSQLI_ASSOC);
MYSQLI_ASSOC:文字欄位
MYSQLI_NUM:數字欄位
MYSQLI_BOTH:兩者都有

1

 

PHP讀取資料庫三種方法:

方法一:程序導向的介面():mysqli_connect(),mysqli_query(), mysqli_fetch_array()
方法二:物件導向的介面():mysqli::__construct(),mysqli::query(), mysqli_result::fetch_array()
方法三:物件導向的介面()-PDO:PDO::__construct(),PDO::query(), PDOStatement::fetch()


方法一:程序導向的介面(

將查詢回傳的陣列設定為 $row 陣列:
$row = mysqli_fetch_array($result);
第1筆記錄的欄位:$row['姓名']
第1筆記錄的欄位:$row[0]

 

//第2筆記錄
再執行一次 $row 陣列:
$row = mysqli_fetch_array($result);
第2筆記錄的欄位:$row['姓名']

 

//最後一筆記錄
重複執行 $row 陣列:
$row = mysqli_fetch_array($result);

最後一筆記錄,上述這個執行會傳回false(沒有資料庫記錄值)
也就是($row = mysqli_fetch_array($result))=false;

應用:所以把所有資料迴圈一次,可以用while($row = mysqli_fetch_array($result)){.....};

因為一旦false就不會再執行迴圈while了

 

總共幾筆記錄
總共幾筆記錄 =

$num = mysqli_num_rows($result);

判別是否查到資料
if(mysqli_num_rows(\$result)>0){...}

兩種查詢的指令,都可以
(1)使用 mysqli_fetch_row() 讀取一筆記錄,
(2).使用 mysqli_fetch_array() 讀取一筆記錄,

將查詢回傳的陣列設定為 $row 陣列:
$row = mysqli_fetch_row($result);

 

範例結果

 

<?php
header('Content-Type: text/html; charset=utf-8');

//資料庫設定
$dbServer = "localhost";
$dbName = "資料庫名稱";
$dbUser = "root";
$dbPass = "密碼";

//連線資料庫伺服器
$conn = @mysqli_connect($dbServer, $dbUser, $dbPass, $dbName);

if (mysqli_connect_errno($conn))
die("無法連線資料庫伺服器");

//設定連線的字元集為 UTF8 編碼
mysqli_set_charset($conn, "utf8");

//查詢【員工】資料表的的資料
$result=mysqli_query($conn, "SELECT * FROM 員工");

//--------- 讀取第 1 筆記錄 ---------------
//使用 mysqli_fetch_array() 讀取一筆記錄,
$row = mysqli_fetch_array($result);
//以數字索引取得欄位資料
echo "<p>第 1 筆記錄的第 1 個欄位:$row[0]";
echo "<br>第 1 筆記錄的第 2 個欄位:$row[1]";
echo "<br>第 1 筆記錄的第 2 個欄位:$row[2]";
echo "<br>第 1 筆記錄的第 2 個欄位:$row[3]";

//以欄位名稱字串為索引取得資料
echo "<br>第 1 筆記錄的【姓名】欄位:". $row['姓名'];
echo "<br>第 1 筆記錄的【地址】欄位:".$row['地址']."</p>";

echo "//////第2筆記錄//////////////////////////////////////////////// <br/>";
$row = mysqli_fetch_array($result,MYSQLI_ASSOC);
echo "第 2 筆記錄的【姓名】欄位:". $row['姓名'];
echo "<br>第 2 筆記錄的【地址】欄位:".$row['地址']."</p>";


echo "/////總共幾筆記錄/// <br/>";
/////////////////////////////////////
$num = mysqli_num_rows($result);
echo "總共幾筆記錄:". $num;

echo "/////判別是否查到資料//////////////////////////////////// <br/>";
echo "//if(mysqli_num_rows(\$result)>0){...}; <br/>";

////釋放記憶體////////////////////////////
mysqli_free_result($result); // 釋放result物件佔用的記憶體
mysqli_close($conn); //關閉資料庫連接

?>

2

印出所有查詢的資料


讀取第全部記錄
應用,所以把所有資料迴圈一次,可以用
while($row = mysqli_fetch_array($result)){.....};

因為一旦false就不會再執行迴圈while了

注意:SQL語法:其中的分隔必須是,不能說中文,

 

範例結果

<?php
header('Content-Type: text/html; charset=utf-8');

//資料庫設定
$dbServer = "localhost";
$dbName = "資料庫名稱";
$dbUser = "root";
$dbPass = "密碼";

//連線資料庫伺服器
$conn = @mysqli_connect($dbServer, $dbUser, $dbPass, $dbName);

if (mysqli_connect_errno($conn))
die("無法連線資料庫伺服器");

//設定連線的字元集為 UTF8 編碼
mysqli_set_charset($conn, "utf8");

//查詢【員工】資料表的的資料
$result=mysqli_query($conn, "SELECT 姓名,職稱,出生日期,地址,電話號碼 FROM 員工");

echo "<table border=1><tr><th>姓名</th><th>職稱</th><th>出生日期</th><th>地址</th><th>電話號碼</th></tr>";
while($row=mysqli_fetch_array($result,MYSQLI_ASSOC)){
echo "<tr><td>".$row['姓名']."</td><td>".$row['職稱']."</td><td>".$row['出生日期']."</td><td>".$row['地址']."</td><td>".$row['電話號碼']."</td></tr>";
}
echo "</table>";
////釋放記憶體////////////////////////////
mysqli_free_result($result); // 釋放result物件佔用的記憶體
mysqli_close($conn); //關閉資料庫連接


?>

3

 

印出所有資料,分頁顯示(數字頁數超連結)

1.關鍵一:設定一個二維陣列,在迴圈內儲存所有資料表記錄$rowpage[]=mysqli_fetch_array($result

第二位同學的三個欄位:、$rowpage[1][0],$rowpage[1][1],$rowpage[1][2]

2.關鍵二:分頁顯示要設定幾個參數:
//每頁顯示筆數:$numperpage
//全部筆數:$totalnum
//最多頁數:$totalpage
//目前頁數 :$nowpage
//每頁顯示編號的min,max

3.關鍵三:點按頁數的超連結,用$_GET['pagenum']來讀取

 

範例結果

<?php
header('Content-Type: text/html; charset=utf-8');

///////////////////////////////////////////////////
//資料庫設定
$dbServer = "localhost";
$dbName = "資料庫名稱";
$dbUser = "root";
$dbPass = "密碼";

//連線資料庫伺服器
$conn = @mysqli_connect($dbServer, $dbUser, $dbPass, $dbName);

if (mysqli_connect_errno($conn))
die("無法連線資料庫伺服器");

//設定連線的字元集為 UTF8 編碼
mysqli_set_charset($conn, "utf8");

//查詢【員工】資料表的的資料
$result=mysqli_query($conn, "SELECT * FROM books");

//給定$rowpage[][]二維陣列//////////////////////////////////////////////////////
while($rowpage[]=mysqli_fetch_array($result,MYSQLI_ASSOC)){
}
///計算顯示的編號~幾號/////////////////////////////////////////////////////
//設定參數
$numperpage=8; //每頁顯示筆數
$totalnum = mysqli_num_rows($result); //全部筆數
$totalpage = ceil($totalnum/$numperpage); //最多頁數

//目前頁數 :$nowpage
if(isset($_GET['pagenum'])){
$nowpage =$_GET['pangenum'];
}else{
$nowpage =1;
}
//每頁顯示編號的min,max
$min=($nowpage-1)*$numperpage;
$max=($nowpage-1)*$numperpage+$numperpage;

if($max>$totalnum){
$max = $totalnum;
}

//顯示表格///////////////////////////////////////////
echo "<br/><br/>";
echo "<table border=1><tr><th>書籍編號</th><th>書籍名稱</th><th>價格</th></tr>";
for($i=$min;$i<$max;$i++){
//二維陣列無法用字串連接,要用sprint才行
echo sprintf("<tr><td>%s</td><td>%s</td><td>%s</td></tr>",$rowpage[$i]['書籍編號'],$rowpage[$i]['書籍名稱'],$rowpage[$i]['價格']);

}
echo "</table>";


echo "前往頁數:";
///顯示頁數//////////////////////////////////////////////
for($i=1;$i<=$totalpage;$i++){
if($i==$nowpage)echo $i." ";
else echo "<a href='exp13-3.php?pangenum=".$i."'>".$i."</a> ";
}
////釋放記憶體////////////////////////////
mysqli_free_result($result); // 釋放result物件佔用的記憶體
mysqli_close($conn); //關閉資料庫連接


?>

4

印出所有資料,分頁顯示(首頁,上頁,下頁,尾頁)

1.關鍵一:判斷$nowpage=1不顯示上一頁,$nowpage=最後頁,不顯示下一頁

2.關鍵二:下一頁:"<a href='exp13-4.php?pagenum=".($nowpage+1)

3.關鍵三:若要用按鈕button跳網頁,onclick="javascript:location.href=
'https://tw.yahoo.com/'"

3.關鍵四:但是若button連結網頁要傳遞其它input-text的數值,就要到javascript function內,才能取值
function gopage(){
location.href = "exp13-4.php?pagenum=" + mynum.value;}

4.關鍵五:超連結的單引號內不可再有單引號(必須用雙引號,且前面必須加上\
例如:onclick='javascript:location.href=\"exp13-4.php?pagenum=".($mynum.value).\""'

 

範例結果

<script type="text/javascript">
function gopage(){
location.href = "exp13-4.php?pagenum=" + mynum.value;
}

</script>

<style>
table {border:1px solid black; width:450px;
text-align:center}
.grey {background-color:lightgrey}

.narrow {width:20%}
</style>

</head>

<body>
<?php
header('Content-Type: text/html; charset=utf-8');

/////////////////////////////////////////////////////////
//資料庫設定
$dbServer = "localhost";
$dbName = "資料庫名稱";
$dbUser = "root";
$dbPass = "密碼";

//連線資料庫伺服器
$conn = @mysqli_connect($dbServer, $dbUser, $dbPass, $dbName);

if (mysqli_connect_errno($conn))
die("無法連線資料庫伺服器");

//設定連線的字元集為 UTF8 編碼
mysqli_set_charset($conn, "utf8");

//查詢【員工】資料表的的資料
$result=mysqli_query($conn, "SELECT * FROM books");

//給定$rowpage[][]二維陣列//////////////////////////////////////////////////////
while($rowpage[]=mysqli_fetch_array($result,MYSQLI_ASSOC)){
}
///計算顯示的編號~幾號/////////////////////////////////////////////////////
//設定參數
$numperpage=8; //每頁顯示筆數
$totalnum = mysqli_num_rows($result); //全部筆數
$totalpage = ceil($totalnum/$numperpage); //最多頁數
//目前頁數 :$nowpage
if(isset($_GET['pagenum'])){
$nowpage =$_GET['pagenum'];
}else{
$nowpage =1;
}
//每頁顯示編號的min,max
$min=($nowpage-1)*$numperpage;
$max=($nowpage-1)*$numperpage+$numperpage;
if($max>$totalnum){
$max = $totalnum;
}

//顯示表格///////////////////////////////////////////
echo "<br/><br/>";
echo "<table border=1><tr><th>書籍編號</th><th>書籍名稱</th><th>價格</th></tr>";
//foreach($rowpage as $i=>$v){
for($i=$min;$i<$max;$i++){
//二維陣列無法用字串連接,要用sprint才行
// echo "<tr><td>“.$rowpage[$i][0]."</td><td>".$rowpage[$i][1]."</td><td>".$rowpage[$i][2]."</td></tr>";
/// 偶數欄位灰色背景//////////////////////////
if($i%2==0){
echo sprintf("<tr class='grey'><td>%s</td><td>%s</td><td>%s</td></tr>",$rowpage[$i]['書籍編號'],$rowpage[$i]['書籍名稱'],$rowpage[$i]['價格']);
}else{
echo sprintf("<tr><td>%s</td><td>%s</td><td>%s</td></tr>",$rowpage[$i]['書籍編號'],$rowpage[$i]['書籍名稱'],$rowpage[$i]['價格']);
}// end if

}
echo "</table>";

///顯示頁數//////////////////////////////////////////////

echo "<a href='exp13-4.php?pagenum=1'>首頁</a> ";

if($nowpage>1)echo "<a href='exp13-4.php?pagenum=".($nowpage-1)."'>上一頁</a> ";

if($nowpage<$totalpage)echo "<a href='exp13-4.php?pagenum=".($nowpage+1)."'>下一頁 </a> ";

echo "<a href='exp13-4.php?pagenum=".$totalpage."'>尾頁</a> ";

echo " 跳到:<input type='text' id='mynum' size=3 value='".$nowpage."' />";

echo "<input type='button' onclick='gopage()' value='前往' />";

////釋放記憶體////////////////////////////
mysqli_free_result($result); // 釋放result物件佔用的記憶體
mysqli_close($conn); //關閉資料庫連接

?>

5

 

點按標題,自動排序
1.由小到大:select * from 資料表 order by 欄位 asc

2.由大到小:select * from 資料表 order by 欄位 desc

3.點按標題排序:在表格標題,加上超連結:<th><a href='exp13-5.php?sortcolumn=書籍編號'>書籍編號
然後在讀取$_GET['變數']判讀是否存在:
if(isset($_GET['sortcolumn'])){...}

 

範例結果

//資料庫設定
$dbServer = "localhost";
$dbName = "資料庫名稱";
$dbUser = "root";
$dbPass = "密碼";

//連線資料庫伺服器
$conn = @mysqli_connect($dbServer, $dbUser, $dbPass, $dbName);

if (mysqli_connect_errno($conn))
die("無法連線資料庫伺服器");

//設定連線的字元集為 UTF8 編碼
mysqli_set_charset($conn, "utf8");

///讀取要排序的欄位//////////////////
if(isset($_GET['sortcolumn'])){
$sortcolumn = $_GET['sortcolumn'];
}else{
$sortcolumn = "書籍編號";
}

//查詢【員工】資料表的的資料
$result=mysqli_query($conn, "SELECT * FROM books order by ".$sortcolumn);

//給定$rowpage[][]二維陣列//////////////////////////////////////////////////////
while($rowpage[]=mysqli_fetch_array($result,MYSQLI_ASSOC)){
}
.........
.........

//顯示表格///////////////////////////////////////////
echo "<br/><br/>";
echo "<table border=1><tr><th><a href='exp13-5.php?sortcolumn=書籍編號'>書籍編號</a></th><th><a href='exp13-5.php?sortcolumn=書籍名稱'>書籍名稱</a></th><th><a href='exp13-5.php?sortcolumn=價格'>價格</a></th></tr>";
for($i=$min;$i<$max;$i++){
//二維陣列無法用字串連接,要用sprint才行
/// 偶數欄位灰色背景//////////////////////////
if($i%2==0){
echo sprintf("<tr class='grey'><td>%s</td><td>%s</td><td>%s</td></tr>",$rowpage[$i]['書籍編號'],$rowpage[$i]['書籍名稱'],$rowpage[$i]['價格']);
}else{
echo sprintf("<tr><td>%s</td><td>%s</td><td>%s</td></tr>",$rowpage[$i]['書籍編號'],$rowpage[$i]['書籍名稱'],$rowpage[$i]['價格']);
}// end if

}
echo "</table>";

......................
...................
////釋放記憶體////////////////////////////
mysqli_free_result($result); // 釋放result物件佔用的記憶體
mysqli_close($conn); //關閉資料庫連接


?>

6

 

SQL 語法:函數

1.計算筆數: count(欄位) as 書籍數量

2.計算最大值: max(欄位) as 最高價

3.計算最低值: min(價格) as 最低價

4.計算總和: sum(價格) as 總和價

5.計算平均值: avg(價格) as 平均價

 

範例結果

//查詢【員工】資料表的的資料
$result=mysqli_query($conn, "SELECT count(書籍編號) as 書籍數量, max(價格) as 最高價, min(價格) as 最低價, sum(價格) as 總和價, avg(價格) as 平均價 FROM books");
7

 

新增一筆記錄到資料表

1.$sql="INSERT 資料表 (書籍名稱, 數量) VALUES ('{$_POST['name']}','{$_POST['qty']}')";
mysqli_query($conn, $sql);

2.SQL 語法字串內若要加入:$_POST['bookname'],只要前後用大括弧即可{$_POST['bookname']}

 

範例結果

//引入資料庫設定檔案
//include("mysql.inc.php");
require_once("mysql.inc.php");

//新增欄位////

if(isset($_POST['bookname'])){
$sql="INSERT books (書籍名稱, 價格) VALUES ('{$_POST['bookname']}','{$_POST['bookprice']}')";
mysqli_query($conn, $sql);

}

////釋放記憶體////////////////////////////
require_once("mysqlclose.inc.php");

8

 

1.刪除一筆記錄:$sql="delete from 資料表 where 欄位=10";

2.判別是否刪除一筆記錄: if(mysqli_affected_rows($conn)>0){....}

3.SQL 語法字串內若要加入:$_POST['bookname'],只要前後用大括弧即可{$_POST['bookname']}

 

範例結果

//引入資料庫設定檔案
//include("mysql.inc.php");
require_once("mysql.inc.php");

//刪除欄位/////////
if(isset($_GET['delnum'])){
$sql="delete from books where 書籍編號=".$_GET['delnum'];
mysqli_query($conn, $sql);

if(mysqli_affected_rows($conn)>0)
echo "已經刪除了".mysqli_affected_rows($conn)."筆記錄";
else
echo "刪除失敗";
}

////釋放記憶體////////////////////////////
require_once("mysqlclose.inc.php");

9

 

1.修改一筆記錄:"update資料表 set 文字欄位='..',數字欄位=5 where 欄位=10

2.判別是否修改一筆記錄: if(mysqli_affected_rows($conn)>0){....}

 

exp13-9.php
exp13-9a.php

 

範例結果

//引入資料庫設定檔案
//include("mysql.inc.php");
require_once("mysql.inc.php");

//修改欄位///////////
if(isset($_POST['editnum'])){
$sql="update books set 書籍名稱='".$_POST['editname']."',價格=".$_POST['editprice']." where 書籍編號=".$_POST['editnum'];
mysqli_query($conn, $sql);

if(mysqli_affected_rows($conn)>0)
echo "已經修改了".mysqli_affected_rows($conn)."筆記錄";
else
echo "修改失敗";
}

////釋放記憶體////////////////////////////
require_once("mysqlclose.inc.php");
//最後轉換到主網頁
header("Location:exp16-12.html");

10

 

避免SQL Injection
(輸入一些特殊字元而逃過檢查,而造成正常登入)

1.讀取$_POST['..'],$_GET['..']前要先過濾特殊字元:

$sql="INSERT books (書籍名稱, 價格) VALUES (?,?)";

$stmt =
mysqli_prepare($conn,$sql);

// 繫結參數
mysqli_stmt_bind_param($stmt, 'sd',$_POST['bookname'], $_POST['bookprice']);

// 寫入資料庫
mysqli_stmt_execute($stmt);

if (mysqli_affected_rows($conn) > 0){echo '已成功新增一筆記錄';}

 

範例結果

//引入資料庫設定檔案
//include("mysql.inc.php");
require_once("mysql.inc.php");

//新增欄位////////////////////

if(isset($_POST['bookname'])){
$sql="INSERT books (書籍名稱, 價格) VALUES (?,?)";

$stmt = mysqli_prepare($conn,$sql);

// 繫結參數
mysqli_stmt_bind_param($stmt, 'sd',$_POST['bookname'], $_POST['bookprice']);

// 寫入資料庫
mysqli_stmt_execute($stmt);

if (mysqli_affected_rows($conn) > 0){
echo '已成功新增一筆記錄<br>';
}else {
echo '無法新增<br>';
}// end if
}

////釋放記憶體////////////////////////////
require_once("mysqlclose.inc.php");

11

 

留言板card

exp13-11.php
exp13-11a.php
exp13-11b.php

 

留言板新增留言注意:
1.預設可以顯示html標籤
2.但是無法顯示換行,除非htmlspecialchars,nl2br,str_replace轉換
例如:
$message = htmlspecialchars($_POST['message'],ENT_QUOTES);

$message=
str_replace(' ', '&nbsp;&nbsp;', nl2br($message));

 

範例結果

//引入資料庫設定檔案
//include("mysql.inc.php");
require_once("mysql.inc.php");

//查詢【員工】資料表的的資料--過濾特殊字元
$result=mysqli_query($conn, "SELECT * FROM guestbook order by 日期時間 desc");

//給定$rowpage[][]二維陣列//////////////////////////////////////////////////////
while($rowpage[]=mysqli_fetch_array($result,MYSQLI_ASSOC)){
}

///計算顯示的編號~幾號/////////////////////////////////////////////////////
//設定參數
$numperpage=5; //每頁顯示筆數
$totalnum = mysqli_num_rows($result); //全部筆數
$totalpage = ceil($totalnum/$numperpage); //最多頁數
//目前頁數 :$nowpage
if(isset($_GET['pagenum'])){
$nowpage =$_GET['pagenum'];
// echo $_GET['pagenum']."<br/>";
}else{
$nowpage =1;
}
//每頁顯示編號的min,max
$min=($nowpage-1)*$numperpage;

$max=($nowpage-1)*$numperpage+$numperpage;
if($max>$totalnum){
$max = $totalnum;
}

//顯示表格///////////////////////////////////////////
echo "<button type='button' onClick='javascript:location.href=\"exp13-11a.php\"' class='btn btn-danger float-right'>新增留言</button>";
echo "<h4 class='text-left'>共有<span class='badge badge-success'>".$totalnum."</span>筆留言</h4>";
echo "<hr/>";

for($i=$min;$i<$max;$i++){
echo "<div class='card'>";
echo "<h5 class='card-header'>【".$rowpage[$i]['留言編號']."】".$rowpage[$i]['姓名']."</h5>";
echo "<div class='card-body'>";
echo "<h5 class='card-title'>".$rowpage[$i]['日期時間']."</h5>";
echo "<p class='card-text'>".$rowpage[$i]['留言']."</p>";
echo "</div></div>";
}

echo "<br/>";

///顯示頁數//////////////////////////////////////////////
echo "<nav aria-label='Page navigation example'> ";
echo "<ul class='pagination'> ";
echo "<li class='page-item'><a class='page-link' href='exp13-11.php?pagenum=1'>首頁</a></li>";
if($nowpage>1)echo "<li class='page-item'><a class='page-link' href='exp13-11.php?pagenum=".($nowpage-1)."'>上一頁</a></li>";

for($i=1;$i<=$totalpage;$i++){
if($i==$nowpage)echo "<li class='page-item'><a class='page-link'>".$i."</a></li>";
else echo "<li class='page-item'><a class='page-link' href='exp13-11.php?pagenum=".$i."'>".$i."</a></li>";
}

if($nowpage<$totalpage)echo "<li class='page-item'><a class='page-link' href='exp13-11.php?pagenum=".($nowpage+1)."'>下一頁</a></li>";
echo "<li class='page-item'><a class='page-link' href='exp13-11.php?pagenum=".$totalpage."'>尾頁</a></li>";

echo "<li class='page-item'>&nbsp;&nbsp;跳到:<input type='text' id='mynum' size=3 value='".$nowpage."' /></li> ";
echo "<li class='page-item'><a class='page-link' href='javascript:gopage()'>前往</a></li>";
echo "</ul> ";
echo "</nav> ";

////釋放記憶體////////////////////////////
require_once("mysqlclose.inc.php");

 

exp13-11b.php
/引入資料庫設定檔案
include("mysql.inc.php");


//新增欄位///////////////////////////////////////////
$date = new DateTime('now',new DateTimeZone('Asia/Taipei'));
$strnowtime = $date->format('Y-m-d H:i:s');

////////////////////////
if(isset($_POST['name'])){
///預設可以顯示html標籤///////
///但是無法顯示換行,除非htmlspecialchars,nl2br,str_replace轉換/////
$name = htmlspecialchars($_POST['name'],ENT_QUOTES);
$message = htmlspecialchars($_POST['message'],ENT_QUOTES);
$message=str_replace(' ', '&nbsp;&nbsp;', nl2br($message));
$sql="INSERT guestbook (姓名,留言,日期時間) VALUES (?,?,?)";
$stmt = mysqli_prepare($conn,$sql);
//mysqli_query($conn, $sql);
// 繫結參數
mysqli_stmt_bind_param($stmt, 'sss',$name, $message,$strnowtime);

// 寫入資料庫
mysqli_stmt_execute($stmt);
if (mysqli_affected_rows($conn) > 0){
echo '已成功新增一筆記錄<br>';
}else {
echo '無法新增<br>';
}// end if
}

/////前往留言板瀏覽全部留言/////////////////////////
header("Location:exp13-11.php");

 

12

 

查詢資料表,顯示全部

(不分頁,bootstrap)

範例結果

//查詢【員工】資料表的的資料
$result=mysqli_query($conn, "SELECT FROM 資料表");
echo "<table border=1><tr><th>姓名</th><th>職稱</th><th>出生日期</th><th>地址</th><th>電話號碼</th></tr>";
echo "<table class='table table-striped table-bordered table-hover table-condensed'><thead class='thead-light'><tr><th>書籍編號</th><th>書籍名稱</th><th>價格</th><th></th></tr></thead><tbody>";
while($row=mysqli_fetch_array($result,MYSQLI_ASSOC)){
echo "<tr><td>".$row['姓名']."</td><td>".$row['職稱']."</td><td>".$row['出生日期']."</td><td>".$row['地址']."</td><td>".$row['電話號碼']."</td></tr>";
}
echo "</table>";

12

 

查詢資料表,顯示全部

(分頁,標題排序,bootstrap)

範例結果

//顯示表格///////////////////////////////////////////
echo "<table class='table table-striped table-bordered table-hover table-condensed'><thead class='thead-light'><tr><th><a href='exp13-9.php?sortcolumn=書籍編號'>書籍編號</a></th><th><a href='exp13-9.php?sortcolumn=書籍名稱'>書籍名稱</a></th><th><a href='exp13-9.php?sortcolumn=價格'>價格</a></th></tr></thead><tbody>";
for($i=$min;$i<$max;$i++){
echo sprintf("<tr><td>%s</td><td>%s</td><td>%s</td></tr>",$rowpage[$i]['書籍編號'],$rowpage[$i]['書籍名稱'],$rowpage[$i]['價格']);
}
echo "</tbody></table>";

12

 

分頁區

(沒有數字頁,只有頁首,上頁,跳頁)

範例結果

///顯示頁數//////////////////////////////////////////////
echo "<a href='exp13-8.php?pagenum=1&sortcolumn=".$sortcolumn."'>首頁</a> ";
if($nowpage>1)echo "<a href='exp13-8.php?pagenum=".($nowpage-1)."&sortcolumn=".$sortcolumn."'>上一頁</a> ";
if($nowpage<$totalpage)echo "<a href='exp13-8.php?pagenum=".($nowpage+1)."&sortcolumn=".$sortcolumn."'>下一頁 </a> ";
echo "<a href='exp13-8.php?pagenum=".$totalpage."&sortcolumn=".$sortcolumn."'>尾頁</a> ";
echo " 跳到:<input type='text' id='mynum' size=3 value='".$nowpage."' />";
//echo "<input type='button' onclick='javascript:location.href=\"exp13-8.php?pagenum=".($mynum.value)."\"' value='前往' />";
echo "<input type='button' onclick='gopage()' value='前往' />";

 

12

 

分頁+bootstrap

(有數字頁,只有頁首,上頁,跳頁)

範例結果

///顯示頁數//////////////////////////////////////////////
echo "<nav aria-label='Page navigation example'> ";
echo "<ul class='pagination'> ";
echo "<li class='page-item'><a class='page-link' href='exp13-9.php?pagenum=1&sortcolumn=".$sortcolumn."'>首頁</a></li> ";

if($nowpage>1)echo "<li class='page-item'><a class='page-link' href='exp13-9.php?pagenum=".($nowpage-1)."&sortcolumn=".$sortcolumn."'>上一頁</a></li> ";

for($i=1;$i<=$totalpage;$i++){
if($i==$nowpage)echo "<li class='page-item'><a class='page-link'>".$i."</a></li>";
else echo "<li class='page-item'><a class='page-link' href='exp13-9.php?pagenum=".$i."&sortcolumn=".$sortcolumn."'>".$i."</a></li>";
}

if($nowpage<$totalpage)echo "<li class='page-item'><a class='page-link' href='exp13-9.php?pagenum=".($nowpage+1)."&sortcolumn=".$sortcolumn."'>下一頁</a></li> ";
echo "<li class='page-item'><a class='page-link' href='exp13-9.php?pagenum=".$totalpage."&sortcolumn=".$sortcolumn."'>尾頁</a></li> ";

echo "<li class='page-item'>跳到:<input type='text' id='mynum' size=3 value='".$nowpage."' /></li> ";
echo "<li class='page-item'><a class='page-link' href='javascript:gopage()'>前往</a></li> ";
echo "</ul> ";
echo "</nav> ";

12

 

輸入:書名,價格,兩個欄位+一個按鈕

(在同一行)

範例結果

<form class="form-inline" method="post" action="exp13-9.php">
<div class="form-group">
<label for="bookname" >書名:</label>
<input type="text" class="form-control" name="bookname" placeholder="輸入書名">
</div>
<div class="form-group mx-sm-3 mb-2">
<label for="bookprice" >價格:</label>
<input type="text" class="form-control" name="bookprice" placeholder="1">
</div>
<button type="submit" class="btn btn-primary mb-2">新增</button>
</form>

13

 

顯示表格+bootstrap+可刪除+可修改+可排序

範例結果

//顯示表格///////////////////////////////////////////
echo "<table class='table table-striped table-bordered table-hover table-condensed'><thead class='thead-light'><tr><th><a href='exp13-9.php?sortcolumn=書籍編號'>書籍編號</a></th><th><a href='exp13-9.php?sortcolumn=書籍名稱'>書籍名稱</a></th><th><a href='exp13-9.php?sortcolumn=價格'>價格</a></th><th></th><th></th></tr></thead><tbody>";
//foreach($rowpage as $i=>$v){
for($i=$min;$i<$max;$i++){
echo sprintf("<tr><td>%s</td><td>%s</td><td>%s</td><td><a href='exp13-9.php?delnum=%s'>刪除</a></td><td><a href='exp13-9a.php?editnum=%s&editname=%s&editprice=%s'>修改</a></td></tr>",$rowpage[$i]['書籍編號'],$rowpage[$i]['書籍名稱'],$rowpage[$i]['價格'],$rowpage[$i]['書籍編號'],$rowpage[$i]['書籍編號'],$rowpage[$i]['書籍名稱'],$rowpage[$i]['價格']);
}
echo "</tbody></table>";

14

 

留言板card顯示面板

範例結果

for($i=$min;$i<$max;$i++){
echo "<div class='card'>";
echo "<h5 class='card-header'>【".$rowpage[$i]['留言編號']."】".$rowpage[$i]['姓名']."</h5>";
echo "<div class='card-body'>";
echo "<h5 class='card-title'>".$rowpage[$i]['日期時間']."</h5>";
echo "<p class='card-text'>".$rowpage[$i]['留言']."</p>";
echo "</div></div>";
}

 
Chp15. PHP讀取資料庫方法三:物件PDO:$result=$conn->query($sql)
練習範例 15-1讀取第1,2筆記錄,計算筆數 15-2讀取資料表全部記錄(兩種方法) 15-3讀取記錄分頁顯示 15-4關鍵字查詢
15-5記錄剛剛查詢關鍵字(I):較麻煩方法(都用session) 15-6記錄剛剛查詢關鍵字(II):最省事的法(不斷向主機查詢換頁排序) 15-7新增一筆記錄到資料表 15-8刪除一筆記錄
15-9修改一筆記錄 15-10新增一筆記錄(避免SQL Injection,輸入一些特殊字元而逃過檢查,而造成正常登入)) 15-11留言板card
關鍵程式碼(頭尾連線物件) mysqlpdo.inc.php      
關鍵程式碼(一般) 查詢所有記錄 查詢關鍵字 查詢根據某欄位排序 新增一筆記錄
  刪除一筆記錄 修改一筆記錄    
  總共幾筆記錄 總共幾個欄位 查詢結果一次給定陣列 查詢結果迴圈給定陣列
關鍵程式碼(SQL Injection ) 查詢所有記錄 新增一筆記錄 刪除一筆記錄 修改一筆記錄
關鍵程式碼(表格呈現) 查詢顯示全部(1)不分頁,bootstrap,沒排序 查詢顯示全部(2)不分頁,bootstrap,沒排序 查詢顯示顯示分頁-沒排序-沒刪除修改 查詢顯示顯示分頁-有排序-沒刪除修改
  查詢顯示顯示分頁-有排序-有刪除修改      
關鍵程式碼(輸入文字按鈕) 一組輸入文字方塊+按鈕(1)按鈕後,文字會不見 一組輸入文字方塊+按鈕(2)按鈕後,文字保留 兩組輸入文字方塊,一個按鈕(在同一行)  
關鍵程式碼(留言板card) 留言板card顯示全部(1) 留言板card顯示全部(2) 留言板card顯示分頁  
下載練習mySQL資料庫 下載資料庫      
  中文亂碼的處理

//echo 中文,不顯示亂碼
header('Content-Type: text/html; charset=utf-8');

//json_encode,顯示中文(不顯示亂碼)
echo json_encode($rowall,JSON_UNESCAPED_UNICODE);

  日期時間儲存到資料庫,要先轉換成字串string

//將datetime轉成string,才能儲存到mySql,以24小時制
$t1 = new DateTime('now',new DateTimeZone('Asia/Taipei'));
$strnowtime = $t1 -> format('Y-m-d H:i:s');

 

關鍵程式碼(mysqlpdo.inc.php)

//引入資料庫設定檔案
//include("mysqlpdo.inc.php");
require_once("mysqlpdo.inc.php");

<?php
//資料庫設定
$dbServer = "localhost";
$dbName = "資料庫";
$dbUser = "root";
$dbPass = "密碼";

// 建立 dsn 字串
$dsn = 'mysql:host='.$dbServer.';dbname='.$dbName.';charset=utf8';

try{ // 嘗試連線
$conn = new PDO($dsn, $dbUser, $dbPass);
} catch (PDOException $e) {
if ($e->getCode() == '1045') // 連線失敗
die("連線失敗"); // 即結束程式
}
?>

 

釋放記憶體

<?php
////釋放記憶體////////////////////////////
$conn = NULL;

?>

 

總共幾筆記錄

$result->rowCount();

<?php
$sql="SELECT * FROM books";
$result=$conn->query($sql);
//取得查詢結果的筆數
$num = $result->rowCount();

?>

 

總共幾個欄位

$result->columnCount();

<?php
$sql="SELECT * FROM books";
$result=$conn->query($sql);
//欄位數目
$num = $result->columnCount();

?>

 

查詢結果一次給定陣列

$row = $result->fetchAll();

<?php
$sql="SELECT * FROM books";
$result=$conn->query($sql);
//查詢結果一次給定陣列
$row = $result->fetchAll(PDO::FETCH_ASSOC);

?>

輸出文字欄位:$row = $result->fetchAll(PDO::FETCH_ASSOC);
輸出數字欄位:$rowe = $result->fetchAll(PDO::FETCH_NUM);
輸出Both:$row = $result->fetchAll();

 

查詢結果迴圈給定陣列

$row = $result->fetch(PDO::FETCH_BOTH

<?php
$sql="SELECT * FROM books";
$result=$conn->query($sql);
//查詢結果迴圈給定陣列
while($row = $result->fetch(PDO::FETCH_ASSOC)) {
$str =$row['書籍名稱'];
}

?>

輸出文字欄位:$row = $result->fetch(PDO::FETCH_ASSOC);
輸出數字欄位:$rowe = $result->fetch(PDO::FETCH_NUM);
輸出Both:$row = $result->fetch(fetch(PDO::FETCH_BOTH);

 

查詢所有資料表記錄

PDO::FETCH_ASSOC:
PDO::FETCH_BOTH (default):
PDO::FETCH_BOUND:
PDO::FETCH_CLASS:
PDO::FETCH_INTO:
PDO::FETCH_LAZY:
PDO::FETCH_NAMED:
PDO::FETCH_NUM:
PDO::FETCH_OBJ:
PDO::FETCH_PROPS_LATE:

<?php
//引入資料庫設定檔案
require_once("mysqlpdo.inc.php");

//查詢【員工】資料表的的資料
$sql="SELECT * FROM 資料表";
$result=$conn->query($sql); // 執行查詢

//給定$row[][]二維陣列-文字欄位////////////////////////////
$row = $result->fetchAll(PDO::FETCH_ASSOC);

....

////釋放記憶體////////////////////////////
$conn = NULL;

?>

輸出文字欄位:$row = $result->fetchAll(PDO::FETCH_ASSOC);
輸出數字欄位:$rowe = $result->fetchAll(PDO::FETCH_NUM);
輸出Both:$row = $result->fetchAll();

 

關鍵字查詢資料表記錄

<?php
//引入資料庫設定檔案
require_once("mysqlpdo.inc.php");

//關鍵字查詢資料表的的資料
if(isset($_POST['輸入查詢欄位name']))
$sql="SELECT * FROM 資料表 where 欄位名稱 like '%".$_POST['輸入查詢欄位name']."%'";
else
$sql="SELECT * FROM 資料表";

$result=$conn->query($sql); // 執行查詢

//給定$row[][]二維陣列-文字欄位////////////////////////////
$row = $result->fetchAll(PDO::FETCH_ASSOC);

....

////釋放記憶體////////////////////////////
$conn = NULL;

?>

輸出文字欄位:$row = $result->fetchAll(PDO::FETCH_ASSOC);
輸出數字欄位:$rowe = $result->fetchAll(PDO::FETCH_NUM);
輸出Both:$row = $result->fetchAll();

 

根據某欄位排序

<?php
//引入資料庫設定檔案
require_once("mysqlpdo.inc.php");

///讀取要排序的欄位//////////////////////////
if(isset($_GET['sortcolumn'])){
$sortcolumn = $_GET['sortcolumn'];
}else{
$sortcolumn = "預設欄位名稱";
}

//查詢資料表的的資料
$sql="SELECT * FROM 資料表 order by ".$sortcolumn." desc";
$result=$conn->query($sql); // 執行查詢

//給定$row[][]二維陣列-文字欄位////////////////////////////
$row = $result->fetchAll(PDO::FETCH_ASSOC);

....

////釋放記憶體////////////////////////////
$conn = NULL;

?>

輸出文字欄位:$row = $result->fetchAll(PDO::FETCH_ASSOC);
輸出數字欄位:$rowe = $result->fetchAll(PDO::FETCH_NUM);
輸出Both:$row = $result->fetchAll();

 

查詢所有資料表記錄(尚待確認??)

SQL Injection 方式

<?php
//引入資料庫設定檔案
require_once("mysqlpdo.inc.php");

$sql="SELECT * FROM 資料表 where 欄位 ='李大同'";
$stmt = $conn->prepare($sql);
// 繫結參數
$stmt->bindParam(1,$sortcolumn,PDO::PARAM_STR);
$stmt=$conn->query($sql); // 執行查詢
$stmt->execute();

//給定$row[][]二維陣列-文字欄位////////////////////////////
$row = $result->fetchAll(PDO::FETCH_ASSOC);

....

////釋放記憶體////////////////////////////
$conn = NULL;

?>

輸出文字欄位:$row = $result->fetchAll(PDO::FETCH_ASSOC);
輸出數字欄位:$rowe = $result->fetchAll(PDO::FETCH_NUM);
輸出Both:$row = $result->fetchAll();

 

新增一筆記錄

<?php
//引入資料庫設定檔案
require_once("mysqlpdo.inc.php");

//新增欄位///////////////////////////////////////////
if(isset($_POST['bookname'])){
$sql="INSERT 資料表 (書籍名稱, 價格) VALUES ('{$_POST['bookname']}','{$_POST['bookprice']}')";

if ($conn->exec($sql)) // 執行SQL指令
echo "資料庫新增記錄成功 <br/>";
else
die("資料庫新增記錄失敗<br/>");

}

....

////釋放記憶體////////////////////////////
$conn = NULL;

?>

 

新增一筆記錄

SQL Injection 方式

PDO::PARAM_BOOL (integer)
PDO::PARAM_NULL (integer)
PDO::PARAM_INT (integer)
PDO::PARAM_STR (integer)

PDO::PARAM_STR_NATL (integer)
PDO::PARAM_STR_CHAR (integer)
PDO::PARAM_LOB (integer)
PDO::PARAM_STMT (integer)
PDO::PARAM_INPUT_OUTPUT PDO::PARAM_* data type.

(1).沒有浮點數floattype,小數的decimals ,用PDO::PARAM_STR取代,而且要轉換變數(string) $floa

(2).沒有日期時間,用PDO::PARAM_STR取代。

<?php
//引入資料庫設定檔案
require_once("mysqlpdo.inc.php");

$sql="INSERT 資料表 (姓名,留言,日期時間) VALUES (?,?,?)";
$stmt = $db->prepare($sql);

// 繫結參數
$stmt->bindParam(1,$name,PDO::PARAM_STR);
$stmt->bindParam(2,$message,PDO::PARAM_STR);
$stmt->bindParam(3,$strnowtime,PDO::PARAM_STR);

// 寫入資料庫
//$stmt->execute();
if ( $stmt->execute() ) // 執行SQL指令
echo "資料庫新增記錄<br/>";
else
die("資料庫新增記錄失敗<br/>");

....

////釋放記憶體////////////////////////////
$conn = NULL;

?>

 

刪除一筆記錄

<?php
//引入資料庫設定檔案
require_once("mysqlpdo.inc.php");

//刪除欄位/////
if(isset($_GET['delnum'])){
$sql="delete from books 資料表 書籍編號=".$_GET['delnum'];
if ($conn->exec($sql)) // 執行SQL指令
echo "資料庫刪除記錄成功。<br/>";
else
die("資料庫刪除記錄失敗<br/>");
}
....

////釋放記憶體////////////////////////////
$conn = NULL;

?>

 

刪除一筆記錄

SQL Injection 方式

PDO::PARAM_BOOL (integer)
PDO::PARAM_NULL (integer)
PDO::PARAM_INT (integer)
PDO::PARAM_STR (integer)

PDO::PARAM_STR_NATL (integer)
PDO::PARAM_STR_CHAR (integer)
PDO::PARAM_LOB (integer)
PDO::PARAM_STMT (integer)
PDO::PARAM_INPUT_OUTPUT PDO::PARAM_* data type.

(1).沒有浮點數floattype,小數的decimals ,用PDO::PARAM_STR取代,而且要轉換變數(string) $floa

(2).沒有日期時間,用PDO::PARAM_STR取代。

<?php
//引入資料庫設定檔案
require_once("mysqlpdo.inc.php");

//刪除欄位////
if(isset($_GET['delnum'])){
$sql="delete from 資料表 where 書籍編號=?";
$stmt = $conn->prepare($sql);
// 繫結參數
$stmt->bindParam(1,$_GET['delnum'],PDO::PARAM_INT);
if ($stmt->execute()) // 執行SQL指令
echo "資料庫刪除記錄成功。<br/>";
else
die("資料庫刪除記錄失敗<br/>");
}....

////釋放記憶體////////////////////////////
$conn = NULL;

?>

 

修改一筆記錄

<?php
//引入資料庫設定檔案
require_once("mysqlpdo.inc.php");

//修改欄位///
if(isset($_POST['editnum'])){
$sql="update 資料表 set 書籍名稱='".$_POST['editname']."',價格=".$_POST['editprice']." where 書籍編號=".$_POST['editnum'];
if ( $conn->exec($sql) ) // 執行SQL指令
echo "資料庫更新記錄成功<br/>";
else
die("資料庫更新記錄失敗<br/>");
}
....

////釋放記憶體////////////////////////////
$conn = NULL;
//最後轉換到主網頁
header("Location:exp16-12.html");

?>

 

修改一筆記錄

SQL Injection 方式

PDO::PARAM_BOOL (integer)
PDO::PARAM_NULL (integer)
PDO::PARAM_INT (integer)
PDO::PARAM_STR (integer)

PDO::PARAM_STR_NATL (integer)
PDO::PARAM_STR_CHAR (integer)
PDO::PARAM_LOB (integer)
PDO::PARAM_STMT (integer)
PDO::PARAM_INPUT_OUTPUT PDO::PARAM_* data type.

(1).沒有浮點數floattype,小數的decimals ,用PDO::PARAM_STR取代,而且要轉換變數(string) $floa

(2).沒有日期時間,用PDO::PARAM_STR取代。

<?php
//引入資料庫設定檔案
require_once("mysqlpdo.inc.php");

//修改欄位/////
if(isset($_POST['editnum'])){
$sql="update 資料表 set 書籍名稱=?,價格=? where 書籍編號=?";
$stmt = $conn->prepare($sql);
// 繫結參數
$stmt->bindParam(1,$_POST['editname'],PDO::PARAM_STR);
$stmt->bindParam(2,$_POST['editprice'],PDO::PARAM_STR);
$stmt->bindParam(3,$_POST['editnum'],PDO::PARAM_INT);
if ($stmt->execute()) // 執行SQL指令
echo "資料庫更新記錄成功<br/>";
else
die("資料庫更新記錄失敗<br/>");
}

....

////釋放記憶體////////////////////////////
$conn = NULL;
//最後轉換到主網頁
header("Location:exp16-12.html");

?>

 

 

查詢結果

顯示全部(方法一)

(不分頁,bootstrap,沒排序)

範例結果

$sql= "SELECT 姓名,職稱,出生日期,地址,電話號碼 FROM 資料表";
$result=$conn->query($sql);

echo "<table class='table table-striped table-bordered table-hover table-condensed'><thead class='thead-light'><th>姓名</th><th>職稱</th><th>出生日期</th><th>地址</th><th>電話號碼</th></tr></thead><tbody>";
$mydata =$result->fetchAll(PDO::FETCH_ASSOC);

foreach($mydata as $i=>$v){

echo "<tr><td>".$v['姓名']."</td><td>".$v['職稱']."</td><td>".$v['出生日期']."</td><td>".$v['地址']."</td><td>".$v['電話號碼']."</td></tr>";
}
echo "</table>";

 

 

查詢結果

顯示全部(方法二)

(不分頁,bootstrap,沒排序)

範例結果

$sql= "SELECT 姓名,職稱,出生日期,地址,電話號碼 FROM 資料表";
$result=$conn->query($sql);

echo "<table class='table table-striped table-bordered table-hover table-condensed'><thead class='thead-light'><th>姓名</th><th>職稱</th><th>出生日期</th><th>地址</th><th>電話號碼</th></tr></thead><tbody>";

while ($row=$result->fetch(PDO::FETCH_ASSOC)) {
echo "<tr><td>".$row['姓名']."</td><td>".$row['職稱']."</td><td>".$row['出生日期']."</td><td>".$row['地址']."</td><td>".$row['電話號碼']."</td></tr>";
}
echo "</table>";

 

查詢結果

顯示表格與分頁

(沒有標題排序)

(沒有刪除修改)

<?php
///計算顯示的編號~幾號/////////////////////////////////////////////////////
//設定參數
$numperpage=8; //每頁顯示筆數
$totalnum = $result->rowCount(); //全部筆數
$totalpage = ceil($totalnum/$numperpage); //最多頁數
//目前頁數 :$nowpage
if(isset($_GET['pagenum'])){
$nowpage =$_GET['pagenum'];
}else{
$nowpage =1;
}
//每頁顯示編號的min,max
$min=($nowpage-1)*$numperpage;
$max=($nowpage-1)*$numperpage+$numperpage;
if($max>$totalnum){
$max = $totalnum;
}

//顯示表格///////////////////////////////////////////
echo "<table class='table table-striped table-bordered table-hover table-condensed'><thead class='thead-light'><tr><th><a href='exp15-10.php?sortcolumn=書籍編號'>書籍編號</a></th><th><a href='exp15-10.php?sortcolumn=書籍名稱'>書籍名稱</a></th><th><a href='exp15-10.php?sortcolumn=價格'>價格</a></th></tr></thead><tbody>";
for($i=$min;$i<$max;$i++){
echo sprintf("<tr><td>%s</td><td>%s</td><td>%s</td></tr>",$rowpage[$i]['書籍編號'],$rowpage[$i]['書籍名稱'],$rowpage[$i]['價格']);
}
echo "</tbody></table>";

echo "<br/>";

///顯示頁數//////////////////////////////////////////////
echo "<nav aria-label='Page navigation example'> ";
echo "<ul class='pagination'> ";
echo "<li class='page-item'><a class='page-link' href='exp15-10.php?pagenum=1&sortcolumn=".$sortcolumn."'>首頁</a></li> ";

if($nowpage>1)echo "<li class='page-item'><a class='page-link' href='exp15-10.php?pagenum=".($nowpage-1)."&sortcolumn=".$sortcolumn."'>上一頁</a></li> ";

for($i=1;$i<=$totalpage;$i++){
if($i==$nowpage)echo "<li class='page-item'><a class='page-link'>".$i."</a></li>";
else echo "<li class='page-item'><a class='page-link' href='exp15-10.php?pagenum=".$i."&sortcolumn=".$sortcolumn."'>".$i."</a></li>";
}

if($nowpage<$totalpage)echo "<li class='page-item'><a class='page-link' href='exp15-10.php?pagenum=".($nowpage+1)."&sortcolumn=".$sortcolumn."'>下一頁</a></li> ";
echo "<li class='page-item'><a class='page-link' href='exp15-10.php?pagenum=".$totalpage."&sortcolumn=".$sortcolumn."'>尾頁</a></li> ";

echo "<li class='page-item'>跳到:<input type='text' id='mynum' size=3 value='".$nowpage."' /></li> ";
echo "<li class='page-item'><a class='page-link' href='javascript:gopage()'>前往</a></li> ";
echo "</ul> ";
echo "</nav> ";

?>

 

查詢結果

顯示表格與分頁

(有標題排序)

(沒有刪除修改)

<?php
///計算顯示的編號~幾號/////////////////////////////////////////////////////
//設定參數
$numperpage=8; //每頁顯示筆數
$totalnum = $result->rowCount(); //全部筆數
$totalpage = ceil($totalnum/$numperpage); //最多頁數
if(isset($_GET['pagenum'])){
$nowpage =$_GET['pagenum'];
}else{
$nowpage =1;
}
//每頁顯示編號的min,max
$min=($nowpage-1)*$numperpage;
$max=($nowpage-1)*$numperpage+$numperpage;
if($max>$totalnum){
$max = $totalnum;
}

//顯示表格///////////////////////////////////////////
echo "<br/><br/>";
echo "<table class='table table-striped table-bordered table-hover table-condensed'><thead class='thead-light'><tr><th>書籍編號</th><th>書籍名稱</th><th>價格</th></tr></thead><tbody>";
for($i=$min;$i<$max;$i++){
echo sprintf("<tr><td>%s</td><td>%s</td><td>%s</td></tr>",$rowpage[$i]['書籍編號'],$rowpage[$i]['書籍名稱'],$rowpage[$i]['價格']);

}
echo "</table>";

?>

 

查詢結果

顯示表格與分頁

(有標題排序)

(有刪除修改)

<?php
///計算顯示的編號~幾號/////////////////////////////////////////////////////
//設定參數
$numperpage=8; //每頁顯示筆數
$totalnum = $result->rowCount(); //全部筆數
$totalpage = ceil($totalnum/$numperpage); //最多頁數
//目前頁數 :$nowpage
if(isset($_GET['pagenum'])){
$nowpage =$_GET['pagenum'];
}else{
$nowpage =1;
}
//每頁顯示編號的min,max
$min=($nowpage-1)*$numperpage;
$max=($nowpage-1)*$numperpage+$numperpage;
if($max>$totalnum){
$max = $totalnum;
}

//顯示表格///////////////////////////////////////////
echo "<table class='table table-striped table-bordered table-hover table-condensed'><thead class='thead-light'><tr><th><a href='exp15-10.php?sortcolumn=書籍編號'>書籍編號</a></th><th><a href='exp15-10.php?sortcolumn=書籍名稱'>書籍名稱</a></th><th><a href='exp15-10.php?sortcolumn=價格'>價格</a></th><th></th><th></th></tr></thead><tbody>";
for($i=$min;$i<$max;$i++){
echo sprintf("<tr><td>%s</td><td>%s</td><td>%s</td><td><a href='exp15-10.php?delnum=%s'>刪除</a></td><td><a href='exp15-10a.php?editnum=%s&editname=%s&editprice=%s'>修改</a></td></tr>",$rowpage[$i]['書籍編號'],$rowpage[$i]['書籍名稱'],$rowpage[$i]['價格'],$rowpage[$i]['書籍編號'],$rowpage[$i]['書籍編號'],$rowpage[$i]['書籍名稱'],$rowpage[$i]['價格']);
}
echo "</tbody></table>";

echo "<br/>";

///顯示頁數//////////////////////////////////////////////
echo "<nav aria-label='Page navigation example'> ";
echo "<ul class='pagination'> ";
echo "<li class='page-item'><a class='page-link' href='exp15-10.php?pagenum=1&sortcolumn=".$sortcolumn."'>首頁</a></li> ";

if($nowpage>1)echo "<li class='page-item'><a class='page-link' href='exp15-10.php?pagenum=".($nowpage-1)."&sortcolumn=".$sortcolumn."'>上一頁</a></li> ";

for($i=1;$i<=$totalpage;$i++){
if($i==$nowpage)echo "<li class='page-item'><a class='page-link'>".$i."</a></li>";
else echo "<li class='page-item'><a class='page-link' href='exp15-10.php?pagenum=".$i."&sortcolumn=".$sortcolumn."'>".$i."</a></li>";
}

if($nowpage<$totalpage)echo "<li class='page-item'><a class='page-link' href='exp15-10.php?pagenum=".($nowpage+1)."&sortcolumn=".$sortcolumn."'>下一頁</a></li> ";
echo "<li class='page-item'><a class='page-link' href='exp15-10.php?pagenum=".$totalpage."&sortcolumn=".$sortcolumn."'>尾頁</a></li> ";

echo "<li class='page-item'>跳到:<input type='text' id='mynum' size=3 value='".$nowpage."' /></li> ";
echo "<li class='page-item'><a class='page-link' href='javascript:gopage()'>前往</a></li> ";
echo "</ul> ";
echo "</nav> ";

?>

 

一組輸入文字方塊,按鈕

(但是按按鈕後,輸入文字會不見)

 

<form class="form-inline" method="post" action="exp15-4.php">
<div class="form-group mb-2">
<label for="bookname" >輸入書名關鍵字:</label>
<input type="text" class="form-control" name="bookname" placeholder="輸入書名">
</div>
<button type="submit" class="btn btn-primary mb-2">查詢</button>
</form>

 

一組輸入文字方塊,按鈕

(按按鈕後,輸入文字還會繼續顯示)

 

<form class="form-inline" method="post" action="exp15-6.php">
<div class="form-group mb-2">
<label for="bookname" >輸入書名關鍵字:</label>
<input type="text" class="form-control" name="bookname" value="<?php
if(isset($_POST['bookname']))echo $_POST['bookname'];

?>">
</div>
<button type="submit" class="btn btn-primary mb-2">查詢</button>
</form>

 

兩組輸入文字方塊,一個按鈕

(在同一行)

(但是按按鈕後,輸入文字會不見)

 

<form class="form-inline" method="post" action="exp15-10.php">
<div class="form-group">
<label for="bookname" >書名:</label>
<input type="text" class="form-control" name="bookname" placeholder="輸入書名">
</div>
<div class="form-group mx-sm-3 mb-2">
<label for="bookprice" > 價格:</label>
<input type="text" class="form-control" name="bookprice" placeholder="1">
</div>
<button type="submit" class="btn btn-primary mb-2">新增</button>
</form>

     
1

 

留言板card顯示面板

(全部顯示)(方法一)

範例結果

foreach($mydata as $i=>$v){
echo "<div class='card'>";
echo "<h5 class='card-header'>【".$v['留言編號']."】".$v['姓名']."</h5>";
echo "<div class='card-body'>";
echo "<h5 class='card-title'>".$v['日期時間']."</h5>";
echo "<p class='card-text'>".$v['留言']."</p>";
echo "</div></div>";
}

1

 

留言板card顯示面板

(全部顯示)(方法二)

範例結果

foreach($mydata as $i=>$v){

for($i=$min;$i<$max;$i++){
echo "<div class='card'>";
echo "<h5 class='card-header'>【".$rowpage[$i]['留言編號']."】".$rowpage[$i]['姓名']."</h5>";
echo "<div class='card-body'>";
echo "<h5 class='card-title'>".$rowpage[$i]['日期時間']."</h5>";
echo "<p class='card-text'>".$rowpage[$i]['留言']."</p>";
echo "</div></div>";
}

2

 

留言板card顯示面板

(分頁顯示)

範例結果

while($row = $result->fetch(PDO::FETCH_ASSOC)) {
echo "<div class='card'>";
echo "<h5 class='card-header'>【".$row['留言編號']."】".$row['姓名']."</h5>";
echo "<div class='card-body'>";
echo "<h5 class='card-title'>".$row['日期時間']."</h5>";
echo "<p class='card-text'>".$row['留言']."</p>";
echo "</div></div>";
}

 
 
Chp16. ajax非同步http請求
練習範例 16-1檢查註冊名(XHR請求) 16-2檢查註冊名(jQuery $.ajax(),dataType=text) 16-3.檢查註冊名(jQuery $.ajax(),dataType=jsonp 16-4.檢查註冊名(jQuery $.ajax(),dataType=jsonp,建立function callBackdata
16-5-1XHR讀取php一維陣列 16-5-2XHR讀取php二維陣列(失敗) 16-5-3XHR讀取php物件陣列 16-5-4XHR讀取mySQL查詢物件陣列
16-6-1jQuery $.ajax讀取php一維陣列 16-6-2jQuery $.ajax讀取php二維陣列(失敗) 16-6-3jQuery $.ajax讀取php物件陣列 16-6-4jQuery $.ajax讀取json檔案
16-6-5jQuery $.ajax讀取mySQL查詢物件陣列 16-6-6jQuery $.ajax傳回mySQL兩組數據陣列  
16-7jQuery $.ajax讀取mySQL,Diy自行建立的json 16-8jQuery $.ajax讀取mySQL,Diy自行建立的json,success接收  
16-9.陽春ajax分頁(用javascript-DOM事件) 16-10.Bootstrap分頁(用jQuery 的DOM事件) 16-11.Bootstrap分頁排序(用jQuery 的DOM事件) 16-12.Bootstrap刪除(用jQuery 的DOM事件)
15-9修改一筆記錄 15-10新增一筆記錄(避免SQL Injection,輸入一些特殊字元而逃過檢查,而造成正常登入)) 15-11留言板card
  下載json檔案 book.json school.json personnel.json  
    zipcode01.json zipcode02.json    
關鍵程式碼(XHR讀取主機資料) XHR讀取純文字 XHR讀取陣列,物件陣列 XHR讀取json檔案 XHR讀取mySQL查詢物件
關鍵程式碼(jQuery ajax讀取主機資料) $.ajax萬用格式 $.ajax讀取純文字 $.ajax讀取陣列,二維陣列,物件陣列 $.ajax讀取json檔案
  **$.ajax讀取mySQL查詢物件 **$.ajax傳回mySQL兩組數據陣列 $.ajax讀取jsonp,再由callBackdata函數接收 $.ajax讀取jsonp,callBackdata,但在success接收
  $.ajax讀取自己建立的jsonp,再由callBackdata函數接收      
  關鍵字查詢的ajax寫法 查詢陽春分頁的DOM
(javascript)寫法
查詢bootstrap分頁的DOM
(jQuery)寫法
查詢bootstrap分頁+表格排序的DOM
(jQuery)寫法
  虛擬產生ul-li之DOM元件的$.ajax寫法 虛擬產生table-th之DOM元件的$.ajax寫法    
關鍵程式碼(一般) 查詢所有記錄 查詢關鍵字 查詢根據某欄位排序 新增一筆記錄
  刪除一筆記錄 修改一筆記錄    
  總共幾筆記錄 總共幾個欄位 查詢結果一次給定陣列 查詢結果迴圈給定陣列
關鍵程式碼(SQL Injection ) 查詢所有記錄 新增一筆記錄 刪除一筆記錄 修改一筆記錄
關鍵程式碼(表格呈現) 查詢顯示全部(1)不分頁,bootstrap,沒排序 查詢顯示全部(2)不分頁,bootstrap,沒排序 查詢顯示顯示分頁-沒排序-沒刪除修改 查詢顯示顯示分頁-有排序-沒刪除修改
  查詢顯示顯示分頁-有排序-有刪除修改      
關鍵程式碼(輸入文字按鈕) 一組輸入文字方塊+按鈕(1)按鈕後,文字會不見 一組輸入文字方塊+按鈕(2)按鈕後,文字保留 兩組輸入文字方塊,一個按鈕(在同一行)  
關鍵程式碼(留言板card) 留言板card顯示全部(1) 留言板card顯示全部(2) 留言板card顯示分頁  
下載練習mySQL資料庫 下載資料庫      
 

 

ajax非同步連線語法

<script src="http://code.jquery.com/jquery-1.9.1.min.js" integrity="sha256-wS9gmOZBqsqWxgIVgA8Y9WcQOa7PgSIX+rPA0VL2rbQ=" crossorigin="anonymous"></script>

<script type="text/javascript">
function ajaxCall(target){
//發出 ajax call
var data = $.ajax({
type: "get",
async: true,
url: target,
dataType: "格式",
error: function(){
alert("連線主機發生錯誤!");
},
success: function(data){
document.getElementById('result').innerHTML = data;
}
});
}
</script>

//注意事項/////////////////////////////////////////
1.dataType格式:可選的資料類型有:
xml:傳回可用jQuery處理的XML
html:傳回HTML,包含jQuery會自動幫你處理的script tags。
script:傳回可執行的JavaScript。(script不會被自動cache,除非cache設為true)
json:傳回JSON
jsonp:在URL加上?callback=?參數,並在Server端配合送回此jsonp callback。
text:傳回純文字字串。

2.若指定dataType為json,直接讀取json純文字檔,或是php傳回的json檔

3.若指定dataType為jsonp,其實不需要在指定的callBackdata function裡面接收資料,即可直接在success: function接收資料(但是前提是要有這行jsonpCallback:'callBackdata')

 

 

在textbox輸入文字
即時傳送輸入文字的事件
寫法

<input id="t1" onkeyup="ajaxCall('檔名.php?name='+this.value)" type="text" />

 

 

$.ajax傳回純文字

<script src="jquery/jquery-1.8.3.min.js"></script>

<script type="text/javascript">
function ajaxCall(target){
//發出 ajax call
var data = $.ajax({
type: "get",
async: true,
url: target,
error: function(){
alert("連線主機發生錯誤!");
},
success: function(data){
document.getElementById('result').innerHTML = data;
}
});
}
</script>

//#########################

<?php

$txt = "$name 這個姓名沒有人註冊過,可以使用";

echo $txt;
?>

 

 

$.ajax讀取陣列,二維陣列,物件陣列

<script src="jquery/jquery-1.8.3.min.js"></script>

<script type="text/javascript">
function ajaxCall(target){
//發出 ajax call
var data = $.ajax({
type: "GET",
async: true,
url: target,
dataType: "json",
success: function(jsonObj){
str ="";

/////////////////////////////////////////////////////////
//data本身就是陣列
str="<table class='table table-striped table-bordered table-hover table-condensed'><thead class='thead-dark'><tr><th>英文教學</th></tr></thead><tbody>";
for(i in jsonObj){
str += "<tr><td>" + jsonObj[i] + "</td></tr>";
}
str +="</tbody></table>"
document.getElementById("result").innerHTML += str;
///////////////////////////////////////////
},
error: function(){
alert("連線出現錯誤");
}
});
}
</script>

//####################################
<?php
//php陣列,物件
$a[0] = "Did you lose weight intentionally?妳有故意在減肥嗎?";
$a[1] = "I've got missed calls. 我有未接來電耶~";
$a[2] = "I wonder which shoes to put on. 該穿那雙鞋呢?";

$myJSON = json_encode($a);

echo $myJSON;

 

 

$.ajax讀取json檔案

<script src="jquery/jquery-1.8.3.min.js"></script>

<script type="text/javascript">
function ajaxCall(){
$.ajax({
type: 'GET',
async: true,
url: 'json/book.json',
dataType: "json",
success: function(jsonObj){
str ="";
/////////////////////////////////////////////////////////
str="<table class='table table-striped table-bordered table-hover table-condensed'><thead class='thead-dark'><tr><th>書名</th><th>作者</th><th>出版日</th></tr></thead><tbody>";
for(i in jsonObj){
str += "<tr><td>" + jsonObj[i].title + "</td><td>" + jsonObj[i].author + "</td><td>" + jsonObj[i].pubdate + "</td></tr>";
}
str +="</tbody></table>"
document.getElementById("result").innerHTML += str;
/////////////////////////////////////////////////////////
},
error: function(){
console.log(result);
alert("連線出現錯誤");
}
});
}
</script>

 

 

**實用

$.ajax讀取mySQL查詢物件

<script src="jquery/jquery-1.8.3.min.js"></script>

<script type="text/javascript">
function ajaxCall(target){
//發出 ajax call
$.ajax({
type: 'GET',
async: true,
url: target,
dataType: "json",
success: function(jsonObj){
str ="";
///////////////////////////////////////
str="<table class='table table-striped table-bordered table-hover table-condensed'><thead class='thead-dark'><tr><th>書籍編號</th><th>書籍名稱</th><th>價格</th></tr></thead><tbody>";
for(i in jsonObj){
str += "<tr><td>" + jsonObj[i].書籍編號 + "</td><td>" + jsonObj[i].書籍名稱 + "</td><td>" + jsonObj[i].價格 + "</td></tr>";
}
str +="</tbody></table>"
document.getElementById("result").innerHTML += str;
//////////////////////////////////////
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
console.log("XMLHttpRequest", XMLHttpRequest);
console.log("textStatus", textStatus);
console.log("errorThrown", errorThrown);
}
});
}
</script>

//########################################
<?php
header("Content-Type: application/json; charset=UTF-8");

//查詢資料表
//引入資料庫設定檔案
require_once("mysqlpdo.inc.php");

//關鍵字查詢資料表的的資料
$sql="SELECT * FROM books";
$result=$conn->query($sql); // 執行查詢

//給定$rowpage[][]二維陣列///////////////////
//$row = $result->fetchAll();//不可以用both,否則json格式不對,只能傳回文字欄位 FETCH_ASSO
$row = $result->fetchAll(PDO::FETCH_ASSOC);

/////傳回將物件轉換成json的物件////////////////////
//解決問題一:PHP json_encode() MySQL抓取中文字資料亂碼問題:json_encode($row,JSON_UNESCAPED_UNICODE)
$myJSON = json_encode($row,JSON_UNESCAPED_UNICODE);

echo $myJSON;

////釋放記憶體////////////////
$conn = NULL;

?>

 

 

**實用

**$.ajax傳回mySQL兩組數據陣列

 

<script src="jquery/jquery-1.8.3.min.js"></script>

<script type="text/javascript">
function ajaxCall(target){
$.ajax({
type: 'GET',
async: true,
url: target,
dataType: "json",
success: function(jsonObj){
str ="";
/////////////////////////////////////////////////////////
//jsonObj本身就是陣列,不須要再轉換

str="<table class='table table-striped table-bordered table-hover table-condensed'><thead class='thead-dark'><tr><th>書籍編號</th><th>書籍名稱</th><th>價格</th></tr></thead><tbody>";
for(i in jsonObj.data){
str += "<tr><td>" + jsonObj.data[i].書籍編號 + "</td><td>" + jsonObj.data[i].書籍名稱 + "</td><td>" + jsonObj.data[i].價格 + "</td></tr>";
}
str +="</tbody></table>"
document.getElementById("result").innerHTML += str;

},
error: function(XMLHttpRequest, textStatus, errorThrown) {
console.log("XMLHttpRequest", XMLHttpRequest);
console.log("textStatus", textStatus);
console.log("errorThrown", errorThrown);
}

});
}
</script>

//#########################################
<?php
header('Content-type: application/json');

//引入資料庫設定檔案
require_once("mysqlpdo.inc.php");

//關鍵字查詢資料表的的資料
$sql="SELECT * FROM books";
$result=$conn->query($sql);

$row = $result->fetchAll(PDO::FETCH_ASSOC);

//取得查詢結果的筆數
$rowCount = $result->rowCount();

//目前頁數
$nowpage= 2;

//輸出兩組數據,一個為資料表數據data,一個為參數parameter
$myJSON = array('data'=>$row,'parameter'=>array("rowCount"=>$rowCount,"nowpage"=>$nowpage));

/////傳回將物件轉換成json的物件////////////////////
//解決問題一:PHP json_encode() MySQL抓取中文字資料亂碼問題:json_encode($row,JSON_UNESCAPED_UNICODE)
$myJSON = json_encode($myJSON,JSON_UNESCAPED_UNICODE);

echo $myJSON;

////釋放記憶體////////////////////////////
$conn = NULL;

?>

 

 

**實用

$.ajax讀取自己建立的jsonp,再由callBackdata函數接收

 

<script src="jquery/jquery-1.8.3.min.js"></script>

<script type="text/javascript">
function ajaxCall(target){
var data = $.ajax({
type: "get",
async: true,
url: target,
dataType: "jsonp",
jsonpCallback:"callBackdata",
});
}

function callBackdata(txt) {
//轉換字串變成json物件變數
var jsonObj = JSON.parse(txt);
str ="";
//////////////////////////////
//在這裡,顯示表格
///////////////////////////
str="<table class='table table-striped table-bordered table-hover table-condensed'><thead class='thead-light'><th>書籍編號</th><th>書籍名稱</th><th>價格</th></thead<tbody>";
for(i in jsonObj)
{
str += "<tr><td>" + jsonObj[i].id + "</td><td>" + jsonObj[i].name + "</td><td>" + jsonObj[i].price + "</td></tr>";
}
str +="</table>"
document.getElementById("result").innerHTML = str;
}
</script>

//############################
<?php
//引入資料庫設定檔案
require_once("mysqlpdo.inc.php");

//關鍵字查詢資料表的的資料
if(isset($_GET['bookname']))
$sql="SELECT * FROM books where 書籍名稱 like '%".$_GET['bookname']."%'";
else
$sql="SELECT * FROM books";
$result=$conn->query($sql); // 執行查詢

//將查詢結果,輸出成json物件變數
$str="callBackdata(JSON.stringify([";
$i=0;
while($row = $result->fetch(PDO::FETCH_BOTH)) {
$str .="{\"id\":\"".$row['書籍編號']."\",";
$str .="\"name\":\"".$row['書籍名稱']."\",";
$str .="\"price\":\"".$row['價格']."\"}";
$i +=1;
if ($i != $result->rowCount())$str .=",";
}//end of while

$str .="]));";

echo $str;
////釋放記憶體////////////////////////////
$conn = NULL;

?>

 

 

**實用

已經存在html元件的呼叫$.ajax寫法

 

例如:textboxk查詢關鍵字

<script src="jquery/jquery-1.8.3.min.js"></script>

<script type="text/javascript">
function ajaxCall(target){
$.ajax({
type: 'GET',
async: true,
url: target,
dataType: "json",
success: function(jsonObj){
str ="";
str="<table class='table table-striped table-bordered table-hover table-condensed'><thead class='thead-dark'><tr><th>書籍編號</th><th>書籍名稱</th><th>價格</th></tr></thead><tbody>";
for(i=min;i<max;i++){
str += "<tr><td>" + jsonObj.data[i].書籍編號 + "</td><td>" + jsonObj.data[i].書籍名稱 + "</td><td>" + jsonObj.data[i].價格 + "</td></tr>";
}
str +="</tbody></table>"
document.getElementById("result").innerHTML = str;
},
error: function(XMLHttpRequest, textStatus, errorThrown) {}
});
}
</script>

//###########################

<form class="form-inline" method="" action="">
<div class="form-group mb-2">
<label for="bookname" >輸入書名關鍵字:</label>
<input type="text" class="form-control" name="bookname" id="bookname"
onkeyup="ajaxCall('exp16-9-keyword.php?name='+this.value)" placeholder="輸入書名">
</div>

</form>

<div id="result"></div>

 

 

**實用

自己虛擬製造的DOM元件之呼叫$.ajax寫法

 

例如:
虛擬產生的ul-li項目

1.先刪除所有舊的的Dom
$('.page-item').remove();

 

2.再append你要放入的bootstrap的語法(一定要頭尾標籤同時放入,可用str累加)

$('#ul01').append("<li id='litop' class='page-item'><a class='page-link' href='#' id='1'>首頁</a></li>");

 

3.再$('li a').bind('click', function() {...},
**利用$(this).html()取得按到元件的innerHtml文字
**利用$(this).attr('id')取得被按到的元件的id值
**所以,可先把數值儲存到id或innerHtml

$('li a').bind('click', function() {
ajaxCall("exp.php?num="+
$(this).attr('id'));
});

<script src="jquery/jquery-1.8.3.min.js"></script>

<script type="text/javascript">
function ajaxCall(target){
$.ajax({
type: 'GET',
async: true,
url: target,
dataType: "json",
success: function(jsonObj){

//先刪除所有舊的 page-item 的Dom ////////////
$('.page-item').remove();
/////////////////////////////////
$('#ul01').append("<li id='litop' class='page-item'><a class='page-link' href='#' id='1'>首頁</a></li>");

//////////////////////////////
//雖然用迴圈輸出的多個元件,但沒關係,只要用$('li a').bind('click', function() {。。。。就可以知道那個超連結a被按到了,
///$(this)代表這個被按到的元件
//$(this).html()代表這個被按到的元件的innerHtml文字
//$(this).attr('id')代表這個被按到的元件的id值,我們先把頁數放到每個li的id,然後被按到時就到這個id的頁數
//這樣的根據id到頁數的好處是,只要一個偵測按鈕click的事件函數即可,不須要寫很多偵測事件
/// 偵測目前被點按的element,呼叫其innerhtml內數字的頁數的ajaxCall()
// 注意不可以選li元素$('li'),因為li裡面還有a,所以必須選$('a'),或是$('li a')
//只有會處理DOM事件,才能做到類似google的全純網頁的ajax即時無痕傳遞
$('li a').bind('click', function() {
ajaxCall("exp16-10-keyword.php?pagenum="+
$(this).attr('id')+"&name="+bookname.value);
});

</script>

//########################################

<div id="paging">
<nav aria-label="Page navigation example">
<ul class="pagination" id="ul01">

</ul>
</nav>
</div>

 

 

**實用

自己虛擬製造的DOM元件之呼叫$.ajax寫法

 

例如:
虛擬產生的table-th項目

1.先刪除所有舊的的Dom
$('#result').empty();

 

2.再append你要放入的bootstrap的語法(一定要頭尾標籤同時放入,可用str累加)

$('#result').append(str);

 

3.再$('li a').bind('click', function() {...},
**利用$(this).html()取得按到元件的innerHtml文字
**利用$(this).attr('id')取得被按到的元件的id值
**所以,可先把數值儲存到id或innerHtml

$('th a').bind('click', function() {
ajaxCall("exp.php?num="+
$(this).attr('id'));
});

<script src="jquery/jquery-1.8.3.min.js"></script>

<script type="text/javascript">
function ajaxCall(target){
$.ajax({
type: 'GET',
async: true,
url: target,
dataType: "json",
success: function(jsonObj){

// 表格及排序 /////////////////
// 先把result裡面所有的Dom元件都清除 //////////////////////
// 觀念:append DOM注意事項:若沒有把結尾標籤加上,它會自動加上結尾標籤,例如: $('#result').append("<table>"),它會自動加上</table>
// 解決方法1:要在append(裡面),把所有頭中尾標籤,都寫上
// 解決方法2:但若是這個標籤很複雜,還要加上迴圈來產生的話,解決法:先儲存在str +=..,最後再一次append(str),即可
$('#result').empty();
str="<table class='table table-striped table-bordered table-hover table-condensed'><thead class='thead-light'><tr><th><a href='#'>書籍編號</a></th><th><a href='#'>書籍名稱</a></th><th><a href='#'>價格</a></th></tr></thead><tbody>";

for(i=min;i<max;i++){
str+="<tr><td>" + jsonObj.data[i].書籍編號 + "</td><td>" + jsonObj.data[i].書籍名稱 + "</td><td>" + jsonObj.data[i].價格 + "</td></tr>";
}
str+="</tbody></table>";
$('#result').append(str);
// document.getElementById("result").innerHTML = str;
////////////////////////////

///////////////////////////
//雖然這是用迴圈輸出的多個元件,但沒關係,只要用$('li a').bind('click', function() {。。。。就可以知道那個超連結a被按到了,
///$(this)代表這個被按到的元件
//$(this).html()代表這個被按到的元件的innerHtml文字
//$(this).attr('id')代表這個被按到的元件的id值,我們先把頁數放到每個li的id,然後被按到時就到這個id的頁數
//這樣的根據id到頁數的好處是,只要一個偵測按鈕click的事件函數即可,不須要寫很多偵測事件
/// 偵測目前被點按的element,呼叫其innerhtml內數字的頁數的ajaxCall()
// 注意不可以選li元素$('li'),因為li裡面還有a,所以必須選$('a'),或是$('li a')
//只有會處理DOM事件,才能做到類似google的全純網頁的ajax即時無痕傳遞

$('th a').bind('click', function() {
ajaxCall("exp16-11-sort-keyword.php?sortcolumn="+$(this).html()+"&name="+bookname.value);
});

</script>

//######################

<div id="result"></div>

     
     
     
一,第一種後端伺服器網頁程式:aspp.net
Chp0 :免費版軟體下載安裝,asp.net線上教學
  vs.net 2019 免費版下載 Visual Studio 2019 免費版下載      
  asp.net線上教學 w3c school線上教學 (英文) w3c school線上教學 (中文)    
 
 
Chp1 : 什麼是連結資料庫的視窗程式網頁設計,及其簡介
  下載講義 Chp1講義      
  下載講義 教學大綱      
 
 
Chp3 : 初次練習使用3種方法來建立簡單的連結資料庫的視窗程式網頁
  下載講義 Chp3講義      
  下載素材 圖像素材 product資料庫 score資料庫  
  下載成果範例網站 1-2範例 1-6範例    
 
Homework:作業1
  下載題目 作業1題目  Ftp軟體    
 
Homework:作業2
  下載題目 作業2題目 線上瀏覽成果    
  下載練習空白網站模板 網頁模板      
 
           
(B).使用VB.NET在不寫程式碼之下,設計連結資料庫的互動網站
優點:不需寫程式碼
缺點:無法做複雜功能的網頁程式
Chp B1: 建立供應商資料編修網站
  下載講義 ChpB1講義      
  素材檔案 下載資料庫      
  成果範例檔案 成果範例      
           
Chp B2: 非常簡易留言板網站
  下載講義 ChpB2講義      
  素材檔案 下載資料庫      
  成果範例檔案 成果範例      
           
Chp B3: 建立聊天室網站
  下載講義 ChpB3講義      
  素材檔案 下載資料庫      
  成果範例檔案 成果範例      
           
Chp B4: 訂閱電子報系統
  下載講義 ChpB4講義      
  下載練習空白網站模板 網頁模板      
  下載素材 資料庫      
  下載成果範例網站 下載成果範例 線上瀏覽成果    
           
Chp B5: 一般留言板
  下載講義 ChpB5講義      
  下載練習空白網站模板 網頁模板      
  下載素材 圖像素材 資料庫    
  下載成果範例網站 下載成果範例 線上瀏覽成果    
           
Chp B6: 商品資料查尋系統
  下載講義 ChpB6講義      
  下載練習空白網站模板 網頁模板      
  下載素材 圖像素材 資料庫    
  下載成果範例網站 下載成果範例 線上瀏覽成果    
           
Chp B7: 討論區
  下載講義 ChpB7講義      
  下載練習空白網站模板 網頁模板      
  下載素材 資料庫    
  下載成果範例網站 下載成果範例 線上瀏覽成果    
           
Chp B8: 會員系統
  下載講義 ChpB8講義      
  下載練習空白網站模板 網頁模板      
  下載成果範例網站 下載成果範例 線上瀏覽成果    
           
Chp B9: 發佈新聞系統
  下載講義 ChpB9講義      
  下載練習空白網站模板 網頁模板      
  下載素材 圖像素材 資料庫    
  下載成果範例網站 下載成果範例 線上瀏覽成果    
           
(C).使用VB.NET撰寫ASP.NET程式碼,設計連結資料庫的互動網站
優點:能夠設計出各種隨心所欲的各種複雜功能的網頁程式,
注意:若能配合本網站所製作的各種關鍵程式碼套件,寫網站資料庫程式碼就很簡單,一點都不困難
Chp C1: 資料庫的應用實例-- 3種資料庫Access, Excel, SQL server的程式連線
  下載講義 ChpC1講義      
  視窗講義 OleDb連線-視窗版關鍵程式碼(適用於連線Access,Excel,SQL server) SqlClient連線-視窗版關鍵程式碼(適用於連線SQL server)    
  網頁講義 OleDb連線-Web網頁版關鍵程式碼(適用於連線Access,Excel,SQL server) SqlClient連線-Web網頁版關鍵程式碼(適用於連線SQL server)    
  視窗成果 exp2-1.rar exp2-2.rar    
    exp2-5-1.rar exp2-5-2..rar exp2-5-3.rar  
    exp2-8.rar exp2-9.rar exp2-10.rar exp2-11.rar
  網頁成果 exp2-3.rar exp2-4.rar    
  下載物件 下載下列所有檔案      
    score.mdb Northwind.accdb customer.xls employee.xlsx
    收支管理系統.accdb      
           
Chp C21: ASP.NET Web 應用程式(自行撰寫程式碼)
  下載講義 ChpC2 .Net 2005最新講義 下載資料庫-1    
  下載講義 ChpC2_NET2003講義 下載資料庫-2 關鍵程式碼  
  練習範例 使用資料工具來查詢資料庫    自己撰寫程式碼來 查詢資料表    查詢單筆紀錄  『新增、修改、刪除、查詢』的綜合性程式介面   
           
 
(D).ASP.NET程式語法介紹
Chp 1: ASP.NET指令語法
  下載所有講義 ChpD1講義