實作練習 : 使用ChatGPT協同設計MySQL資料表單,以及撰寫PHP程式


我們在"如何利用ChatGPT等人工智慧工具,深入學習資料庫技能?"提到可以使用ChatGPT來學習習資料庫技能,更在"有了人工智慧生成工具之後,MySQL教學型態會產生什麼變化?"說到 : 「設計者只需輸入對資料庫的需求描述,AI即可自動生成對應的SQL語句、關係模型和各種設計文件」。

現在我們將使用ChatGPT 3.5 免費工具來進行協同設計MySQL資料表單,以及撰寫PHP程式,看看整個程序是否可以順利進行。

第一個專案的需求如下 : 

(1) 建立一個MySQL database,字元集utf8mb4,排序原則utf8mb4_general_ci

(2) 以正規化的精神規劃一個「訂單資料管理系統」,可以列出以下訂單資料表 :

(3) 並且點選訂單日期,可以修改訂單日期。 

(4) 並且列出訂單資料表或是修改訂單日期時,都必須先登入。

我們就在ChatGPT 3.5 開始輸入指令如下 : 

建立一個MySQL database,字元集utf8mb4,排序原則utf8mb4_general_ci 請給我MySQL指令。


從ChatGPT得到了建立資料庫的指令 :

CREATE DATABASE your_database_name
CHARACTER SET utf8mb4
COLLATE utf8mb4_general_ci;

就使用InfinityFree的phpMyAdmin去執行指令如下 :
 

執行MySQL指令,竟然發生錯誤 !!

原因就在於你告訴ChatGPT給你指令,但是他不知道InfinityFree的介面邏輯。

InfinityFree的MySQL資料庫是使用介面產生,然後進入該資料庫以後,權限僅止於該資料庫,因此才會發生以上 Access denied 的事情。

所以我們不能使用CREATE DATABASE來建立資料庫,我們必須使用介面產生資料庫以後,再用指令修改字元集 (CHARACTER SET ) 以及排序原則 (COLLATE)。

進入InfinityFree的MySQL資料庫管理介面 : 

按下Create Database建立資料庫之後,再進入該資料庫的phpMyAdmin去修改字元集以及排序原則。 

現在請ChatGPT給我修改字元集以及排序原則的語法 : 

現有資料庫名稱為mydb,請給我MySQL語法,修改字元集為 utf8mb4,排序原則utf8mb4_general_ci


得到以下語法 :

ALTER DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;


現在就正確了,我們得到了一個資料庫,字元集是utf8mb4,以及排序原則是 utf8mb4_general_ci

光是到這裡有沒有發現,ChatGPT可以給你正確的語法,但是如果你沒有正確的觀念,使用ChatGPT給的正確語法,還是會發生執行錯誤。

因此你應該發現了一個重要的事實 : 如果你什麼都不懂,給你再正確的資訊,你也無法正確地執行。

未來使用AI工具,並不代表你可以什麼都不會,而是你可以不需要知道細節,例如指令怎麼寫,但是你必須知道整個運作的邏輯大架構,例如什麼指令可以在哪裡執行? 以及發生錯誤的原因。

現在可以開始規劃資料表單,我們給ChatGPT指令如下 : 

(1) 以正規化的精神規劃一個「訂單資料管理系統」,可以列出訂單資料表 : 訂單編號、客戶編號、訂單日期、訂單狀態 (例如 完成/取消/處理中)、訂單總額。
(2) 並且點選訂單日期,可以修改訂單日期。
(3) 並且列出訂單資料表或是修改訂單日期時,都必須先登入。
請給我建立MySQL資料表單的語法,插入範例資料的語法,以及各php的程式碼。

結果ChatGPT給我的資料表單如下 : 

其中 order_status 的設計並不符合正規劃精神,因為欄位內的"完成/取消/處理中",應該簡化為編號才對,然後再用程式解析為"完成/取消/處理中"。

因此ChatGPT重新給我修正的版本 : 


我重新要求給我更新的版本,得到了以下的語法。 

-- 建立客戶資料表
CREATE TABLE IF NOT EXISTS customers (
customer_id INT AUTO_INCREMENT PRIMARY KEY,
customer_name VARCHAR(100) NOT NULL);

