2016-06-29 2 views
0

PHP/MySQL 기반 응용 프로그램을 만들 때 세션 변수를 응용 프로그램의 페이지에서 사용하는 DataTable 플러그인으로 가져올 수 있어야합니다. 응용 프로그램은 다소 복잡하므로 특정 질문을하기 전에 어떻게 작동하는지 설명하겠습니다.Datatables 플러그인의 세션 변수

index.php에는 내 조직 내에서이 애플리케이션을 사용하는 부서를 보여주는 드롭 다운 메뉴가 있습니다. 부서 목록은 부서 이름과 부서 코드가있는 mySQL 테이블에 의해 생성됩니다. $dept 변수는 제출시 드롭 다운 메뉴에 선택한 옵션의 부서 코드 값을 저장합니다. 차례로, $_SESSION["department"] 변수는 $dept을 저장하고 성공하면 체크인 페이지로 리디렉션됩니다.

세션 변수는 사이트 전체에 걸쳐 전달되며 표시 할 테이블을 결정하는 데 사용됩니다. 예를 들어 checkin.php에서 드롭 다운 목록에 스탭을 표시해야합니다. 우리는 응용 프로그램을 사용하는 부서를 기반으로 여러 테이블을 가지고 있습니다. 우리의 index.php에서 세션 변수를 저장

  1. : 우리는 세션 변수가 문자열 ts로 저장되어있는 경우 ts_staff라고해야 하나 테이블, 우리는 다음과 같이 앱이 바로 데이터베이스에 연결되어 있는지 확인합니다 않습니다 checkin.php에 전역 변수로 $dept = $_SESSION[department];
  2. 우리는 글로벌 변수와 우리의 모든 MySQL의 직원 테이블에 사용되는 _staff 문자열을 연결하는 또 다른 새로운 변수를 만들 : $staffTable = $dept . "_staff";
  3. 마지막을, 우리는 데이터베이스로 $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 테이블 필터링, 검색 및 정렬 (부서별로 고도로 요구되는 기능)을 수행하는 가장 좋은 방법으로 유지하고 싶습니다. 하지만 세션 변수를 기반으로 테이블을 설정할 수 있어야합니다.

이 질문의 길이에 대해 사과드립니다. 설명이 필요하면 알려주세요.

답변

0

질문을 이해하는 것이 확실하지 않습니다 ...

이것이 작동하지 않는다고 말씀 하시겠습니까?
이렇게 작성 했습니까?
(FROM 후 공간을 확인할 수 있습니다.이 필요합니다!) 확인을 위해

$checkinTable = $dept . "_checkin"; 

$sql = "SELECT id, suid, staffMember, studentName, studentEmail, date_format(checkinDateTime, '%b %d, %Y, %h:%i %p') as checkinDateTime FROM " . $checkinTable; 

, $dept 정의 할 수도있다.
결과로 나타나는 $checkinTable은 기존 테이블 이름이어야합니다. 좋아

은 ...
이것은 당신의 response.php에서 누락 된 것 같습니다

session_start(); 
$dept = $_SESSION[department]; 
$checkinTable = $dept . "_checkin"; 
+0

내가 혼란 질문에 대한 죄송합니다. 회사 내부에 있기 때문에 신청서를 설명하기가 어렵습니다. 여기에 제가 한 일이 있습니다 : 첫째,'$ 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에서 같은 오류가 발생합니다. –

+0

'session_start()'? –

+0

호출 된 페이지에서 세션을 시작하지 않으면'$ dept'가 정의되지 않습니다. –