2018年11月29日 星期四

PHP Note

 #php版本 

5.4
 
5.5
 
7.4

#PHP執行時的順序
php 執行中插入的javascript會等到php執行完才會執行javascript。因為php是server side會先執行然後才是client side的javascript。

#PHP 的等號
一個等號
給值的意思。例如 $a = 5; $b="equal"; $c='$a';
二個等號
等於的意思。 例如 if (a==b) do something.
三個等號
等於的意思。等於的意思。還包含類型的相等。

#PHP 如何回到上一個頁面(URL)?
被拒絕的頁面
if (!$FX_grantAccess) {//沒有權限登入
  $FX_qsChar = "?";
  if (strpos($FX_authFailedURL, "?")) $FX_qsChar = "&";
  $FX_referrer = $_SERVER['PHP_SELF']; //獲得當前頁面URL
  if (isset($_SERVER['QUERY_STRING']) && strlen($_SERVER['QUERY_STRING']) > 0) $FX_referrer .= "?" . $_SERVER['QUERY_STRING']; //獲得當前頁面URL的變數
  $FX_authFailedURL = $FX_authFailedURL . $FX_qsChar . "accessdenied=" . urlencode($FX_referrer);//沒有權限被導引到登入的頁面,並夾帶目前頁面URL變數$accessdenied
  header("Location: $FX_authFailedURL");
  exit;
}

登入的頁面
if (isset($_GET['accessdenied'])) $_SESSION['PreUrl'] = $_GET['accessdenied']; //如果有$accessdenied,紀錄上一個URL

if (isset($_SESSION['PreUrl']) && true) $redirectLoginSuccess = $_SESSION['PreUrl']; ////如果有$accessdenied,前往上一個URL
       header ("Location: $redirectLoginSuccess");
       exit;

#MySQL中使用null或空值
如果我們用SQL下插入指令,為什麼還可以插入空值呢?但用textfield插入空值為什麼就會報錯呢?
INSERT INTO "表格名" ("欄位1", "欄位2", ...) VALUES (" ", "值2", ...); 在欄位設定為 not null 可以被執行。
但用textfield插入空值為什麼就會報錯。
在SQL中,null與空字串(“”)有很大不同。空字串具體表示該值被設定為空的;null表示未設置任何值。
所以用textfield插入空值時被視為是沒有設定任何值。也就是null。
解決方法是判斷textfield沒有值時,給他一個空字串。
空值是不佔用空間的,MySQL中的NULL其實是佔用空間的。所以如果欄位可以為NULL,索引的效率會下降很多。

#在PHP中使用mb_substr解決亂碼問題
string substr(string 處理的字串, int 起始位置, int長度)
string mb_substr(string 處理的字串, int 起始位置, int長度, 編碼方式)
substr 和 mb_substr 基本上相同,但mb_substr多了一個引數,可以讓程式知道在int長度上,一個字的長度是哪一種編碼。
$str="這是一個測試字串";
echo substr($str,0,7);
這是??(亂碼)
3  3  1   byte    ASCII碼
substr()以1位元組為單位,所以中文字被切掉了。
$str="這是一個測試字串";
echo mb_substr($str,0,4,'utf8'); 或  echo mb_substr($str,0,4,"UTF-8");
這是一個
1  1  1  1   utf8