PHP/MySQL 기반 응용 프로그램을 만들 때 세션 변수를 응용 프로그램의 페이지에서 사용하는 DataTable 플러그인으로 가져올 수 있어야합니다. 응용 프로그램은 다소 복잡하므로 특정 질문을하기 전에 어떻게 작동하는지 설명하겠습니다.Datatables 플러그인의 세션 변수
index.php에는 내 조직 내에서이 애플리케이션을 사용하는 부서를 보여주는 드롭 다운 메뉴가 있습니다. 부서 목록은 부서 이름과 부서 코드가있는 mySQL 테이블에 의해 생성됩니다. $dept
변수는 제출시 드롭 다운 메뉴에 선택한 옵션의 부서 코드 값을 저장합니다. 차례로, $_SESSION["department"]
변수는 $dept
을 저장하고 성공하면 체크인 페이지로 리디렉션됩니다.
세션 변수는 사이트 전체에 걸쳐 전달되며 표시 할 테이블을 결정하는 데 사용됩니다. 예를 들어 checkin.php에서 드롭 다운 목록에 스탭을 표시해야합니다. 우리는 응용 프로그램을 사용하는 부서를 기반으로 여러 테이블을 가지고 있습니다. 우리의 index.php에서 세션 변수를 저장
- : 우리는 세션 변수가 문자열
ts
로 저장되어있는 경우ts_staff
라고해야 하나 테이블, 우리는 다음과 같이 앱이 바로 데이터베이스에 연결되어 있는지 확인합니다 않습니다 checkin.php에 전역 변수로$dept = $_SESSION[department];
- 우리는 글로벌 변수와 우리의 모든 MySQL의 직원 테이블에 사용되는 _staff 문자열을 연결하는 또 다른 새로운 변수를 만들 :
$staffTable = $dept . "_staff";
- 마지막을, 우리는 데이터베이스로
$staffTable
변수를 사용 표시해야하는 표 :$query = mysqli_query($VisitorManagement, "SELECT * FROM {$staffTable}");
여기에 전체 checkin.php 코드입니다 :
<?php
// connect to database
require_once('connection.php');
session_start();
//get session variable, if empty, unset and logout
if(empty($_SESSION['department'])) {
session_unset();
session_destroy();
header("Location: index.php");
} else {
$dept = $_SESSION[department];
}
//submit values on submit
if (isset($_POST['submit']))
{
// store form data values
$suid = mysqli_real_escape_string($VisitorManagement, $_POST['suid']);
$staff = mysqli_real_escape_string($VisitorManagement, $_POST['staff']);
$checkinTable = $dept . "_checkin";
// insert varaibles into table rows
$sql = "INSERT INTO {$checkinTable} (suid, staffMember) VALUES ('$suid', '$staff')";
// check if row was inserted correctly
if (mysqli_query($VisitorManagement, $sql)) {
header('Location: thank-you.php');
} else {
echo "Error: " . $sql . "<br>" . mysqli_error($VisitorManagement);
}
}
?>
<!doctype html>
<html class="no-js" lang="en">
<head>
<meta charset="utf-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Visitor Management</title>
<link rel="stylesheet" href="css/foundation.min.css" />
<link rel="stylesheet" href="css/app.css" />
<link type="text/css" rel="stylesheet" href="http://fast.fonts.net/cssapi/24365087-b739-4314-af6e-741946b60bef.css"/>
<link type="text/css" rel="stylesheet" href="http://fast.fonts.net/cssapi/b05259d9-ca62-44a8-8a19-d3facdbd64df.css"/>
<link type="text/css" rel="stylesheet" href="http://fast.fonts.net/cssapi/2603d516-f938-4b52-ae3a-11d25bb4c555.css"/>
<link type="text/css" rel="stylesheet" href="http://fast.fonts.net/cssapi/510266cf-74ab-4fa8-9b39-dd37b90d6ab0.css"/>
</head>
<body>
<!-- nav -->
<div class="top-bar">
<div class="top-bar-left">
<ul class="menu">
<li><a href="checkin.php" class="active">Check-In</a></li>
</ul>
</div>
<div class="top-bar-right">
<ul class="menu">
<li><a href="login.php">Admin Login</a></li>
<li><a href="logout.php">Logout</a></li>
</ul>
</div>
</div>
<div class="row text-center" style="margin-top: 5%;">
<h1>Syracuse University</h1>
<!-- replace with whatever department they select -->
<h2>Technical Services</h2>
</div>
<div class="row">
<form id="checkin" method="post" name="checkin">
<div class="row">
<div class="medium-12 columns">
<label>Please Swipe Your SUID Card
<input type="text" placeholder="SUID Number Here" id="suid" name="suid" required>
</label>
</div>
<div class="medium-12 columns">
<label>Who Are You Here to See?
<?php
$staffTable = $dept . "_staff";
echo "<select name='staff'>";
echo '<option value="">'.'Please select a staff member'.'</option>';
$query = mysqli_query($VisitorManagement, "SELECT * FROM {$staffTable}");
while($row=mysqli_fetch_array($query))
{
echo "<option value='". $row['fullName']."'>".$row['fullName']
.'</option>';
}
echo '</select>';
// close connection
mysqli_close($VisitorManagement);
?>
</label>
</div>
<div class="medium-12 columns">
<input type="submit" class="button" value="Submit" name="submit">
</div>
</div>
</form>
</div>
<script src="js/vendor/jquery.min.js"></script>
<script src="js/vendor/what-input.min.js"></script>
<script src="js/foundation.min.js"></script>
<script src="js/app.js"></script>
</body>
</html>
문제는 reports.php에, 나는 동적으로 구성하고 테이블을 필터링 할 DataTables 플러그인을 사용하고 있다는 것입니다,하지만 난 필요 세션 변수를 플러그인으로 가져올 수 있어야 사용자가 index.php 화면에서 선택한 항목을 기반으로 특정 표를 구성 할 수 있습니다.
reports.php는 DataTables를 호출하고 다른 페이지 (response.php)를 사용하여 테이블의 데이터를 표시되도록 JSON으로 변환합니다.
$sql = "SELECT id, suid, staffMember, studentName, studentEmail, date_format(checkinDateTime, '%b %d, %Y, %h:%i %p') as checkinDateTime FROM `ts_checkin`";`
:
response.php에서
<?php
//include connection file
include_once("../connection.php");
// initilize all variable
$params = $columns = $totalRecords = $data = array();
$params = $_REQUEST;
//define index of column
$columns = array(
0 => 'id',
1 => 'suid',
2 => 'staffMember',
3 => 'studentName',
4 => 'studentEmail',
5 => 'checkinDateTime'
);
$where = $sqlTot = $sqlRec = "";
// check search value exist
if(!empty($params['search']['value'])) {
$where .=" WHERE ";
$where .=" (studentName LIKE '".$params['search']['value']."%' ";
$where .=" OR staffMember LIKE '".$params['search']['value']."%' ";
$where .=" OR studentEmail LIKE '".$params['search']['value']."%' ";
$where .=" OR suid LIKE '".$params['search']['value']."%' ";
$where .=" OR checkinDate LIKE '".$params['search']['value']."%')";
}
// getting total number records without any search
$sql = "SELECT id, suid, staffMember, studentName, studentEmail, date_format(checkinDateTime, '%b %d, %Y, %h:%i %p') as checkinDateTime FROM `ts_checkin`";
$sqlTot .= $sql;
$sqlRec .= $sql;
//concatenate search sql if value exist
if(isset($where) && $where != '') {
$sqlTot .= $where;
$sqlRec .= $where;
}
//$sqlRec .= " ORDER BY ". $columns[$params['order'][0]['column']]." ".$params['order'][0]['dir']." LIMIT ".$params['start']." ,".$params['length']." ";
$queryTot = mysqli_query($VisitorManagement, $sqlTot) or die("database error:". mysqli_error($VisitorManagement));
$totalRecords = mysqli_num_rows($queryTot);
$queryRecords = mysqli_query($VisitorManagement, $sqlRec) or die("error to fetch check-in data");
//iterate on results row and create new index array of data
while($row = mysqli_fetch_row($queryRecords)) {
$data[] = $row;
}
$json_data = array(
"draw" => intval($params['draw']),
"recordsTotal" => intval($totalRecords),
"recordsFiltered" => intval($totalRecords),
"data" => $data // total data array
);
echo json_encode($json_data); // send data as json format
?>
, 나는이 줄에 표시됩니다 ts_checkin
을 대체 할 수있게해야합니다
<?php session_start();
if(empty($_SESSION['department'])) {
session_unset();
session_destroy();
header("Location: index.php");
} else {
$dept = $_SESSION[department];
}
$checkinTable = $dept . "_checkin";
?>
<!doctype html>
<html class="no-js" lang="en">
<head>
<meta charset="utf-8" />
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Visitor Management</title>
<link rel="stylesheet" href="../css/foundation.min.css" />
<link rel="stylesheet" href="../css/app.css" />
<link type="text/css" rel="stylesheet" href="http://fast.fonts.net/cssapi/24365087-b739-4314-af6e-741946b60bef.css"/>
<link type="text/css" rel="stylesheet" href="http://fast.fonts.net/cssapi/b05259d9-ca62-44a8-8a19-d3facdbd64df.css"/>
<link type="text/css" rel="stylesheet" href="http://fast.fonts.net/cssapi/2603d516-f938-4b52-ae3a-11d25bb4c555.css"/>
<link type="text/css" rel="stylesheet" href="http://fast.fonts.net/cssapi/510266cf-74ab-4fa8-9b39-dd37b90d6ab0.css"/>
<link type="text/css" rel="stylesheet" href="https://cdn.datatables.net/r/dt/jq-2.1.4,jszip-2.5.0,pdfmake-0.1.18,dt-1.10.9,af-2.0.0,b-1.0.3,b-colvis-1.0.3,b-html5-1.0.3,b-print-1.0.3,se-1.0.1/datatables.min.css"/>
</head>
<body>
<?php
if (!isset($_SESSION['user'])) {
header("Location: ../login.php"); // If session is not set that redirect to Login Page
}
?>
<div class="top-bar admin">
<div class="top-bar-left">
<ul class="menu">
<li class="menu-text">Visitor Management</li>
</ul>
</div>
<div class="top-bar-right">
<ul class="menu">
<li><a href="logout.php">Logout</a></li>
<li><a href="#">Help</a></li>
</ul>
</div>
</div>
<div class="medium-2 columns dash">
<ul>
<li><a href="dashboard.php">Dashboard</a></li>
<li><a href="staff.php">Staff</a></li>
<li class="active"><a href="reports.php">Reports</a></li>
</ul>
</div>
<div class="medium-10 columns">
<div class="row checkin">
<h2>Reports</h2>
<table class="checkin" id="checkin">
<thead>
<tr>
<th>ID</th>
<th>SUID #</th>
<th>Staff Member</th>
<th>Student Name</th>
<th>Student Email</th>
<th>Check In Date/Time</th>
</tr>
</thead>
</table>
<!--<div class="float-left">
<a href="export.php" class="button success">Export to Excel</a>
</div>
<div class="float-right">
</div>-->
</div>
</div>
<script type="text/javascript" charset="utf8" src="http://ajax.aspnetcdn.com/ajax/jQuery/jquery-1.8.2.min.js"></script>
<script src="../js/vendor/what-input.min.js"></script>
<script src="../js/foundation.min.js"></script>
<script src="../js/app.js"></script>
<script type="text/javascript" src="https://cdn.datatables.net/r/dt/jq-2.1.4,jszip-2.5.0,pdfmake-0.1.18,dt-1.10.9,af-2.0.0,b-1.0.3,b-colvis-1.0.3,b-html5-1.0.3,b-print-1.0.3,se-1.0.1/datatables.min.js"></script>
<script>
$(document).ready(function() {
$('#checkin').DataTable({
"bProcessing": true,
"serverSide": false,
"dom": 'lBfrtip',
"buttons": [
{
extend: 'collection',
text: 'Export',
buttons: [
'copy',
'excel',
'csv',
'pdf',
'print'
]
}
],
"ajax":{
url :"response.php", // json datasource
type: "post", // type of method ,GET/POST/DELETE
data: {}
}
});
});
</script>
</body>
</html>
여기 response.php가있다 : 여기 reports.php입니다
변수와 $checkinTable
이 연결되어 checkin.php가 스태프 테이블과 어떻게 연관되는지를 나타냅니다. 그래서 본질적으로 $checkinTable = $dept . "_checkin"
과 $dept
을 세션 변수의 값과 같게하고 싶습니다.DataTables warning: table id=checkin - Invalid JSON response. For more information about this error, please see http://datatables.net/tn/1
가이 작업을 얻을 수 있나요 : 나는 이렇게 갈 때
, 나는 DataTables에서이 오류가? 필자는 DataTables를 On-The-Fly 테이블 필터링, 검색 및 정렬 (부서별로 고도로 요구되는 기능)을 수행하는 가장 좋은 방법으로 유지하고 싶습니다. 하지만 세션 변수를 기반으로 테이블을 설정할 수 있어야합니다.
이 질문의 길이에 대해 사과드립니다. 설명이 필요하면 알려주세요.
내가 혼란 질문에 대한 죄송합니다. 회사 내부에 있기 때문에 신청서를 설명하기가 어렵습니다. 여기에 제가 한 일이 있습니다 : 첫째,'$ dept = $ _SESSION [department]; $ checkinTable = $ dept. "_checkin"; "response.php 맨 위로 $ sql 변수를'$ sql ="으로 변경했습니다. SELECT id, suid, staffMember, studentName, studentEmail, date_format (checkinDateTime, '% b % d, % Y, % h : % i % p ')를 checkinDateTime FROM "으로 설정하십시오. $ checkinTable; '하지만 여전히 DataTables에서 같은 오류가 발생합니다. –
'session_start()'? –
호출 된 페이지에서 세션을 시작하지 않으면'$ dept'가 정의되지 않습니다. –