-- 建立訂單資料表
CREATE TABLE IF NOT EXISTS orders (
    order_id INT AUTO_INCREMENT PRIMARY KEY,
    customer_id INT NOT NULL,
    order_date DATE NOT NULL,
    order_status_id INT NOT NULL,
    order_total DECIMAL(10, 2) NOT NULL,
    CONSTRAINT fk_customer_id FOREIGN KEY (customer_id) REFERENCES customers(customer_id),
    CONSTRAINT fk_order_status_id FOREIGN KEY (order_status_id) REFERENCES order_statuses(status_id)
);

-- 建立訂單狀態資料表
CREATE TABLE IF NOT EXISTS order_statuses (
    status_id INT AUTO_INCREMENT PRIMARY KEY,
    status_name VARCHAR(50) NOT NULL
);

-- 插入訂單狀態資料
INSERT INTO order_statuses (status_name) VALUES 
('處理中'),
('取消'),
('完成');

-- 插入範例客戶資料
INSERT INTO customers (customer_name) VALUES 
('客戶A'),
('客戶B'),
('客戶C');

-- 插入範例訂單資料
INSERT INTO orders (customer_id, order_date, order_status_id, order_total) VALUES
(1, '2024-04-26', 1, 1000.00), -- 處理中
(2, '2024-04-25', 3, 1500.00), -- 完成
(3, '2024-04-24', 2, 800.00); -- 取消

實際執行結果如下 : 


結果在檢視結構的時候,發現資料庫是使用 MyISAM 儲存引擎 : 


我們希望可以把 MyISAM 這個儲存引擎改為 InnoDB ,因此再從ChatGPT得到指令 :

ALTER TABLE orders ENGINE = InnoDB
ALTER TABLE customers ENGINE = InnoDB
ALTER TABLE order_statuses ENGINE = InnoDB

這樣就把資料表單改為InnoDB了 : 


但是可以看到預設的儲存引擎還是MyISAM,因為需要改組態設定,我們就暫時不去修改了。

再增加一個users資料表,用在登入時 : 

CREATE TABLE `users` (
`user_id` INT AUTO_INCREMENT PRIMARY KEY,
`username` VARCHAR(50) NOT NULL UNIQUE,
`password` VARCHAR(50) NOT NULL ) ENGINE=InnoDB; 

INSERT INTO `users` (`username`,`password`) VALUES ('user1', 'password123'), ('user2', 'password456');
 

因為已經改了資料表的結構,所以重新要求ChatGPT給我php程式 : 

請給我各php的程式碼,並且在列出程式碼時,告訴我php的檔案名稱 : 
(1) 可以列出訂單資料表 : 訂單編號、客戶編號、訂單日期、訂單狀態 (例如 完成/取消/處理中)、訂單總額。
(2) 並且點選訂單日期,可以修改訂單日期。
(3) 並且列出訂單資料表或是修改訂單日期時,都必須先登入。

從ChatGPT得到以下 login.php 程式 : 




<!DOCTYPE html>
<html lang="zh-Hant">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>登入</title>
</head>
<body>
    <h2>登入</h2>
    <form action="login.php" method="post">
        <label for="username">帳號:</label><br>
        <input type="text" id="username" name="username"><br>
        <label for="password">密碼:</label><br>
        <input type="password" id="password" name="password"><br><br>
        <input type="submit" value="登入">
    </form>
</body>
</html>

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
    // 資料庫連線資訊
    $servername = "your_servername";
    $username = "your_username";
    $password = "your_password";
    $dbname = "your_database";

    // 建立資料庫連線
    $conn = new mysqli($servername, $username, $password, $dbname);

    // 檢查連線是否成功
    if ($conn->connect_error) {
        die("資料庫連線失敗: " . $conn->connect_error);
    }

    // 從 POST 請求中取得使用者輸入的帳號密碼
    $username = $_POST['username'];
    $password = $_POST['password'];

    // 使用預備陳述式來防止 SQL 注入攻擊
    $stmt = $conn->prepare("SELECT * FROM users WHERE username=? AND password=?");
    $stmt->bind_param("ss", $username, $password);

    // 執行查詢
    $stmt->execute();

    // 獲取結果集
    $result = $stmt->get_result();

    // 檢查是否有符合的帳號密碼
    if ($result->num_rows > 0) {
        // 登入成功
        echo "<p>登入成功</p>";
    } else {
        // 登入失敗
        echo "<p>帳號或密碼錯誤</p>";
    }

    // 關閉資料庫連線
    $stmt->close();
    $conn->close();
}
?>

