Quantcast
Viewing all articles
Browse latest Browse all 82127

Sorting and filtering problem

Hello Everyone here,

I am trying to build this server side processing script based on some post I found from other users, but I cannot get the sort and filter function to work. Its been a week now, at the moment for simplicity I use just a simple table, but later I would use join function. If anyone could give me a helping hand why sorting and filtering not working, it would be great.

<?php
	/*
	 * Script:    DataTables server-side script for PHP and MySQL
	 * Copyright: 2010 - Allan Jardine
	 * License:   GPL v2 or BSD (3-point)
	 */
	
	/* * * * * * * * * * * Easy set variables * * * * * * * * */
	
	/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
     * Array of database columns which should be read and sent back to 
     * DataTables. Use a space where you want to insert a non-database field 
     * (for example a counter or static image) 
     * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
session_start();
if(!session_is_registered(name)){
header("location:login.php");
}
    define('INCLUDE_CHECK',true);
    include 'config.inc.php';
    include 'includes/member_common.php';
    
    $aColumns = array("s.id AS id", "s.start_date AS start_date", "s.days AS days", "s.site AS site");
        
        /*, "a.name site", 
        "b.name guest1", "c.name guest2", "d.name guest3", "e.name guest4"); */
	
	/* Indexed column (used for fast and accurate table cardinality) */
	$sIndexColumn = "s.id";
	
	/* DB table to use */
	$sTable = "schedules s";
	
    // any JOIN operations that you need to do
    $sJoins = "";
    
    /*"LEFT JOIN texchanges a
                on s.site = a.id
            LEFT JOIN texchanges b
                on s.guest1 = b.id
            LEFT JOIN texchanges c
                on s.guest2 = c.id
            LEFT JOIN texchanges d
                on s.guest3 = d.id
            LEFT JOIN texchanges e
                on s.guest4 = e.id";*/

    
   // get or post
   $_METHOD = $_POST;
       
    /* * Paging * */
   $sLimit = "";
   if ( isset( $_METHOD['iDisplayStart'] ) && $_METHOD['iDisplayLength'] != '-1' )
   {
     $sLimit = "LIMIT ".mysql_real_escape_string( $_METHOD['iDisplayStart'] ).", ".
       mysql_real_escape_string( $_METHOD['iDisplayLength'] );
   }
	
	
	/* * Ordering */
   if ( isset( $_METHOD['iSortCol_0'] ) )
   {
     $sOrder = "ORDER BY ";
     for ( $i=0 ; $i<intval( $_METHOD['iSortingCols'] ) ; $i++ )
     {
       if ( $_METHOD[ 'bSortable_'.intval($_METHOD['iSortCol_'.$i]) ] == "true" )
       {
         $sFieldname = $aColumns[ intval( $_METHOD['iSortCol_'.$i] ) ];
         if(strpos($sFieldname, " AS ") == "TRUE") {
           $arr = split(" ", $sFieldname);
           $sFieldname = $arr[2];
         }         
         $sOrder .= $sFieldname . "
           ".mysql_real_escape_string( $_METHOD['sSortDir_'.$i] ) .", ";
       }
     }
     if ( $sOrder === "ORDER BY " )
		{
			$sOrder = "";
		}
   }
	
	/* 
	 * Filtering
	 * NOTE this does not match the built-in DataTables filtering which does it
	 * word by word on any field. It's possible to do here, but concerned about efficiency
	 * on very large tables, and MySQL's regex functionality is very limited
	 */
	$sWhere = "";
    
    /*"WHERE a.userid = $member[id] and a.status = 'Active'";*/
	if ( $_METHOD['sSearch'] != "" )
	{
		$sWhere .= " and (";
		for ( $i=0 ; $i<count($aColumns) ; $i++ )
		{
			$sWhere .= $aColumns[$i]." LIKE '%".mysql_real_escape_string( $_METHOD['sSearch'] )."%' OR ";
		}
		$sWhere = substr_replace( $sWhere, "", -3 );
		$sWhere .= ')';
	}
	
	/* Individual column filtering */
   for ( $i=0 ; $i<count($aColumns) ; $i++ )
   {
     if ( $_METHOD['bSearchable_'.$i] == "true" && $_METHOD['sSearch_'.$i] != '' )
     {
       if ( $sWhere == "" )
       {
         $sWhere = "WHERE ";
       }
       else
       {
         $sWhere .= " AND ";
       }
       $sFieldname = $aColumns[$i];
       if(strpos($sFieldname, " AS ") !== false) {
         $arr = split(" ", $sFieldname);
         $sFieldname = $arr[2];
       }
       $sWhere .= $sFieldname." LIKE '%".mysql_real_escape_string($_METHOD['sSearch_'.$i])."%' ";
     }
   }
	
	
	/*
	 * SQL queries
	 * Get data to display
	 */
	$sQuery = "
		SELECT SQL_CALC_FOUND_ROWS ".str_replace(" , ", " ", implode(", ", $aColumns))."
		FROM   $sTable
        $sJoins
		$sWhere
		$sOrder
		$sLimit
	";
   $sDataQuery = $sQuery;
   $rResult = mysql_query($sQuery) or die(mysql_error());
	
	/* Data set length after filtering */
	$sQuery = "
		SELECT FOUND_ROWS()
	";
	$rResultFilterTotal = mysql_query( $sQuery ) or die(mysql_error());
	$aResultFilterTotal = mysql_fetch_array($rResultFilterTotal);
	$iFilteredTotal = $aResultFilterTotal[0];
	
	/* Total data set length */
	$sQuery = "
		SELECT COUNT(".$sIndexColumn.")
		FROM   $sTable $sWhere
	";
	$rResultTotal = mysql_query( $sQuery ) or die(mysql_error());
	$aResultTotal = mysql_fetch_array($rResultTotal);
	$iTotal = $aResultTotal[0];
	
	
	/*
	 * Output
	 */
	$output = array(
		"sEcho" => intval($_GET['sEcho']),
		"iTotalRecords" => $iTotal,
		"iTotalDisplayRecords" => $iFilteredTotal,
		"aaData" => array()
	);
	
	while ($aRow = mysql_fetch_array($rResult))
	{
		$row = array();
		for ( $i=0 ; $i<count($aColumns) ; $i++ )
		{
            if(strpos($aColumns[$i], " AS ") == true) {
                $arr = split(" ", $aColumns[$i]);
                $row[] = $aRow[$arr[2]];
            }
            elseif ( $aColumns[$i] == "version" )
			{
				/* Special output formatting for 'version' column */
				$row[] = ($aRow[ $aColumns[$i] ]=="0") ? '-' : $aRow[ $aColumns[$i] ];
			}
			elseif ( $aColumns[$i] != ' ' )
			{
				/* General output */
				$row[] = $aRow[ $aColumns[$i] ];
			}
		}
		$output['aaData'][] = $row;
	}
	
	echo json_encode( $output );
    ?>

Viewing all articles
Browse latest Browse all 82127

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>