線上書籍

Home

[1062] PHP7入門

一、 先完成上星期未完成的部份
  1. 先關閉錯誤訊息,避免登入的ajax被卡住
  2. 加入分頁、上下頁功能、完成多關鍵字搜尋功能
二、 用join一次抓取兩個以上的資料表資料
  1. 先下載缺少的檔案,並在function.php補上: //讀出所有類別 function list_topic() { global $db, $smarty; $sql = "SELECT * FROM `topic` ORDER BY `topic_sn` "; $result = $db->query($sql) or die($db->error); $all = []; $i = 0; while ($data = $result->fetch_assoc()) { $all[$i] = $data; $i++; } //die(var_export($all)); list_topic_status(); $smarty->assign('all', $all); } //讀出所有TOPIC_status function list_topic_status() { if (!isset($smarty)) { global $smarty; } //狀態值增刪記得修改TABLE值 $status = ['開始投稿', '當期', '一般', '關閉']; $smarty->assign('topic_status', $status); }
  2. 在nav.tpl加上 <a href="topic.php" class="nav-link text-white">專題設定</a>
  3. 下載admin.ziptemplates.zip,覆蓋原檔,這是文章發布的部份。
  4. 當兩個資料表的欄位有關連時才能用join,例如topic分類資料表的topic_sn以及article中的topic_sn,欄位名稱不一定要相同,但代表的意義必須一樣。SQL語法為: SELECT a.*, b.* FROM 左表 AS a JOIN 右表 AS b ON a.欄位 = b.欄位 WHERE 條件
  5. 若關聯的欄位名稱一樣,亦可以用「USING 欄位」來取代「ON a.欄位 = b.欄位」
  6. 假設有這兩個表:
    article   topic
    sn topic_sn title   topic_sn topic_title
    1 1 文章1   1 分類1
    2 1 文章2   2 分類2
    3 1 文章3   4 分類4
    4 3 文章4      
    5 3 文章5      
    6 4 文章6      
  7. 以MySQL來說,常用的join有四種:
    • (1) JOIN:左右表都要有資料才會取出 SELECT a.*, b.* FROM article AS a JOIN topic AS b ON a.topic_sn= b.topic_sn

      結果為

      sn topic_sn title topic_title
      1 1 文章1 分類1
      2 1 文章2 分類1
      3 1 文章3 分類1
      6 4 文章6 分類4
    • (2) LEFT JOIN:以左表為主,右表有就取出,沒有就空白。 SELECT a.*, b.* FROM article AS a LEFT JOIN topic AS b ON a.topic_sn= b.topic_sn

      結果為

      sn topic_sn title topic_title
      1 1 文章1 分類1
      2 1 文章2 分類1
      3 1 文章3 分類1
      4 3 文章4 NULL
      5 3 文章5 NULL
      6 4 文章6 分類4
    • (3) RIGHT JOIN:以右表為主,左表有就取出,沒有就空白。 SELECT a.*, b.* FROM article AS a RIGHT JOIN topic AS b ON a.topic_sn= b.topic_sn

      結果為

      sn topic_sn title topic_title
      1 1 文章1 分類1
      2 1 文章2 分類1
      3 1 NULL 分類2
      6 4 文章6 分類4
    • (4) FULL JOIN:左右表只要其中一個有資料就會取出。( FULL JOIN是 LEFT JOIN 與 RIGHT JOIN 的聯集. 但MySQL沒有直接支援 FULL JOIN,故用 UNION 來得到同樣的結果 ) SELECT a.*, b.* FROM article AS a LEFT JOIN topic AS b ON a.topic_sn= b.topic_sn UNION SELECT a.*, b.* FROM article AS a RIGHT JOIN topic AS b ON a.topic_sn= b.topic_sn

      結果為

      sn topic_sn title topic_title
      1 1 文章1 分類1
      2 1 文章2 分類1
      3 1 文章3 分類1
      NULL 2 NULL 分類2
      4 3 文章4 NULL
      5 3 文章5 NULL
      6 4 文章6 分類4
三、 寄信機制
  1. PHP可以透過mail()來寄信,前提是主機本身要設定好機信機制,不管是用SMTP或sendmail其語法如下: mail($收信人的Email, $主旨, $信件內容, $headers);
  2. 一般而言,寄信內容是純文字的,若要使用網頁語法,那麼必須設定$headers $headers = 'MIME-Version: 1.0' . "\r\n"; $headers .= 'Content-type: text/html; charset=utf-8' . "\r\n";
  3. 若要帶附檔,則需要先將檔案編碼,或者直接改用PHPMailer來處理。
四、 下拉選單、單複選的預設值寫法
  1. select用selected,radio和checkbox用checked,一般我們直接在樣板中判斷即可 <option value="類別" {if $topic.topic_type=="類別" }selected{/if}>類別</option> <option value="主題" {if $topic.topic_type=="主題" }selected{/if}>主題</option>
五、 友善列印(或其他分享按鈕)
  1. https://www.addtoany.com/
  2. 點擊「Get the button code for」選擇「Any site」,然後點擊Choose Services…設定需要的服務(友善列印為printfriendly),點擊「Get Button Code」複製語法,並貼到樣板檔即可。