但是你可以發現,ChatGPT給的程式把登入的資訊一併寫在login.php中,這樣一來每次要連線資料庫,就要再把登入的資訊寫出來,這樣並不符合我們寫程式的習慣。

所以經過自己修改,寫了一個 conn.inc.php 程式 : 

<?php

// 定義資料庫連線參數
$servername = "xxxx"; // MySQL 主機名稱
$username = "xxxx"; // MySQL 使用者名稱
$password = "xxxx"; // MySQL 密碼
$database = "xxxx"; // 要連線的資料庫名稱

// 建立連線
$conn = new mysqli($servername, $username, $password, $database);

// 檢查連線是否成功
if ($conn->connect_error) {
die("連線失敗: " . $conn->connect_error);
}

// 設定字元集,以避免中文亂碼等問題
$conn->set_charset("utf8mb4");

// 如果需要,您可以在此添加其他資料庫連線設定或程式碼

?>

再些微修改了 login.php 如下 : 


<!DOCTYPE html>
<html lang="zh-Hant">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>登入</title>
</head>
<body>
<h2>登入</h2>
<form action="login.php" method="post">
<label for="username">帳號:</label><br>
<input type="text" id="username" name="username"><br>
<label for="password">密碼:</label><br>
<input type="password" id="password" name="password"><br><br>
<input type="submit" value="登入">
</form>
</body>
</html>

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
include "conn.inc.php";

// 從 POST 請求中取得使用者輸入的帳號密碼
$username = $_POST['username'];
$password = $_POST['password'];

// 使用預備陳述式來防止 SQL 注入攻擊
$stmt = $conn->prepare("SELECT * FROM users WHERE username=? AND password=?");
$stmt->bind_param("ss", $username, $password);

// 執行查詢
$stmt->execute();

// 獲取結果集
$result = $stmt->get_result();

// 檢查是否有符合的帳號密碼
if ($result->num_rows > 0) {
// 登入成功
//echo "<p>登入成功</p>";
ob_start();
session_start();
$_SESSION['login'] = "ok";
header("location:list.php");
} else {
// 登入失敗
echo "<p>帳號或密碼錯誤</p>";
}

// 關閉資料庫連線
$stmt->close();
$conn->close();
}
?>

如果登入成功,就會執行list.php。

如果登入不成功,就會出現帳號或密碼錯誤的訊息,要求再次輸入登入的正確帳密。

我們試試向ChatGPT 3.5 要求幫我們做,會如何呢?

指令 : 我要把建立連線的部分寫成 conn.inc.php
以後需要的就用include 請給我login.php及 conn.inc.php



結果還不錯,也得到了正確的答案。

再請ChatGPT給我list.php 來列出訂單,得到如下 :

 <?php
session_start();

if (!isset($_SESSION['loggedin']) || $_SESSION['loggedin'] !== true) {
    header("location: login.php");
    exit;
}

$mysqli = new mysqli('localhost', 'your_username', 'your_password', 'your_database');

$result = $mysqli->query("SELECT * FROM orders");

while ($row = $result->fetch_assoc()) {
    echo "訂單編號: " . $row['order_id'] . " - 客戶編號: " . $row['customer_id'] . " - 訂單日期: " . $row['order_date'] . " - 訂單狀態: " . $row['order_status'] . " - 訂單總額: " . $row['total_amount'] . "<br>";
}
?>

當然又是一個簡化版,經過修正後得到list.php  : 

<?php

require_once("check.inc.php");
echo "<P><a href='logout.php'>Logout</a></P>";

include 'conn.inc.php'; // 引入連線設定檔

// 取得訂單資料
$sql = "SELECT orders.order_id, orders.customer_id, orders.order_date, order_statuses.status_name, orders.order_total
FROM orders
INNER JOIN order_statuses ON orders.order_status_id = order_statuses.status_id";
$result = $conn->query($sql);

// 檢查是否有資料
if ($result->num_rows > 0) {
// 存放訂單資料的陣列
$orders = array();

// 將資料取出放入陣列
while ($row = $result->fetch_assoc()) {
$orders[] = $row;
}
} else {
echo "沒有訂單資料";
}

// 釋放資料庫連線
$conn->close();
?>

