:::

9. JOIN資料表及寄信功能

一、 先完成上星期未完成的部份

  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」複製語法,並貼到樣板檔即可。

 


:::

搜尋

QR Code 區塊

https%3A%2F%2Fwww.tad0616.net%2Fmodules%2Ftad_book3%2Fpage.php%3Ftbsn%3D43%26tbdsn%3D1405

書籍目錄

展開 | 闔起

線上使用者

35人線上 (6人在瀏覽線上書籍)

會員: 0

訪客: 35

更多…