|
|
|
|
|
|
陳擎文教學網:互動網頁程式設計(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(' ', ' ', 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'> 跳到:<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(' ', ' ', 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講義 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|