5. 資管碩畢

背景介紹

資管所畢業,但因為是管理組所以對程式沒那麼熟悉,最近工作上會用到php,所以想要了解php相關的東西。有寫過asp。

疑問

php簡單介紹

因為有學過asp,所以php這邊的簡單介紹還滿順利的,基本上php跟asp都是在做同一件事情。會需要asp跟php是因為,我們需要一些「動態」的東西,例如說使用者登入以後都會有個歡迎頁面,「XXX,你好!」,如果我們純粹只用html,是沒有辦法達成這樣的功能的,因為html是靜態的,輸出的內容永遠都一樣。這個時候我們就會需要php,動態針對不同的使用者輸出不同的內容。

<?
 $username = "peter";
 echo "你好,".$username
?>

php流程控制、迴圈

其實與c#大同小異,最大差別在於「型態」

c#屬於靜態型別的語言,你在宣告變數的時候需要指定型態;而php屬於動態型別,不需要指定型態就可以使用。

要特別小心的是在做整數跟字串相加的時候有可能會出現問題。php屬於弱型別,所以會自動做型別轉換。

ps. 這邊發現我當時有點小講錯,把靜態動態與強弱弄混了,可參考Static Typing, Dynamic Typing, Strong Typing, Weak Typing

至於流程控制、迴圈的程式碼都跟其他的差不多

if($score>=60){
 //pass
}else{
 //fail
}

for($i=0;$i<10;$i++){
  //...
}

php函式、陣列

其實也都大同小異,但php的陣列比起c#較為自由
index可以用字串來當,也不用事先指定大笑

$arr = array();
$arr[0] = 10;
$arr["hello"] = "world";

函式的話因為滿像的所以就沒講了

如何與資料庫連結?

一般在使用資料庫你會到一個後台去下指令,然後就會有結果跑出來。
在php裡面,有提供內建的函式去做這件事情。

  1. 你把要查詢的query給php
  2. php幫你拿去資料庫執行
  3. php幫你把結果拿回來
  4. 你在php裡面對這些結果做事情
//資料庫位置
$db_server = "localhost";

//資料庫名稱
$db_name = "course";

//資料庫管理者帳號
$db_user = "username";

//資料庫管理者密碼
$db_passwd = "password";
$mysqli = new mysqli($db_server, $db_user, $db_passwd,$db_name);

//對資料庫連線
if(!$mysqli){
    die("Connection error: " . mysqli_connect_errno());
}else{
    $mysqli->select_db($db_name);
    $mysqli->set_charset("utf8");
}

//下指令
$sql="select id from users where username=? and password=?";
$stmt = $mysqli->prepare($sql);
$stmt->bind_param("ss",$username,$password);
$stmt->execute();
$stmt->bind_result($id);
if($stmt->fetch()){
    // 有資料

}else{
    //沒資料    
}
$stmt->close();

session的觀念

由於http的連線是沒有狀態的,所以server要怎麼知道現在的request跟上一個request是同一個人?或是說,在你登入之後,server要怎麼知道你已經登入了?這個時候就要靠session這個東西。

session可以儲存一些資訊,每次在發送request的時候就會帶著這段資訊一起到伺服器去,例如說今天你登入以後,server給你一張通行證,可能是一段看起來很像亂碼的英文加數字,你每次都帶著這通行證,server就知道說你是同一個人了。

簡單資訊安全觀念講解

第一個講到的是SQL injection,因為它的書上的教學所用的sql語法是用字串串接的方式,所以有可能會有一些資安上的疑慮,比方說你的程式碼原本是這樣:

//輸入帳號:peter
//密碼:a123

$sql = 
 "select id from users where username = '" + $user + "' and password = '" + $pwd + "'";

//會變成
select id from users where username = 'peter' and password = 'a123'

那如果有人輸入一段很奇怪的帳號:' or 1=1--

select id from users where username = ''or 1=1--' and password = 'a123'

由於--是註解的意思,所以後面的語法會被忽略 or 1=1永遠成立,所以這個敘述永遠都會查到東西,也就是永遠都可以登入成功!

所以在php請愛用mysqli系列指令或是其他安全的作法。

git是什麼?

git是一個版本控制的程式,假如說我今天有個專案要加一個新功能,可是我怕程式碼改壞,這個時候通常都會先備份,以往作法可能是新開一個資料夾,複製一份,改壞的時候弄回去就好。

但是git出現以後就成為了工程師愛用的程式,可以很方便的完成多人協做開發跟版本控制這幾件事情。

github是一個放git repo的平台。但不只程式碼,其實你想放什麼都可以。

相關資源

  1. codeschool
  2. codecademy
  3. 台大新創企業媒合
  4. 連猴子都能懂的git入門指南