<!DOCTYPE html>
<html lang="zh-Hant">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>訂單列表</title>
</head>
<body>
<h2>訂單列表</h2>
<table>
<thead>
<tr>
<th>訂單編號</th>
<th>客戶編號</th>
<th>訂單日期</th>
<th>訂單狀態</th>
<th>訂單總額</th>
</tr>
</thead>
<tbody>
<?php foreach ($orders as $order) : ?>
<tr>
<td><?php echo $order["order_id"]; ?></td>
<td><?php echo $order["customer_id"]; ?></td>
<td><a href="orders_date.php?order_id=<?php echo $order['order_id']; ?>"><?php echo $order["order_date"]; ?></a></td>
<td><?php echo $order["status_name"]; ?></td>
<td><?php echo $order["order_total"]; ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</body>
</html>


再請ChatGPT給我orders_date.php 來修改訂單日期 : 

<?php
session_start();

// 檢查是否已登入,若未登入則導向登入頁面
if (!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true) {
    header("location: login.php");
    exit;
}

// 檢查是否提供訂單編號
if (!isset($_GET["order_id"]) || empty($_GET["order_id"])) {
    header("location: orders.php");
    exit;
}

// 資料庫連線資訊
$servername = "your_servername";
$username = "your_username";
$password = "your_password";
$dbname = "your_database";

// 建立資料庫連線
$conn = new mysqli($servername, $username, $password, $dbname);

// 檢查連線是否成功
if ($conn->connect_error) {
    die("資料庫連線失敗: " . $conn->connect_error);
}

$order_id = $_GET["order_id"];

// 檢查是否有 POST 請求且有提供新的訂單日期
if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST["new_order_date"])) {
    // 接收表單提交的新訂單日期
    $new_order_date = $_POST["new_order_date"];

    // 更新訂單日期
    $sql = "UPDATE orders SET order_date='$new_order_date' WHERE order_id=$order_id";
    if ($conn->query($sql) === TRUE) {
        echo "訂單日期更新成功";
    } else {
        echo "更新失敗: " . $conn->error;
    }
}

// 取得特定訂單資料
$sql = "SELECT order_id, customer_id, order_date FROM orders WHERE order_id = $order_id";
$result = $conn->query($sql);

// 檢查是否有資料
if ($result->num_rows > 0) {
    // 存放訂單資料的陣列
    $order = $result->fetch_assoc();
} else {
    echo "找不到該訂單";
    exit;
}

// 釋放資料庫連線
$conn->close();
?>

<!DOCTYPE html>
<html lang="zh-Hant">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>修改訂單日期</title>
</head>
<body>
    <h2>修改訂單日期 - 訂單編號: <?php echo $order["order_id"]; ?></h2>
    <form action="orders_date.php?order_id=<?php echo $order["order_id"]; ?>" method="post">
        <label for="new_order_date">新的訂單日期:</label><br>
        <input type="date" id="new_order_date" name="new_order_date" value="<?php echo $order["order_date"]; ?>"><br><br>
        <input type="submit" value="更新日期">
    </form>
    <a href="orders.php">返回訂單列表</a>
    <a href="logout.php">登出</a>
</body>
</html>

我們再些微修改為以下 : 

<?php
require_once("check.inc.php");
echo "<P><a href='logout.php'>Logout</a></P>";
include 'conn.inc.php'; // 引入連線設定檔

$order_id = $_GET['order_id'];

// 檢查是否有 POST 請求且有提供新的訂單日期
if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST["new_order_date"])) {
// 接收表單提交的新訂單日期
$new_order_date = $_POST["new_order_date"];

// 更新訂單日期
$sql = "UPDATE orders SET order_date='$new_order_date' WHERE order_id=$order_id";
if ($conn->query($sql) === TRUE) {
echo "訂單日期更新成功";
} else {
echo "更新失敗: " . $conn->error;
}
}

// 取得特定訂單資料
$sql = "SELECT order_id, customer_id, order_date FROM orders WHERE order_id = $order_id";
$result = $conn->query($sql);

// 檢查是否有資料
if ($result->num_rows > 0) {
// 存放訂單資料的陣列
$order = $result->fetch_assoc();
} else {
echo "找不到該訂單";
exit;
}

// 釋放資料庫連線
$conn->close();
?>

