DataTable 从行中获取修改后的数据
Posted
技术标签:
【中文标题】DataTable 从行中获取修改后的数据【英文标题】:DataTable fetch modified data from row 【发布时间】:2017-04-20 20:11:19 【问题描述】:我在从数据表中的一行打印正确的内容时遇到问题。
我有一个名为 response.php 的文件,其内容如下:
//include connection file
session_start();
include_once("connection.php");
// initilize all variable
$params = $columns = $totalRecords = $data = array();
$params = $_REQUEST;
//define index of column
$columns = array(
0 =>'log_in_timestamp',
1 =>'liDateInserted',
2 => 'browser',
3 => 'location',
4 => 'lo_li_time'
);
$where = $sqlTot = $sqlRec = "";
// check search value exist
if( !empty($params['search']['value']) )
$where .=" WHERE ";
$where .=" ( browser LIKE '".$params['search']['value']."%' ";
$where .=" OR location LIKE '".$params['search']['value']."%' ";
$where .=" AND ut.id = '".$_SESSION["userSession"]."%' ";
// getting total number records without any search
$sql = "SELECT li.log_in_timestamp, li.date_inserted liDateInserted, li.browser, li.location, (lo.log_out_timestamp - li.log_in_timestamp) lo_li_time, li.user_who_used_the_session, li.id historyId,
lo.id, lo.user_who_used_the_session, lo.log_out_timestamp, lo.date_inserted, ut.id, ut.username
FROM log_in_user_sessions li
LEFT JOIN log_out_user_sessions lo ON li.unique_id_login = lo.unique_id_logout
LEFT JOIN user_table ut ON li.user_who_used_the_session = ut.username
WHERE ut.id = '".$_SESSION["userSession"]."'";
$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($conn, $sqlTot) or die("database error:". mysqli_error($conn));
$totalRecords = mysqli_num_rows($queryTot);
$queryRecords = mysqli_query($conn, $sqlRec) or die("error to fetch employees 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
现在在我的 index.php 我这样称呼表格:
<div class="container">
<div class="">
<h3>User Sessions</h3><br>
<div class="">
<table id="employee_grid" class="display" cellspacing="0">
<thead>
<tr>
<th>Time</th>
<th>Date</th>
<th>Browser</th>
<th>Location</th>
<th>Duration</th>
</tr>
</thead>
<tfoot>
<tr>
<th>Time</th>
<th>Date</th>
<th>Browser</th>
<th>Location</th>
<th>Duration</th>
</tr>
</tfoot>
</table>
</div>
</div>
</div>
我已经尝试过这样的js
:
<script type="text/javascript">
$( document ).ready(function()
$('#employee_grid').DataTable(
"bProcessing": true,
"serverSide": true,
"columnDefs": [
"width": "20%", "defaultContent": "Not Logged Out","targets": "_all"
],
"fnRowCallback": function(nRow, aData, iDisplayIndex, iDisplayIndexFull)
// Bold the grade for all 'A' grade browsers
if (!aData[4])
$(nRow).addClass( 'alert-danger' ).css('background-color', '#f2dede');
,
"lengthMenu": [[5, 10, 25, 50, -1], [5, 10, 25, 50, "All"]],
"responsive": true,
"ajax":
url :"../test/dt/dt_i/response.php",
type: "post",
error: function()
$("#employee_grid_processing").css("display", "none");
);
);
</script>
我的输出如下所示:
我在php
中为我自己创建了相同的东西,它看起来像这样。我希望 DataTable 看起来像这样:
我试图从here、here 或here 获得我的知识
我现在的问题是,如何在第二张图片中输出正确的格式化数据,如 unixtimestamp
和正确的 css 背景
编辑:
我把我的sql语句改成:
SELECT FROM_UNIXTIME(li.log_in_timestamp, '%H:%i'), DATE(li.date_inserted) liDateInserted, li.browser, li.location, FROM_UNIXTIME((lo.log_out_timestamp - li.log_in_timestamp), '%H:%i:%sh') lo_li_time, li.user_who_used_the_session, li.id historyId,
lo.id, lo.user_who_used_the_session, lo.log_out_timestamp, lo.date_inserted, ut.id, ut.username
FROM log_in_user_sessions li
LEFT JOIN log_out_user_sessions lo ON li.unique_id_login = lo.unique_id_logout
LEFT JOIN user_table ut ON li.user_who_used_the_session = ut.username
WHERE ut.id = '" . $_SESSION["userSession"] . "'
现在一切都已正确格式化,但使用 css-background 仍然是个问题...
有人可以在这里更正这行吗?:
"fnRowCallback": function(column, aData, iDisplayIndex, iDisplayIndexFull)
// Bold the grade for all 'A' grade browsers
if (!aData[4])
$(column).addClass( 'alert-danger' ).css('background-color', '#f2dede');
,
【问题讨论】:
在第二张图片中,您在时间列下显示日期,在日期列下显示时间,为什么会这样? 是的,我必须改变那个顺便说一句。感谢您的信息 @MayankPandeyz 更新了它:) 您需要做的就是使用date()
或 DateTime 对象来格式化您希望看到的时间戳
现在您想将时间戳转换为时间并提取日期时间的日期部分吗?
【参考方案1】:
您可以从时间戳中获取时间,例如:
SELECT FROM_UNIXTIME(1447430881);
-> '2015-11-13 10:08:01'
将 FROM_UNIXTIME 放在您的时间戳列上并获取时间。
要从 datetime 获取日期,请使用 EXTRACT,例如:
SELECT DATE(datetime) from table;
将这两个都放在查询中检查结果。
【讨论】:
谢谢 :) 我会试试那个,但我正在寻找类似***.com/a/27558950/5930557 的东西,你能用正确的 php 文件和 js 文件更新你的答案吗?真的很感激:)以上是关于DataTable 从行中获取修改后的数据的主要内容,如果未能解决你的问题,请参考以下文章
Pandas 用 NaN 值填充列中的单元格,从行中的其他单元格中获取值