เราเคยได้ทำการศึกษาเกี่ยวกับ การ เพิ่ม ลบ แก้ไข รายการ ด้วย angularjs
มาแล้วในตอนที่ 3
เพิ่ม ลบ แก้ไข รายการ ด้วย angularjs ตอนที่ 3
https://www.ninenik.com/content.php?arti_id=517 via @ninenik
แต่เนื้อหาดังกล่าวเป็นการบันทึกข้อมูลไปยัง server firebase ซึ่งเป็นการ
ทดสอบตามตัวอย่าง ของเว็บไซต์ https://www.angularjs.org
ทีนี้เรามาดูการบันทึกข้อมูลลงฐานข้อมูล mysql กันบ้าง
โดยตอนแรกของเนื้อหานี้ จะเป็นการวางโครงฐานข้อมูล และหน้าตาการแสดงผล
เบื้องต้น ที่จะใช้งาน ก่อน
สิ่งที่จะทำคือ เก็บข้อมูลเพื่อนไว้ในฐานข้อมูล โดยสามารถ เพิ่ม ลบ แก้ไข
แสดงลิสรายการ และแสดงเป็นแต่ละรายการ รวมทั้ง เรียงการแสดงผล และค้น
หาข้อมูลจากตารางได้
โครงสร้างไฟล์ทั้งหมดที่จะใช้งาน
\boostrap โฟลเดอร์ css ของ bootstrap อ่านวิธีโหลดได้ที่ ตอนที่ 3 ตอนด้านบน
\data\model.php โฟลเดอร์ data และไฟล์ medel.php สำหรับจัดการกับฐานข้อมูล
\db\db_connect.php โฟลเดอร์ db และไฟล์ db_connect.php สำหรับเชื่อมต่อฐานข้อมูล
\tpl โฟลเดอร์สำหรับเก็บ ไฟล์ templates หน้าต่างๆ โดยมี 3 ไฟล์ด้านล่างอยู่ด้านใน
-- list.html ไฟล์ template list.html สำหรับหน้าแสดงรายการ หน้าหลัก
-- detail.html ไฟล์ template detail.html สำหรับหน้า เพิ่มและแก้ไข ข้อมูล
-- view.html ไฟล์ template view.html สำหรับ
app.js ไฟล์ javasciprt สำหรับโปรแกรม
index.html ไฟล์เริ่มต้น สำหรับทดสอบ
สำหรับไฟล์ angularsjs เราจะเรียกใช้ผ่าน server ของ google ซึ่งจะแทรกไว้ใน index.html
1. กำหนดรายละเอียด ฐานข้อมูล
ตารางชื่อ tbl_myfriend ประกอบด้วย id,name,tel,address
CREATE TABLE `tbl_myfriend` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `name` VARCHAR( 100 ) NOT NULL , `tel` VARCHAR( 10 ) NOT NULL , `address` VARCHAR( 255 ) NOT NULL ) ENGINE = MYISAM CHARACTER SET utf8 COLLATE utf8_unicode_ci;
2. กำหนดการเชื่อมต่อกับฐานข้อมูล ในไฟล์ db_connect.php (ใช้คำสั่ง mysqli แทน mysql)
<?php
// ฟังก์ชันสำหรับเชื่อมต่อกับฐานข้อมูล
function connect()
{
// เริ่มต้นส่วนกำหนดการเชิ่อมต่อฐานข้อมูล //
$db_config=array(
"host"=>"localhost", // กำหนด host
"user"=>"root", // กำหนดชื่อ user
"pass"=>"", // กำหนดรหัสผ่าน
"dbname"=>"test", // กำหนดชื่อฐานข้อมูล
"charset"=>"utf8" // กำหนด charset
);
// สิ้นสุุดส่วนกำหนดการเชิ่อมต่อฐานข้อมูล //
$mysqli = @new mysqli($db_config["host"], $db_config["user"], $db_config["pass"], $db_config["dbname"]);
if(mysqli_connect_error()) {
die('Connect Error (' . mysqli_connect_errno() . ') '. mysqli_connect_error());
exit;
}
if(!$mysqli->set_charset($db_config["charset"])) { // เปลี่ยน charset เป้น utf8 พร้อมตรวจสอบการเปลี่ยน
// printf("Error loading character set utf8: %sn", $mysqli->error); // ถ้าเปลี่ยนไม่ได้
}else{
// printf("Current character set: %sn", $mysqli->character_set_name()); // ถ้าเปลี่ยนได้
}
return $mysqli;
//echo $mysqli->character_set_name(); // แสดง charset เอา comment ออก
//echo 'Success... ' . $mysqli->host_info . "n";
//$mysqli->close();
}
// ฟังก์ชันสำหรับคิวรี่คำสั่ง sql
function query($sql)
{
global $mysqli;
if($mysqli->query($sql)) { return true; }
else { die("SQL Error: <br>".$sql."<br>".$mysqli->error); return false; }
}
// ฟังก์ชัน select ข้อมูลในฐานข้อมูลมาแสดง
function select($sql)
{
global $mysqli;
$result=array();
$res = $mysqli->query($sql) or die("SQL Error: <br>".$sql."<br>".$mysqli->error);
while($data= $res->fetch_assoc()) {
$result[]=$data;
}
return $result;
}
// ฟังก์ชันสำหรับการ insert ข้อมูล
function insert($table,$data)
{
global $mysqli;
$fields=""; $values="";
$i=1;
foreach($data as $key=>$val)
{
if($i!=1) { $fields.=", "; $values.=", "; }
$fields.="$key";
$values.="'$val'";
$i++;
}
$sql = "INSERT INTO $table ($fields) VALUES ($values)";
if($mysqli->query($sql)) { return true; }
else { die("SQL Error: <br>".$sql."<br>".$mysqli->error); return false; }
}
// ฟังก์ชันสำหรับการ update ข้อมูล
function update($table,$data,$where)
{
global $mysqli;
$modifs="";
$i=1;
foreach($data as $key=>$val)
{
if($i!=1){ $modifs.=", "; }
if(is_numeric($val)) { $modifs.=$key.'='.$val; }
else { $modifs.=$key.' = "'.$val.'"'; }
$i++;
}
$sql = ("UPDATE $table SET $modifs WHERE $where");
if($mysqli->query($sql)) { return true; }
else { die("SQL Error: <br>".$sql."<br>".$mysqli->error); return false; }
}
// ฟังก์ชันสำหรับการ delete ข้อมูล
function delete($table, $where)
{
global $mysqli;
$sql = "DELETE FROM $table WHERE $where";
if($mysqli->query($sql)) { return true; }
else { die("SQL Error: <br>".$sql."<br>".$mysqli->error); return false; }
}
// ฟังก์ชันสำหรับแสดงรายการฟิลด์ในตาราง
function listfield($table)
{
global $mysqli;
$sql="SELECT * FROM $table LIMIT 1 ";
$row_title="$data=array(<br/>";
$res = $mysqli->query($sql) or die("SQL Error: <br>".$sql."<br>".$mysqli->error);
$i=1;
while($data= $res->fetch_field()) {
$var=$data->name;
$row_title.='"$var"=>"value$i",<br/>';
$i++;
}
$row_title.=");<br/>";
echo $row_title;
}
?>
3. ไฟล์ model.php
<?php
include("../db/db_connect.php");
$mysqli = connect();
?>
4. ไฟล์ index.html
<!DOCTYPE html>
<html ng-app="app">
<head>
<meta charset="utf-8" />
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.0-beta.17/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.0-beta.17/angular-resource.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.0-beta.17/angular-route.min.js"></script>
<link rel="stylesheet" type="text/css" href="bootstrap/css/bootstrap.min.css" />
<script src="app.js"></script>
<title>My Learn AngularJs 7</title>
<style type="text/css">
</style>
</head>
<body ng-controller="appController">
<br>
<div class="container">
<h4>My Friends</h4>
<div ng-view></div>
</div>
</body>
</html>
สังเกตว่า จะมีการเรียกใช้งาน module resource และก็ route จาก angularjs
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.0-beta.17/angular.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.0-beta.17/angular-resource.min.js"></script>
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.3.0-beta.17/angular-route.min.js"></script>
5. ไฟล์ app.js
angular.module("app",["ngRoute"])
.config(function($routeProvider) {
$routeProvider
.when('/', {
controller:'ListCtrl',
templateUrl:'tpl/list.html'
})
.when('/view/:Id', {
controller:'ViewCtrl',
templateUrl:'tpl/view.html'
})
.when('/edit/:Id', {
controller:'EditCtrl',
templateUrl:'tpl/detail.html'
})
.when('/new', {
controller:'CreateCtrl',
templateUrl:'tpl/detail.html'
})
.otherwise({
redirectTo:'/'
});
})
.controller("appController",["$scope",function($scope){
}]);
6. ไฟล์ list.html
<input type="text" class="form-control " placeholder="Search">
<br>
<table class="table table-striped">
<thead>
<tr>
<th>#</th>
<th>Name</th>
<th>Tel</th>
<th>
</th>
<th class="text-center">
<a href="#/new"><i class="glyphicon glyphicon-plus"></i></a>
</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td><a href="#/view/:1">demo1</a></td>
<td>0800000000</td>
<td class="text-center">
<a href="#/edit/:1"><i class="glyphicon glyphicon-pencil"></i></a>
</td>
<td class="text-center">
<a ng-href="#/"><i class="glyphicon glyphicon-remove"></i></a>
</td>
</tr>
</tbody>
</table>
7. ไฟล์ detail.html
<form role="form" name="myForm">
<div class="control-group" ng-class="{'has-error': myForm.name.$invalid && !myForm.name.$pristine}">
<label class="control-label">Name</label>
<input type="text" class="form-control" name="name" ng-model="data.name" required>
<span ng-show="myForm.name.$error.required && !myForm.name.$pristine" class="text-danger">
Required
</span>
</div>
<div class="control-group" ng-class="{'has-error': myForm.tel.$invalid && !myForm.tel.$pristine}">
<label class="control-label">Tel</label>
<input type="text" class="form-control" name="tel" ng-model="data.tel" number required>
<span ng-show="myForm.tel.$error.required && !myForm.tel.$pristine" class="text-danger">
Required
</span>
</div>
<div class="control-group">
<label>Address</label>
<textarea name="address" class="form-control" rows="3"
ng-model="data.address"></textarea>
</div>
<br>
<a href="#/" class="btn btn-default">Cancel</a>
<button ng-disabled="myForm.$invalid" class="btn btn-primary">Save</button>
<button class="btn btn-danger">Delete</button>
</form>
8. ไฟล์ view.html
<table class="table">
<tr class="active">
<th colspan="2">Friend Detail</th>
</tr>
<tr>
<td width="100px" class="warning text-right">Name: </td>
<td>demo1</td>
</tr>
<tr>
<td width="100px" class="warning text-right">Tel: </td>
<td>080000000</td>
</tr>
<tr>
<td width="100px" class="warning text-right">Address: </td>
<td>thiis is a simple text</td>
</tr>
</table>
<br>
<a href="#/" class="btn btn-default">Back</a>
ตัวอย่างผลลัพธ์ ไฟล์ ตัวนี้เป้นแค่ ตัวทดสอบ ยังเป็นข้อมูลหลอก ยังไม่ได้เขียนโค้ดแบบเต็ม
โปรดติดตามตอนต่อไป....