<!DOCTYPE html>
<html lang="zh-Hant">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>修改訂單日期</title>
</head>
<body>
<h2>修改訂單日期 - 訂單編號: <?php echo $order["order_id"]; ?></h2>
<form action="orders_date.php?order_id=<?php echo $order["order_id"]; ?>" method="post">
<label for="new_order_date">新的訂單日期:</label><br>
<input type="date" id="new_order_date" name="new_order_date" value="<?php echo $order["order_date"]; ?>"><br><br>
<input type="submit" value="更新日期">
</form>
<a href="list.php">返回訂單列表</a>
</body>
</html>

由以上的操作經驗,ChatGPT 3.5 在執行上尚可,但是他會偷懶只給部分結果。

你必須要知道再要求那些修正,最後才會得到滿意的答案。

整個完成後,執行結果如下 :

login.php 登入畫面

輸入正確的帳密後,才會執行list.php。

如果沒有輸入正確的帳密,就會持續停留在login.php。

list.php 列表畫面

點選日期就會執行 orders_date.php 


再次彙整php程式如下 : 

 (1) login.php


<!DOCTYPE html>
<html lang="zh-Hant">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>登入</title>
</head>
<body>
<h2>登入</h2>
<form action="login.php" method="post">
<label for="username">帳號:</label><br>
<input type="text" id="username" name="username"><br>
<label for="password">密碼:</label><br>
<input type="password" id="password" name="password"><br><br>
<input type="submit" value="登入">
</form>
</body>
</html>

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
include "conn.inc.php";

// 從 POST 請求中取得使用者輸入的帳號密碼
$username = $_POST['username'];
$password = $_POST['password'];

// 使用預備陳述式來防止 SQL 注入攻擊
$stmt = $conn->prepare("SELECT * FROM users WHERE username=? AND password=?");
$stmt->bind_param("ss", $username, $password);

// 執行查詢
$stmt->execute();

// 獲取結果集
$result = $stmt->get_result();

// 檢查是否有符合的帳號密碼
if ($result->num_rows > 0) {
// 登入成功
//echo "<p>登入成功</p>";
ob_start();
session_start();
$_SESSION['login'] = 'ok';
header("location:list.php");
} else {
// 登入失敗
echo "<p>帳號或密碼錯誤</p>";
}

// 關閉資料庫連線
$stmt->close();
$conn->close();
}
?>

(2) logout.php


<?php
session_start();
session_destroy();
header('Refresh: 1; URL = login.php');
?>


(3) conn.inc.php


<?php

// 定義資料庫連線參數
$servername = "xxx"; // MySQL 主機名稱
$username = "xxx"; // MySQL 使用者名稱
$password = "xxx"; // MySQL 密碼
$database = "xxx"; // 要連線的資料庫名稱

// 建立連線
$conn = new mysqli($servername, $username, $password, $database);

// 檢查連線是否成功
if ($conn->connect_error) {
die("連線失敗: " . $conn->connect_error);
}

// 設定字元集,以避免中文亂碼等問題
$conn->set_charset("utf8mb4");

// 如果需要,您可以在此添加其他資料庫連線設定或程式碼

?>

 
(4) check.inc.php

<?php
session_start();
if (($_SESSION['login'] !='ok')) {
header("location:login.php");
}
?>


(5) list.php

<?php

require_once("check.inc.php");
echo "<P><a href='logout.php'>Logout</a></P>";

include 'conn.inc.php'; // 引入連線設定檔

// 取得訂單資料
$sql = "SELECT orders.order_id, orders.customer_id, orders.order_date, order_statuses.status_name, orders.order_total
FROM orders
INNER JOIN order_statuses ON orders.order_status_id = order_statuses.status_id";
$result = $conn->query($sql);

// 檢查是否有資料
if ($result->num_rows > 0) {
// 存放訂單資料的陣列
$orders = array();

// 將資料取出放入陣列
while ($row = $result->fetch_assoc()) {
$orders[] = $row;
}
} else {
echo "沒有訂單資料";
}

// 釋放資料庫連線
$conn->close();
?>

<!DOCTYPE html>
<html lang="zh-Hant">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>訂單列表</title>
</head>
<body>
<h2>訂單列表</h2>
<table>
<thead>
<tr>
<th>訂單編號</th>
<th>客戶編號</th>
<th>訂單日期</th>
<th>訂單狀態</th>
<th>訂單總額</th>
</tr>
</thead>
<tbody>
<?php foreach ($orders as $order) : ?>
<tr>
<td><?php echo $order["order_id"]; ?></td>
<td><?php echo $order["customer_id"]; ?></td>
<td><a href="orders_date.php?order_id=<?php echo $order['order_id']; ?>"><?php echo $order["order_date"]; ?></a></td>
<td><?php echo $order["status_name"]; ?></td>
<td><?php echo $order["order_total"]; ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
</body>
</html>


