เช็ค pagination ให้หน่อยครับ กดหน้าอื่นๆ ไม่ไป เพิ่มข้อมูล ได้ปกติ ค้นหาได้ปกติครับ
index.php
<?php include 'config.php'; ?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link href='https://unpkg.com/[email protected] /css/boxicons.min.css' rel='stylesheet'>
<script src="https://cdn.jsdelivr.net/npm/sweetalert2@10"></script>
<script src="https://unpkg.com/[email protected] /dist/sweetalert.min.js"></script>
<script src="https://code.jquery.com/jquery-3.5.1.min.js"></script>
<link rel="stylesheet" href="styles.css">
<link rel="stylesheet" href="css.css">
<title>GX Office</title>
</head>
<body>
<!-- Sidebar -->
<div class="sidebar">
<a href="#" class="logo">
<i class='bx bx-code-alt'></i>
<div class="logo-name"><span>GX </span>Office</div>
</a>
<ul class="side-menu">
<li><a href="../../th"><i class='bx bxs-dashboard'></i>หน้าหลัก</a></li>
<li><a href="../data"><i class='bx bxs-data'></i>Data</a></li>
<li><a href="../quantity/"><i class='bx bx-analyse'></i>ปริมาณ</a></li>
<li><a href="../quality/"><i class='bx bx-border-all'></i>คุณภาพ</a></li>
<li><a href="../workschedule/"><i class='bx bx-calendar-plus'></i>ตารางการทำงาน</a></li>
<li><a href="../report/"><i class='bx bx-calendar-plus'></i>รายงานคัว</a></li>
<li><a href="../employee/"><i class='bx bx-group'></i>พนักงาน</a></li>
<li><a href="../note/"><i class='bx bx-notepad'></i>Note</a></li>
<li class="active"><a href="../setting/"><i class='bx bx-cog'></i>ตั้งค่า</a></li>
</ul>
<ul class="side-menu">
<li>
<a href="#" class="logout">
<i class='bx bx-log-out-circle'></i>
ออกจากระบบ
</a>
</li>
</ul>
</div>
<!-- End of Sidebar -->
<!-- Main Content -->
<div class="content">
<!-- Navbar -->
<nav>
<i class='bx bx-menu'></i>
<form action="#">
<div class="form-input">
<input type="search" placeholder="Search...">
<button class="search-btn" type="submit"><i class='bx bx-search'></i></button>
</div>
</form>
<input type="checkbox" id="theme-toggle" hidden>
<label for="theme-toggle" class="theme-toggle"></label>
<a href="#" class="profile">
<img src="images/logo.png">
</a>
</nav>
<!-- End of Navbar -->
<main>
<form id="addDataForm">
<input type="text" id="shift" placeholder="Shift">
<input type="date" id="date" placeholder="Date">
<input type="text" id="name" placeholder="Name">
<input type="email" id="email" placeholder="Email">
<textarea id="remark" placeholder="Remark"></textarea>
<button type="button" onclick="addData()">Submit</button>
</form>
<div>
<input type="text" id="searchTerm" placeholder="ค้นหา...">
<input type="date" id="fromDate">
<input type="date" id="toDate">
<button onclick="fetchData()">ค้นหา</button>
</div>
<table>
<thead>
<tr>
<th>ID</th>
<th>Shift</th>
<th>Date</th>
<th>Name</th>
<th>Email</th>
<th>Remark</th>
<th>Actions</th>
</tr>
</thead>
<tbody id="dataBody"></tbody>
</table>
<div class="pagination-container">
<a href="#" onclick="changePage(page - 1)" class="pagination-prev"><</a>
<div id="pagination"></div>
<a href="#" onclick="changePage(page + 1)" class="pagination-next">></a>
</div>
<!-- Edit Modal -->
<div id="editModal" class="modal">
<div class="modal-content">
<span class="close-btn" onclick="closeEditModal()">×</span>
<h2>แก้ไขข้อมูล</h2>
<label for="editShift">Shift</label>
<input type="text" id="editShift" name="editShift">
<label for="editDate">Date</label>
<input type="date" id="editDate" name="editDate">
<label for="editName">Name</label>
<input type="text" id="editName" name="editName">
<label for="editEmail">Email</label>
<input type="email" id="editEmail" name="editEmail">
<label for="editRemark">Remark</label>
<input type="text" id="editRemark" name="editRemark">
<button onclick="updateData()">บันทึกการแก้ไข</button>
</div>
</div>
</main>
</div>
<script src="https://unpkg.com/sweetalert/dist/sweetalert.min.js"></script>
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script src="scripts.js"></script>
<script src="js.js"></script>
</body>
</html>
fetch_data.php
<?php
include 'config.php';
$searchTerm = $_POST['searchTerm'] ?? '';
$fromDate = $_POST['fromDate'] ?? date('Y-m-d', strtotime('-7 days'));
$toDate = $_POST['toDate'] ?? date('Y-m-d');
$page = $_POST['page'] ?? 1;
$limit = 10;
$offset = ($page - 1) * $limit;
$query_total = "SELECT COUNT(*) as total FROM reportmember WHERE date BETWEEN '$fromDate' AND '$toDate' AND (name LIKE '%$searchTerm%' OR email LIKE '%$searchTerm%' OR remark LIKE '%$searchTerm%')";
$result_total = $conn->query($query_total);
$total = $result_total->fetch_assoc()['total'];
$query = "SELECT * FROM reportmember WHERE date BETWEEN '$fromDate' AND '$toDate' AND (name LIKE '%$searchTerm%' OR email LIKE '%$searchTerm%' OR remark LIKE '%$searchTerm%') LIMIT $limit OFFSET $offset";
$result = $conn->query($query);
$data = [];
while($row = $result->fetch_assoc()) {
$data[] = $row;
}
echo json_encode(['data' => $data, 'total' => $total]);
?>
scripts.js
let page = 1;
function fetchData() {
const searchTerm = $('#searchTerm').val();
const fromDate = $('#fromDate').val() || (new Date(Date.now() - 7*24*60*60*1000)).toISOString().substr(0, 10);
const toDate = $('#toDate').val() || (new Date()).toISOString().substr(0, 10);
$.ajax({
method: "POST",
url: "fetch_data.php",
data: {
searchTerm: searchTerm,
fromDate: fromDate,
toDate: toDate,
page: page
},
success: function(response) {
const results = JSON.parse(response).data;
const total = JSON.parse(response).total;
let htmlString = "";
// Populate Data
for (let item of results) {
htmlString += `<tr>
<td>${item.id}</td>
<td>${item.shift}</td>
<td>${item.date}</td>
<td>${item.name}</td>
<td>${item.email}</td>
<td>${item.remark}</td>
<td><button onclick="editData(${item.id})">แก้ไข</button> <button onclick="deleteData(${item.id})">ลบ</button></td>
</tr>`;
}
$("#dataBody").html(htmlString);
// Pagination
const pages = Math.ceil(total / 10);
let paginationHTML = '';
for(let i = 1; i <= pages; i++) {
if(i === page) {
paginationHTML += `<span>${i}</span> `;
} else {
paginationHTML += `<a href="#" onclick="changePage(${i})">${i}</a> `;
}
}
$("#pagination").html(paginationHTML);
}
});
}
function changePage(newPage) {
const totalPages = Math.ceil(total / 10);
if (newPage >= 1 && newPage <= totalPages) {
page = newPage;
fetchData();
}
}
// Fetch initial data
$(document).ready(function() {
fetchData();
});
function editData(id) {
editingId = id;
// Fetch the current data for this ID
$.ajax({
method: "POST",
url: "get_data.php",
data: { id: id },
success: function(response) {
const data = JSON.parse(response);
$("#editShift").val(data.shift);
$("#editDate").val(data.date);
$("#editName").val(data.name);
$("#editEmail").val(data.email);
$("#editRemark").val(data.remark);
// Open the modal
$("#editModal").css("display", "block");
}
});
}
function closeEditModal() {
$("#editModal").css("display", "none");
}
function updateData() {
const shift = $("#editShift").val();
const date = $("#editDate").val();
const name = $("#editName").val();
const email = $("#editEmail").val();
const remark = $("#editRemark").val();
$.ajax({
method: "POST",
url: "update_data.php",
data: {
id: editingId,
shift: shift,
date: date,
name: name,
email: email,
remark: remark
},
success: function() {
fetchData();
closeEditModal();
// Show SweetAlert
Swal.fire({
icon: 'success',
title: 'บันทึกเรียบร้อย',
text: 'ข้อมูลถูกปรับปรุงแล้ว',
timer: 1500,
showConfirmButton: false
});
},
error: function() {
// Error SweetAlert
Swal.fire({
icon: 'error',
title: 'เกิดข้อผิดพลาด',
text: 'ไม่สามารถปรับปรุงข้อมูลได้'
});
}
});
}
function addData() {
const shift = $("#shift").val();
const date = $("#date").val();
const name = $("#name").val();
const email = $("#email").val();
const remark = $("#remark").val();
$.ajax({
method: "POST",
url: "add_data.php",
data: {
shift: shift,
date: date,
name: name,
email: email,
remark: remark
},
success: function(response) {
if(response === 'success') {
// Use SweetAlert to show success message
swal("Success!", "Data added successfully.", "success");
// Clear the form
$("#addDataForm")[0].reset();
} else {
// Use SweetAlert to show error message
swal("Error!", "There was an issue adding the data.", "error");
}
}
});
}
Tag : PHP, MySQL, HTML5, JavaScript, Ajax, jQuery
Date :
2023-08-05 11:08:00
By :
pharyupharyu
View :
391
Reply :
6
เพราะ ajax request ส่งค่า page ที่เป็นตัวแปรแบบ global จากบรรทัดนี้
let page = 1;
แต่ในฟังก์ชัน fetchData กลับไม่มีตัวแปรที่เก็บค่า page แบบ local
แก้โดยลบตัวแปร page แบบ global ออก
แล้วส่งค่า page ไปในฟังก์ชัน fetchData ด้วยพารามิเตอร์
Code เฉพาะส่วนที่ต้องแก้ (JavaScript)
function fetchData(page) {
const searchTerm = $('#searchTerm').val();
const fromDate = $('#fromDate').val() || (new Date(Date.now() - 7*24*60*60*1000)).toISOString().substr(0, 10);
const toDate = $('#toDate').val() || (new Date()).toISOString().substr(0, 10);
$.ajax({
method: "POST",
url: "fetch_data.php",
data: {
searchTerm: searchTerm,
fromDate: fromDate,
toDate: toDate,
page: page // Pass the current page number to the server
},
success: function(response) {
// Existing code for updating the table data
// Pagination
const pages = Math.ceil(total / 10);
let paginationHTML = '';
for (let i = 1; i <= pages; i++) {
if (i === page) {
paginationHTML += `<span>${i}</span> `;
} else {
paginationHTML += `<a href="#" onclick="changePage(${i})">${i}</a> `;
}
}
$("#pagination").html(paginationHTML);
}
});
}
function changePage(newPage) {
const totalPages = Math.ceil(total / 10);
if (newPage >= 1 && newPage <= totalPages) {
fetchData(newPage); // Pass the new page to fetchData function
}
}
// Fetch initial data
$(document).ready(function() {
const initialPage = 1; // Set the initial page to 1
fetchData(initialPage); // Fetch data for the initial page
});
อีกอย่าง การใส่ reference js ไม่ควรใส่ library เดียวกันแบบหลายเวอร์ชัน...เลือกอันใหม่หรือเก่าเวอร์ชันเดียวก็พอ
Date :
2023-08-05 13:45:36
By :
009
ขอบพระคุณครับ รบกวนอีกอย่างครับ ต้องเอาตัวนี้ออกไหมครับ let page = 1;
Date :
2023-08-05 19:16:50
By :
pharyupharyu
ตรวจดูโค้ดก่อนว่ามีการเรียกใช้ตัวแปร page หรือไม่. ดูดีๆด้วยทุกตัวอักษร page ไม่ใช่ pages และไม่ใช่ Page!!
แล้วการประกาศตัวแปร let, var มีความแตกต่างกัน ถ้าประกาศผิดที่ผิดทางผิดรูปแบบ ก็ใช้ไม่ได้อีก
บางกรณีอาจไม่ต้องประกาศก็ใช้ได้ (เคยเจอในเบราเซอร์เมื่อก่อน เดี๋ยวนี้ไม่รู้เป็นอยู่มั้ย). ซึ่งถ้ามันใช้ได้ แต่วันดีคืนดีไปกำหนด 'use strict' ขึ้นมาก็โค้ดตายครับ.
Date :
2023-08-06 21:13:30
By :
mr.v
Load balance : Server 01