iT邦幫忙

2019 iT 邦幫忙鐵人賽

DAY 15
0
tags: 2019鐵人賽 PHP CRUD

前言

其實很想在開始之前先聊聊 sql 語法的,不過一但開始用了框架,就又覺得 sql 語法其實大概知道就好。

框架把 sql 語法包裝了很多糖衣,使用起來很方便,跟原生的 sql 語法也相差甚遠,但不代表就真的不用學了,大家還是得花點時間搞懂基本的 sql 語法,否則一但沒了框架就不能使用資料庫,這樣的後端工程師也太悲哀了吧。

言歸正傳,今天要用到很多 sql 語法,只有一個重點要注意,就是字串符的「""」、「''」什麼時候要加什麼時候不用加。

其實有個小訣竅,那就是跟資料庫、資料表有關的都不用加,例如:資料表名稱,欄位名稱。而要填入的 value 就要加。好了,廢話太多,開始看 code 吧。

CRUD - Create

註冊會員頁面

目標:

用一個 form 來做網路請求,方法使用 post。這裡 action 先留空,我們等有資料而且寫入資料表之後在導回首頁(所以導航指令寫在 php 語法裡,下面再講)。

裡面簡單作幾個 text field 供使用者輸入姓名、生日、email,在給個 button 送出。

這邊還埋了一個隱藏請求 name = action, value = add,這是為了檢查請求來源的簡單做法。

做法:

新建一個檔案 create.php
程式碼如下:

<html>

<head>
    <meta charset="UTF-8" />
    <title>新增會員資料</title>
</head>
<body>
<form action="" method="post" name="formAdd" id="formAdd">
請輸入姓名:<input type="text" name="cName" id="cName"><br/>
請輸入生日:<input type="date" name="cBirthday" id="cBirthday"><br/>
請輸入Email:<input type="text" name="cEmail" id="cEmail"><br/>
<input type="hidden" name="action" value="add">
<input type="submit" name="button" value="新增資料">
<input type="reset" name="button2" value="重新填寫">
</form>
</body>
</html>

效果如下:

寫入資料庫

目標:

先確保請求來源是從剛剛的 form 傳過來,我們先檢查 post 過來的資料裡面是不是有一個 name = action, value = add 的請求。如果是,就開始連結資料庫跟寫入資料。

做法:

連結資料庫,寫入資料表,導航回首頁。

<?php
//先檢查請求來源是否是我們上面創建的 form
if (isset($_POST["action"])&&($_POST["action"] == "add")) {

    //引入檔,負責連結資料庫
    include("connMySQL.php");

    //取得請求過來的資料
    $name = $_POST["cName"];
    $birthday = $_POST['cBirthday'];
    $email = $_POST['cEmail'];

    //資料表查訪指令,請注意 "" , '' 的位置
    //INSERT INTO 就是新建一筆資料進哪個表的哪個欄位
    $sql_query = "INSERT INTO members (cName, cBirthday, cEmail) VALUES ('$name', 
'$birthday','$email')";

    //對資料庫執行查訪的動作
    mysqli_query($db_link,$sql_query);

    //導航回首頁
    header("Location: index.php");
}
?>

效果如下:

CRUD - Update

註冊會員頁面

目標:

讓使用者資訊可以直接呈現在 text field 裡面,當使用者按下按鈕,就寫入資料表。

做法:

表格跟 create.php 類似,只是 text field 裡面多了一些 php 語法,是後面拿到資料後可以填入。

 <html>

 <head>
     <meta charset="UTF-8" />
     <title>修改會員資料</title>
 </head>
 <body>

 <form action="" method="post" name="formAdd" id="formAdd">
      
     請輸入姓名:<input type="text" name="cName" id="cName" value=" <?php echo $name ?>"><br/>
     請輸入生日:<input type="date" name="cBirthday" id="cBirthday" value="<?php echo $birthday ?>"><br/>
     請輸入Email:<input type="text" name="cEmail" id="cEmail" value="<?php echo $email ?>"><br/>
     <input type="hidden" name="action" value="update">
     <input type="submit" name="button" value="修改資料">
 </form>
 </body>
 </html>

效果如下:
text field 看起來很奇怪,沒關係!我們繼續往下做。

取得使用者 ID

目標:

取得使用者 ID,在利用 ID 查詢資料表以取得使用者的資料。

做法:

只要在 URL 後方加上?Key=Value就是一個標準帶 parameter 的網路請求,而我們就可以透過 URL 的 parameter 取得 ID。

 <?php
 include "connMySQL.php";

 $userID = $_GET['id'];
 
 //請注意,這邊因為 $userID 本身是 integer,所以可以不用加 ''
 $sql_getDataQuery = "SELECT * FROM members WHERE cID = $userID";

 $result = mysqli_query($db_link, $sql_getDataQuery);

 $row_result = mysqli_fetch_assoc($result);
 $id = $row_result['cID'];
 $name = $row_result['cName'];
 $birthday = $row_result['cBirthday'];
 $email = $row_result['cEmail'];
?>

效果如下:

修改會員資料

目標:

將使用者修改完的資料,一樣透過按鈕將資料存入資料庫。

做法:

跟建立的時候一樣,只是這次是要修改已經存在資料表中的資料,所以語法要改成 UPDATE 資料表 SET 列名稱 = 新值 WHERE 列名稱 = 某值。

最後一樣導航回首頁。

<?php
 if (isset($_POST["action"]) && $_POST["action"] == 'update') {

     $newName = $_POST['cName'];
     $newBirthday = $_POST['cBirthday'];
     $newEmail = $_POST['cEmail'];

     $sql_query = "UPDATE members SET cName = '$newName', cBirthday = '$newBirthday', cEmail = '$newEmail' WHERE cID = $userID";

     mysqli_query($db_link,$sql_query);
     $db_link->close();

     header('Location: index.php');
 }
 ?>

效果如下

CRUD - Delete

刪除使用者

目標:

由於我們沒什麼身份驗證的考量,一但觸發刪除的動作,就會直接從資料表刪除使用者,所以刪除是裡面最簡單的。

做法:

創建一個 delete.php 檔案,透過 URL 的 parameter 取得 ID,剩下的直接看 code 吧

<?php

    $userId = $_GET['id'];

    include ('connMysql.php');

    $sql_query = "DELETE FROM members WHERE cID = $userId";

    mysqli_query($db_link,$sql_query);

    $db_link->close();

    header("Location: index.php");
?>

後記

以上就是最簡單的 CRUD,但是之中還是缺乏很多實作上的機制,例如:登入系統。因為沒有登入系統,導致隨便一個使用者只要 URL 的位置對,參數對,就可以任意修改資料跟刪除資料,這安全堪憂阿!!


上一篇
Day 14 - 實作第一個 CRUD 之 Read
下一篇
Day 16 - 什麼是 Session?
系列文
新手後端工程師的學習歷程30

尚未有邦友留言

立即登入留言