Jigsaw[at]NTCUST
<html>
<head>
<title>Document</title>
</head>
<body>
<p>
<?php
echo 'Hello, World!';
?>
</p>
</body>
</html>
PHP剖析引擎只剖析 <?php 到 ?> 之間的程式碼
而不包含在 <? php 到 ?> 之間的內容則會直接送出
檔案請儲存為 *.php(副檔名為php)
<html>
<head>
<title>Document</title>
</head>
<body>
<p>
<?php
echo 'Hello, World!';
?>
</p>
</body>
</html>
echo 為一個方法,用於輸出字串、數值、變數等等
PHP的每一行的末端都需加上分號,否則程式會出錯
<html>
<head>
<title>字串</title>
</head>
<body>
<p>
<?php
echo 'Hello,' . ' ' . 'World' . '!';
?>
</p>
</body>
</html>
字串可以使用符號 " . "(點)來連接
(在JavaScript中則是使用 "+")
<html>
<head>
<title>四則運算</title>
</head>
<body>
<p><?php echo 43 + 82; ?></p>
<p><?php echo 75 - 37.5; ?></p>
<p><?php echo 16 * 16; ?></p>
<p><?php echo 88 / 22; ?></p>
<p><?php echo 9 mod 4; ?></p>
</body>
</html>
如上,與 JavaScript 一樣
<html>
<head>
<title>變數</title>
</head>
<body>
<p>
<?php
$juice = 'Guava';
echo $juice;
?>
</p>
</body>
</html>
變數均以 $ 開頭,不分型別,區分大小寫
<html>
<head>
<title>Short Tag</title>
</head>
<body>
<?php
$platform = 'PS4';
?>
<p>平台:<?=$platform?></p>
<p><?='The order'?> <?=1886?></p>
</body>
</html>
除了用Echo的方式輸出之外,
也可以使用 <?={something}?> 的 Short Tag 來輸出
<html>
<head>
<title>註解</title>
</head>
<body>
<p>
<?php
$dog = 'ling pig';
// 這是單行註解
# 這是單行註解
echo $dog;
/*
這是多行註解
*/
?>
</p>
</body>
</html>
註解有分單行及多行兩種
<html>
<head>
<title>字串</title>
</head>
<body>
<?php
$name = 'Jigsaw';
?>
<p><?='Hi! ' . $name . '!'?></p>
<p><?="Hi! $name!"?></p>
</body>
</html>
某些情況下可能需要字串夾雜變數做輸出,
實作上有兩種方式:一種是使用字串連接;
另外就是使用雙引號的字串可以直接插入變數。
實作一個混合Html與PHP的程式
宣告變數,並將變數與字串混合(連接或插入)後輸出。
<html>
<head>
<title>數字比較</title>
</head>
<body>
<p>
<?php
echo 6 < 7;
?>
</p>
</body>
</html>
比較運算子會回傳 True 或 False
比較運算子:
<?php
$age = 66;
if ($age < 18) {
echo '你不能開車,還不能考駕照!';
}
elseif ($age > 65) {
echo '你可以開車,但是很危險!';
}
else {
echo '你可以開車!';
}
?>
If 判斷式中為 True 才會執行區塊內的程式,
為 False則會判斷下一個 elseif 。
如果沒有 elseif,則直接執行else中的程式
<html>
<head>
<title>If判斷式</title>
</head>
<body>
<?php
$age = 66;
if ($age < 18) {
?>
<h1>你不能開車,還不能考駕照!</h1>
<?php
}
elseif ($age > 65) {
?>
<h2>你可以開車,但是很危險!</h2>
<?php
}
else {
?>
<p>你可以開車!</p>
<?php
}
?>
</body>
</html>
實作上一定會將PHP與HTML分隔開,
所以會改寫成左方寫法。
但這樣程式會變得很不易讀
<html>
<head>
<title>If判斷式</title>
</head>
<body>
<?php
$age = 66;
if ($age < 18):
?>
<h1>你不能開車,還不能考駕照!</h1>
<?php
elseif ($age > 65):
?>
<h2>你可以開車,但是很危險!</h2>
<?php
else:
?>
<p>你可以開車!</p>
<?php
endif;
?>
</body>
</html>
可以改寫成if():及endif;形式
使程式易讀
實作一個混合Html與PHP的程式
需宣告變數並對變數做判斷,含有If , elseif及else
<?php
switch (2) {
case 0:
echo 'The value is 0';
break;
case 1:
echo 'The value is 1';
break;
case 2:
echo 'The value is 2';
break;
default:
echo "The value isn't 0, 1 or 2";
}
switch()內帶入要判斷的變數,
case就是當變數為指定的值時就執行該程式
<?php
$myNum = 2;
switch ($myNum) {
case 1:
echo "1";
break;
case 2:
echo "2";
break;
case 3:
echo "3";
break;
default:
echo "None of the above";
}
<?php
if ($i == 1 ||
$i == 2 ||
$i == 3)
{
echo "$i 是介於 1 至 3的數字。";
}
switch 的 case 不加 break 會順著往下執行
<?php
$i = 2;
switch ($i) {
case 1:
case 2:
case 3:
echo "$i 是介於 1 至 3的數字。";
break;
}
跟 if 一樣可以改寫成switch: 與 endswitch;
<?php
$i = 2;
switch ($i):
case 0:
echo 'The value is 0';
break;
case 1:
echo 'The value is 1';
break;
case 2:
echo 'The value is 2';
break;
default:
echo "The value isn't 0, 1 or 2";
endswitch;
實作一個混合Html與PHP的程式
需宣告變數並對變數做判斷,
並含有三個 case 以上的 switch。
<?php
$array_a = array('Apple', 'Banana', 'Car');
$array_b = ['Apple', 'Banana', 'Car'];
宣告一個陣列可使用 array()方法 或是 [](與JavaScript一樣),
前者較舊,後者為5.4.0之後新增的寫法。
<?php
$array = ['do', 're', 'mi'];
/*
** +-------+------+------+------+
** | value | "do" | "re" | "mi" |
** +-------+------+------+------+
** | key | 0 | 1 | 2 |
** +-------+------+------+------+
*/
echo $array[0];
// outputs "do"
取用變數也與JavaScrtip一樣,使用變數名稱再加上[key]即可。
要注意的是,第一個key為0,幾乎所有的程式語言都是如此
在 PHP 中使用 array_push() 函式增加元素至陣列
<?php
$colors = ['red', 'blue', 'yellow'];
array_push($colors, 'green', 'white');
var_dump($colors);
/* array (size=5)
0 => string 'red' (length=3)
1 => string 'blue' (length=4)
2 => string 'yellow' (length=6)
3 => string 'green' (length=5)
4 => string 'white' (length=5)
*/
<?php
$myArray = ['red', 'blue', 'yellow'];
echo $myArray[1];
// outputs 'blue'
$myArray[1] = 'green';
echo $myArray[1];
// outputs 'green'
你可以直接將陣列重新賦值
<?php
$myArray = ['red', 'blue', 'yellow'];
unset($myArray[2]);
var_dump($myArray);
?>
<?php
unset($myArray);
var_dump($myArray);
?>
<?php
$NTCUST = [
'資訊與流通學院' => [
'資訊工程系',
'資訊管理系',
'流通管理系'
],
'設計學院' => [
'商業設計系',
'多媒體設計系',
'室內設計系'
]
];
var_dump($NTCUST);
多維陣列就是陣列包了很多陣列
<?php
$my = [
'name' => 'Evan',
'nickname' => 'Jigsaw',
'age' => 21,
];
echo $my['nickname'];
// outputs 'Jigsaw'
相似於 JavaScript 的 Object,
與 Indexed Array 不同的地方就是可以自訂 key 的值
實作兩個混合Html與PHP的程式
<?php
for ($i = 0; $i < 10; $i++) {
echo $i;
}
// outputs 0123456789
和 JavaScript 的 For 寫法大致相同,
第一個參數為起始值,第二個為是否繼續執行的條件,
第三則為起始值變動的規律
實作兩個混合Html與PHP的程式
Tips:
<?php
$arr = [0, 1, 2, 3, 4];
echo count($arr);
// outputs 5
<!-- 3*2 Table -->
<table border="1">
<tbode>
<tr>
<td>1-1</td>
<td>1-2</td>
<td>1-3</td>
<tr>
<tr>
<td>2-1</td>
<td>2-2</td>
<td>2-3</td>
<tr>
</tbode>
</table>
<?php
$langs = [
'JavaScript',
'HTML/CSS',
'PHP',
'Python',
'Ruby'
];
foreach ($langs as $lang) {
echo "<li>$lang</li>";
}
foreach ($langs as $keys => $lang) {
echo "<li>$keys => $lang</li>";
}
在 PHP 中可以使用 Foreach 來對陣列進行迭代。
<?php
for ():
endfor;
foreach ():
endforeach;
和 If 一樣,可以使用 Endfor 及 Endforeach。
<?php
$loopCond = true;
while($loopCond) {
echo '$loopCond = ' . $loopCond;
$loopCond = false
}
當While迴圈判斷式內的結果為True,就會執行區塊內的程式
要注意的是不要讓判斷式的結果永遠為True,否則程式會當掉
<?php
$flipCount = 0;
do {
$flip = rand(0,1);
// rand()方法會產生兩個參數間的隨機整數
$flipCount ++;
if ($flip) {
echo '<p>H</p>';
}
else {
echo '<p>T</p>';
}
} while ($flip);
?>
<p><?=$flipCount?></p>
和While不同的是,先判斷與後判斷的差別
While很少用,不用練習
<?php
$name = 'Jigsaw Ye';
$length = strlen($name);
// 9
$partial = substr($name, 0, 6);
// 'Jigsaw'
$uppercase = strtoupper($name);
// 'JIGSAW YE'
$lowercase = strtolower($name);
// 'jigsaw ye'
strlen() 計算字串長度
substr() 切割字串,第一個參數為字串,
第二為開始位置(包含),第三為結束位置(不包含)
strtoupper() 轉換大寫
strtolower() 轉換小寫
<?php
strpos("emily", "e"); // 0
strpos("emily", "i"); // 2
strpos("emily", "ily"); // 2
strpos("emily", "zxc"); // false
if (strpos("david","h") === false) {
print "Sorry, no 'h' in 'david'";
}
// prints the "Sorry" message
strpos() 用於判斷第二參數是否包含在第一參數內,
如果有,就回傳相同的開始位置;
不包含則回傳false
<?php
$round = round(M_PI);
print $round;
// prints 3
$round_decimal = round(M_PI, 4);
print $round_decimal;
// prints 3.1416
round() 為四捨五入,會將第一個參數四捨五入,
第二個參數為指定精度(小數點後幾位)
Note: M_PI 為 PHP 內建的全域變數
<?php
$array_a = [5, 3, 7, 1];
sort($array_a);
print join(", ", $array_a);
// prints "1, 3, 5, 7"
$array_b = [8, 2, 6 ,4];
rsort($array_b);
print join(":", $array_b);
// prints "8:6:4:2"
<?php
$array_c = array_merge($array_a, $array_b);
var_dump($array_c);
// array (size=8)
// 0 => int 1
// 1 => int 3
// 2 => int 5
// 3 => int 7
// 4 => int 8
// 5 => int 6
// 6 => int 4
// 7 => int 2
實作一個混合Html與PHP的程式
請宣告一個空陣列,使用 for 迴圈與rand()函式把空陣列裡的元素增加至10個,並由小到大排序,最後將陣列按照以下格式印出
元素1|元素2|元素3|.....|元素10
<?php
require('./hello.php');
require_once('./hello.php');
include('./hello.php');
include_once('./hello.php');
<?php
function name(parameters) {
statement;
}
name(parameters);
// call function
利用關鍵字 function 宣告函式,接著是函式的名稱,
括號內為參數,大括號內為執行的程式
寫一支函式,印出你的名字
<?php
function returnSomething() {
return 'Whoisyourdaddy!';
}
echo returnSomething();
// outputs 'Whoisyourdaddy!'
Return 的意思就是指將在函式內傳回某個變數、陣列、字串...等等
<?php
function squareValue($number) {
echo $number * $number;
}
$num = 9;
squareValue($num);
// echos 81
呼叫函式時我們可以帶入參數,
只要在宣告函式時加入變數就可以了。
實作一個混合Html與PHP的程式
<?php
echo $_GET['name'];
// outputs jigsaw
var_dump($_GET);
// array (size=2)
// 'name' => string 'Jigsaw' (length=6)
// 'age' => string '21' (length=2)
http://localhost/index.php?name=jigsaw&age=21
//http://localhost/index.php?{key}={value}&{key}={value}
<?php
if (isset($_GET['name'])):
?>
<p>Your name: <?=$_GET['name']?></p>
<?php
else:
?>
<p>You didn't type a name.</p>
<?php
endif:
?>
利用isset()函式判斷變數是否存在
null
實作兩個混合Html與PHP的程式
<?php
if (isset($_GET['page'])) {
switch ($_GET['page']) {
case 'about':
require_once('./static_page/about.php');
break;
case 'contact':
require_once('./static_page/contact.php');
break;
default:
header("Location: ./");
}
}
else {
require_once('./static_page/home.php');
}
header('Location: $location')可用於轉址
// form.php
<form action="show.php" method="post">
<input type="text" name="name">
<button type="submit">send</button>
</form>
// action 將資料傳遞至 (required)
// method 傳遞的方式 (optional,default GET)
// enctype 上傳檔案時需設定為 multipart/form-data
// show.php
<?php
echo $_POST['name'];
// show.php
<h2>$_GET:</h2>
<p><?php var_dump($_GET); ?></p>
<hr>
<h2>$_POST:</h2>
<p><?php var_dump($_POST); ?></p>
在資料夾中建立 show.php 以供接收資料並輸出用
<form action="./show.php" method="get">
<input type="text" name="user_name">
<input type="password" name="user_password">
<button type="submit">Login</button>
<button type="reset">Reset</button>
</form>
<form action="./show.php" method="post">
<input type="checkbox" name="A" value="A" checked>
<input type="checkbox" name="B" value="B">
<input type="checkbox" name="C" value="C">
<input type="checkbox" name="D" value="D">
<button type="submit">Send</button>
</form>
<form action="./show.php" method="post">
<input type="checkbox" name="items[]" value="A" checked>
<input type="checkbox" name="items[]" value="B">
<input type="checkbox" name="items[]" value="C">
<input type="checkbox" name="items[]" value="D">
<button type="submit">Send</button>
</form>
<form action="./show.php" method="post">
<input type="radio" name="sex" value="boy">男
<br>
<input type="radio" name="sex" value="girl">女
<br>
<input type="radio" name="sex" value="other">其他
<br>
<button type="submit">Send</button>
</form>
<form action="./show.php" method="post">
<textarea rows="5" cols="20" name="message">Default message</textarea>
<button type="submit">Send</button>
</form>
<form action="./show.php" method="post">
<select name="Macbook">
<optgroup label="New">
<option value="new_12">MacBook 12 吋</option>
</optgroup>
<optgroup label="Air">
<option value="air_11">MacBook Air 11 吋</option>
<option value="ari_13">MacBook Air 13 吋</option>
</optgroup>
<optgroup label="Pro">
<option value="pro_13">MacBook Pro 13 吋</option>
<option value="pro_13_retina">MacBook Pro 13 吋 配備 Retina 顯示器</option>
<option value="pro_15_retina">MacBook Pro 15 吋 配備 Retina 顯示器</option>
</optgroup>
</select>
<button type="submit">Send</button>
</form>
<form action="./show.php" method="post">
<label for="usernamefield">Username</label>
<input type="text" id="usernamefield" name="username">
<label for="passwordfield">Password</label>
<input type="password" id="passwordfield" name="userpassword">
<button type="submit">Login</button>
</form>
<form action="./show.php" method="post">
<label>
<input type="checkbox" name="agree" value="true">
我已滿18歲
</label>
<button type="submit">繼續觀看</button>
</form>
直接用Label將checkbox包起來
<form action="./show.php" method="post">
<label>
<input type="radio" name="sex" value="boy" checked>Boy
</label>
<label>
<input type="radio" name="sex" value="girl">Girl
</label>
<label>
<input type="radio" name="sex" value="girl">Other
</label>
<button type="submit">Send</button>
</form>
直接用Label將Radio包起來
實作一個Html表單及PHP接收端程式
<form action="./show.php" method="post" enctype="multipart/form-data">
<label for="filefield">File Name:</label>
<input id="filefield" type="file" name="file">
<button type="submit">Upload</button>
</form>
上傳檔案表單
<?php
if (isset($_FILES['file'])) {
$file = $_FILES['file'];
if ($file['error'] > 0) {
echo 'Error: ' . $file['error'];
}
else {
echo '檔案名稱: ' . $file['name'] . '<br>';
echo '檔案類型: ' . $file['type'] . '<br>';
echo '檔案大小: ' . ($file['size'] / 1024) . ' Kb<br>';
echo '暫存名稱: ' . $file['tmp_name'] . '<br>';
function exist($file) {
return file_exists('./upload/' . $file['name']);
}
if (exist($file)) {
$message = '檔案已經存在,請勿重覆上傳相同檔案';
}
else {
move_uploaded_file($file['tmp_name'], './upload/' . $file['name']);
$message = exist($file) ? 'Upload success!' : 'Upload fail!';
}
}
}
else {
$message = '沒有上傳檔案';
}
echo $message;
PHP端接收檔案程式
實作一個檔案上傳程式
Tips:
<?php
echo substr(str_shuffle(MD5(microtime())), 0, 10);
// 產生10個字元的亂數字串
// jpg的type為 'image/jpeg'
實作兩個混合Html與PHP的程式
<?php
setcookie("times", $_COOKIE['times']+1, time()+3600, '/', 'localhost', true, true);
//setcookie(name, value, expire, path, domain, secure, httponly)
var_dump($_COOKIE);
setcookie("times", "", time() - 3600);
<?php
session_start();
$_SESSION['username'] = 'Jigsaw';
// set session key and value
echo $_SESSION['username'];
// outputs 'Jigsaw'
unset($_SESSION['user_id']);
// delete session
session_destroy();
// delete all session
// index.php
<?php
session_start();
$_SESSION['token']=rand(0,100);
?>
<form action="auth.php" method="post">
<label for="token" >驗證碼: <?=$_SESSION['token']?></label>
<input type="text" name="token" id="token">
<button type="submit">Auth</button>
</form>
// auth.php
<?php
session_start();
if ($_SESSION['token'] == $_POST['token']):
?>
<p>驗證碼正確</p>
<?php
else:
?>
<p>驗證碼錯誤</p>
<?php
endif;
?>
實作一個混合Html與PHP的登入程式