(6) orders_date.php

<?php

require_once("check.inc.php");
echo "<P><a href='logout.php'>Logout</a></P>";

include 'conn.inc.php'; // 引入連線設定檔

$order_id = $_GET['order_id'] ?? null;

// 檢查是否有 POST 請求且有提供新的訂單日期
if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST["new_order_date"])) {
// 接收表單提交的新訂單日期
$new_order_date = $_POST["new_order_date"];

// 更新訂單日期
$sql = "UPDATE orders SET order_date='$new_order_date' WHERE order_id=$order_id";
if ($conn->query($sql) === TRUE) {
echo "訂單日期更新成功";
} else {
echo "更新失敗: " . $conn->error;
}
}

// 取得特定訂單資料
$sql = "SELECT order_id, customer_id, order_date FROM orders WHERE order_id = $order_id";
$result = $conn->query($sql);

// 檢查是否有資料
if ($result->num_rows > 0) {
// 存放訂單資料的陣列
$order = $result->fetch_assoc();
} else {
echo "找不到該訂單";
exit;
}

// 釋放資料庫連線
$conn->close();
?>

<!DOCTYPE html>
<html lang="zh-Hant">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>修改訂單日期</title>
</head>
<body>
<h2>修改訂單日期 - 訂單編號: <?php echo $order["order_id"]; ?></h2>
<form action="orders_date.php?order_id=<?php echo $order["order_id"]; ?>" method="post">
<label for="new_order_date">新的訂單日期:</label><br>
<input type="date" id="new_order_date" name="new_order_date" value="<?php echo $order["order_date"]; ?>"><br><br>
<input type="submit" value="更新日期">
</form>
<a href="list.php">返回訂單列表</a>
</body>
</html>

如果改用ChatGPT 4.0,狀況會有何差異嗎?


我們打算給ChatGPT 4.0 以下的指令 :

(1) 建立一個MySQL database,字元集utf8mb4,排序原則utf8mb4_general_ci,給我MySQL指令。
(2) 以正規化的精神規劃一個「訂單資料管理系統」,可以列出以下訂單資料表 :
訂單編號、客戶編號、訂單日期、訂單狀態 (例如 完成/取消/處理中)、訂單總額。
給我建置資料表的MySQL指令,以及插入範例資料的MySQL指令
給我列出訂單資料表的list.php程式。

(3) 並且點選訂單日期,可以修改訂單日期,給我修改訂單日期的order_date.php程式。

(4) 並且列出訂單資料表或是修改訂單日期時,都必須先登入給我login.php,logout.php。

(5) 把連接資料庫的程式寫成 conn.inc.php,讓需要的程式可以include

(6) 給我一個 check.inc.php,檢查是否登入,讓需要登入的程式可以include
如果未登入則轉到 login.php

ChatGPT給了以下答覆 :

以上這個答案跟ChatGPT 3.5一樣,你沒有辦法直接用在InfinityFree的環境上,你還是必須先建立資料庫,然後再修改字元集、排序原則、儲存引擎。

以上這個答案跟ChatGPT 3.5一樣,你還是必須要他把order_status改為數字,以免過多冗餘資料。

以上這個答案基本上沒有太大問題,但是需要實際再測試才知道是否可行。

以上這個答案基本上沒有太大問題,但是需要實際再測試才知道是否可行。

以上這個答案沒有帳密資料,必須要他修改連線users資料庫。

以上這個答案基本上沒有太大問題,但是需要實際再測試才知道是否可行。

結論 : 

(1) ChatGPT 4.0 比較能夠一次做較多事情,ChatGPT 3.5 中間比較容易罷工。

(2) 給ChatGPT 4.0 的指令可以比較複雜,但是給ChatGPT 3.5的指令要很清楚才行。

(3) ChatGPT 4.0 與 ChatGPT 3.5的答案,結果差異不大。

也就是說兩者能力在伯仲之間,但是ChatGPT 3.5腦容量小,理解程度稍微差一些,但是更重要的是 : 你如果無法給予正確的指令以及辨識他給的答案正確性,你可能無法跟ChatGPT協作而得到滿意的結果。

張貼留言

0 留言