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 值填充列中的单元格,从行中的其他单元格中获取值

如何从 jQuery Datatable 中获取过滤后的数据结果集

根据同一行中的另一个值从行中选择某个值

c#从dataTable中取出行,不知道是第几行,只知道行中数据!