將資料寫入訂單表格(資料庫方法)
在這邊,我們先用簡單的單一表格來記錄訂餐記錄 (之後要加入學員基本資料表格,改用連外鍵的方式,記錄儲存訂餐學員資料)
資料表格orders的sql(供匯入用)
加入資料處理變化: 1.資料表格中若無資料的話,以新增的方式,將資料加入表格 2.若已經有同名的資料話,以更新的方式,對資料進行更新。
-- phpMyAdmin SQL Dump -- version 4.8.5 -- https://www.phpmyadmin.net/ -- -- 主機: localhost:3306 -- 產生時間: 2019 年 08 月 21 日 15:26 -- 伺服器版本: 5.7.27 -- PHP 版本: 7.2.7 SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; SET AUTOCOMMIT = 0; START TRANSACTION; SET time_zone = "+00:00"; /*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */; /*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */; /*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */; /*!40101 SET NAMES utf8mb4 */; -- -- 資料庫: `wda1902_shop` -- -- -------------------------------------------------------- -- -- 資料表結構 `orders` -- CREATE TABLE `orders` ( `id` int(11) NOT NULL, `name` varchar(20) COLLATE utf8mb4_unicode_ci NOT NULL, `meal_name` varchar(30) COLLATE utf8mb4_unicode_ci NOT NULL, `otime` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP ) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci; -- -- 已傾印資料表的索引 -- -- -- 資料表索引 `orders` -- ALTER TABLE `orders` ADD PRIMARY KEY (`id`); -- -- 在傾印的資料表使用自動增長(AUTO_INCREMENT) -- -- -- 使用資料表自動增長(AUTO_INCREMENT) `orders` -- ALTER TABLE `orders` MODIFY `id` int(11) NOT NULL AUTO_INCREMENT, AUTO_INCREMENT=6; COMMIT; /*!40101 SET CHARACTER_SET_CLIENT=@OLD_CHARACTER_SET_CLIENT */; /*!40101 SET CHARACTER_SET_RESULTS=@OLD_CHARACTER_SET_RESULTS */; /*!40101 SET COLLATION_CONNECTION=@OLD_COLLATION_CONNECTION */;加入處理後端資料的PHP碼:
<?php $connection = mysqli_connect("localhost", "username", "password", "database name"); if(!$connection){ die("There was an error connecting to the database."); } if(isset($_POST['order_name'])){ //如果有傳進order的話 (系統會將資料名稱與值放入$_POST陣列中,php的語函請參考"associative array") $order_name = $_POST['order_name']; $order_meal = $_POST['order_meal']; $query = "INSERT INTO orders(name, meal_name) VALUES('$order_name', '$order_meal')"; $result = mysqli_query($connection, $query); if(!$result){ die("Something went wrong on line 24"); } } ?>在submit_order函式裏加上ajax呼叫,把資料由前端送往後端php程式碼處理:
function submit_order(){ const order_people = document.getElementById("order").value; if (order_people == "") { alert(" 學號/姓名不能是空白!!!"); return; } console.log({order_name: order_people, order_meal: food_choice}); ajax({order_name: order_people, order_meal: food_choice}); document.getElementById("update-theme-button").disabled = true; //送出訂單資料後,將送出按鈕設為不能動作,防止重覆送出訂單資料,直到另外選取食品。 clear_selection(); }程式連結: index.php index.html(檢視含有php的完整程式碼)
加入資料處理變化: 1.資料表格中若無資料的話,以新增的方式,將資料加入表格 2.若已經有同名的資料話,以更新的方式,對資料進行更新。
<?php $file = 'order.txt'; //訂單資料檔名稱,請先在此程式index.php同目錄建立order.txt,裏面是空的不是空的都可以。 // $current = file_get_contents($file); //讀出舊資料,並以$current變數做為操作的檔案handler $connection = mysqli_connect("localhost", "username", "password", "database name"); if(!$connection){ die("There was an error connecting to the database."); } date_default_timezone_set("Asia/Taipei"); //設定時區,要在order裏輸出時間,把時區調到Taipei if(isset($_POST['order_name'])){ //如果有傳進order的話 (系統會將資料名稱與值放入$_POST陣列中,php的語函請參考"associative array") $order_name = $_POST['order_name']; $order_meal = $_POST['order_meal']; //先查詢訂購人是否已經訂餐了 $query = "SELECT * FROM orders WHERE name = '$order_name'"; $result = mysqli_query($connection, $query); if (!$result) { //若查無結果的話,以新增的方式加入一筆新的訂餐資料 $query = "INSERT INTO orders(name, meal_name) VALUES('$order_name', '$order_meal')"; } else { //否則,更新已有的訂餐資料 $new_time = date("Y-m-d H:i:s"); $query = "UPDATE orders SET meal_name = '$order_meal', otime = '$new_time' WHERE name = '$order_name' LIMIT 1"; } $result = mysqli_query($connection, $query); file_put_contents($file, $query); //將sql字串輸出檔案,以便檢視產出的sql是否正確 if(!$result){ die("Something went wrong"); } } ?>