| 0 | 1 <?php | 
|  | 2 	/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * | 
|  | 3 	 * Easy set variables | 
|  | 4 	 */ | 
|  | 5 | 
|  | 6 	/* Array of database columns which should be read and sent back to DataTables. Use a space where | 
|  | 7 	 * you want to insert a non-database field (for example a counter or static image) | 
|  | 8 	 */ | 
|  | 9 	$aColumns = array( 'engine', 'browser', 'platform', 'version', 'grade' ); | 
|  | 10 | 
|  | 11 	/* Indexed column (used for fast and accurate table cardinality) */ | 
|  | 12 	$sIndexColumn = "id"; | 
|  | 13 | 
|  | 14 	/* DB table to use */ | 
|  | 15 	$sTable = "ajax"; | 
|  | 16 | 
|  | 17 	/* Database connection information */ | 
|  | 18 	$gaSql['user']       = ""; | 
|  | 19 	$gaSql['password']   = ""; | 
|  | 20 	$gaSql['db']         = ""; | 
|  | 21 	$gaSql['server']     = "localhost"; | 
|  | 22 | 
|  | 23 	/* REMOVE THIS LINE (it just includes my SQL connection user/pass) */ | 
|  | 24 	include( $_SERVER['DOCUMENT_ROOT']."/datatables/mysql.php" ); | 
|  | 25 | 
|  | 26 | 
|  | 27 	/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * | 
|  | 28 	 * If you just want to use the basic configuration for DataTables with PHP server-side, there is | 
|  | 29 	 * no need to edit below this line | 
|  | 30 	 */ | 
|  | 31 | 
|  | 32 	/* | 
|  | 33 	 * Local functions | 
|  | 34 	 */ | 
|  | 35 	function fatal_error ( $sErrorMessage = '' ) | 
|  | 36 	{ | 
|  | 37 		header( $_SERVER['SERVER_PROTOCOL'] .' 500 Internal Server Error' ); | 
|  | 38 		die( $sErrorMessage ); | 
|  | 39 	} | 
|  | 40 | 
|  | 41 | 
|  | 42 	/* | 
|  | 43 	 * MySQL connection | 
|  | 44 	 */ | 
|  | 45 	if ( ! $gaSql['link'] = mysql_pconnect( $gaSql['server'], $gaSql['user'], $gaSql['password']  ) ) | 
|  | 46 	{ | 
|  | 47 		fatal_error( 'Could not open connection to server' ); | 
|  | 48 	} | 
|  | 49 | 
|  | 50 	if ( ! mysql_select_db( $gaSql['db'], $gaSql['link'] ) ) | 
|  | 51 	{ | 
|  | 52 		fatal_error( 'Could not select database ' ); | 
|  | 53 	} | 
|  | 54 | 
|  | 55 | 
|  | 56 	/* | 
|  | 57 	 * Paging | 
|  | 58 	 */ | 
|  | 59 	$sLimit = ""; | 
|  | 60 	if ( isset( $_GET['iDisplayStart'] ) && $_GET['iDisplayLength'] != '-1' ) | 
|  | 61 	{ | 
|  | 62 		$sLimit = "LIMIT ".intval( $_GET['iDisplayStart'] ).", ". | 
|  | 63 			intval( $_GET['iDisplayLength'] ); | 
|  | 64 	} | 
|  | 65 | 
|  | 66 | 
|  | 67 	/* | 
|  | 68 	 * Ordering | 
|  | 69 	 */ | 
|  | 70 	$sOrder = ""; | 
|  | 71 	if ( isset( $_GET['iSortCol_0'] ) ) | 
|  | 72 	{ | 
|  | 73 		$sOrder = "ORDER BY  "; | 
|  | 74 		for ( $i=0 ; $i<intval( $_GET['iSortingCols'] ) ; $i++ ) | 
|  | 75 		{ | 
|  | 76 			if ( $_GET[ 'bSortable_'.intval($_GET['iSortCol_'.$i]) ] == "true" ) | 
|  | 77 			{ | 
|  | 78 				$iColumnIndex = array_search( $_GET['mDataProp_'.$_GET['iSortCol_'.$i]], $aColumns ); | 
|  | 79 				$sOrder .= "`".$aColumns[ $iColumnIndex ]."` ". | 
|  | 80 				 	($_GET['sSortDir_'.$i]==='asc' ? 'asc' : 'desc') .", "; | 
|  | 81 			} | 
|  | 82 		} | 
|  | 83 | 
|  | 84 		$sOrder = substr_replace( $sOrder, "", -2 ); | 
|  | 85 		if ( $sOrder == "ORDER BY" ) | 
|  | 86 		{ | 
|  | 87 			$sOrder = ""; | 
|  | 88 		} | 
|  | 89 	} | 
|  | 90 | 
|  | 91 | 
|  | 92 	/* | 
|  | 93 	 * Filtering | 
|  | 94 	 * NOTE this does not match the built-in DataTables filtering which does it | 
|  | 95 	 * word by word on any field. It's possible to do here, but concerned about efficiency | 
|  | 96 	 * on very large tables, and MySQL's regex functionality is very limited | 
|  | 97 	 */ | 
|  | 98 	$sWhere = ""; | 
|  | 99 	if ( isset($_GET['sSearch']) && $_GET['sSearch'] != "" ) | 
|  | 100 	{ | 
|  | 101 		$sWhere = "WHERE ("; | 
|  | 102 		for ( $i=0 ; $i<count($aColumns) ; $i++ ) | 
|  | 103 		{ | 
|  | 104 			if ( isset($_GET['bSearchable_'.$i]) && $_GET['bSearchable_'.$i] == "true" ) | 
|  | 105 			{ | 
|  | 106 				$sWhere .= $aColumns[$i]." LIKE '%".mysql_real_escape_string( $_GET['sSearch'] )."%' OR "; | 
|  | 107 			} | 
|  | 108 		} | 
|  | 109 		$sWhere = substr_replace( $sWhere, "", -3 ); | 
|  | 110 		$sWhere .= ')'; | 
|  | 111 	} | 
|  | 112 | 
|  | 113 	/* Individual column filtering */ | 
|  | 114 	for ( $i=0 ; $i<count($aColumns) ; $i++ ) | 
|  | 115 	{ | 
|  | 116 		if ( isset($_GET['bSearchable_'.$i]) && $_GET['bSearchable_'.$i] == "true" && $_GET['sSearch_'.$i] != '' ) | 
|  | 117 		{ | 
|  | 118 			if ( $sWhere == "" ) | 
|  | 119 			{ | 
|  | 120 				$sWhere = "WHERE "; | 
|  | 121 			} | 
|  | 122 			else | 
|  | 123 			{ | 
|  | 124 				$sWhere .= " AND "; | 
|  | 125 			} | 
|  | 126 			$iColumnIndex = array_search( $_GET['mDataProp_'.$i], $aColumns ); | 
|  | 127 			$sWhere .= $aColumns[$iColumnIndex]." LIKE '%".mysql_real_escape_string($_GET['sSearch_'.$i])."%' "; | 
|  | 128 		} | 
|  | 129 	} | 
|  | 130 | 
|  | 131 | 
|  | 132 	/* | 
|  | 133 	 * SQL queries | 
|  | 134 	 * Get data to display | 
|  | 135 	 */ | 
|  | 136 	$sQuery = " | 
|  | 137 		SELECT SQL_CALC_FOUND_ROWS ".str_replace(" , ", " ", implode(", ", $aColumns))." | 
|  | 138 		FROM   $sTable | 
|  | 139 		$sWhere | 
|  | 140 		$sOrder | 
|  | 141 		$sLimit | 
|  | 142 	"; | 
|  | 143 	$rResult = mysql_query( $sQuery, $gaSql['link'] ) or fatal_error( 'MySQL Error: ' . mysql_errno() ); | 
|  | 144 | 
|  | 145 	/* Data set length after filtering */ | 
|  | 146 	$sQuery = " | 
|  | 147 		SELECT FOUND_ROWS() | 
|  | 148 	"; | 
|  | 149 	$rResultFilterTotal = mysql_query( $sQuery, $gaSql['link'] ) or fatal_error( 'MySQL Error: ' . mysql_errno() ); | 
|  | 150 	$aResultFilterTotal = mysql_fetch_array($rResultFilterTotal); | 
|  | 151 	$iFilteredTotal = $aResultFilterTotal[0]; | 
|  | 152 | 
|  | 153 	/* Total data set length */ | 
|  | 154 	$sQuery = " | 
|  | 155 		SELECT COUNT(".$sIndexColumn.") | 
|  | 156 		FROM   $sTable | 
|  | 157 	"; | 
|  | 158 	$rResultTotal = mysql_query( $sQuery, $gaSql['link'] ) or fatal_error( 'MySQL Error: ' . mysql_errno() ); | 
|  | 159 	$aResultTotal = mysql_fetch_array($rResultTotal); | 
|  | 160 	$iTotal = $aResultTotal[0]; | 
|  | 161 | 
|  | 162 | 
|  | 163 	/* | 
|  | 164 	 * Output | 
|  | 165 	 */ | 
|  | 166 	$output = array( | 
|  | 167 		"sEcho" => intval($_GET['sEcho']), | 
|  | 168 		"iTotalRecords" => $iTotal, | 
|  | 169 		"iTotalDisplayRecords" => $iFilteredTotal, | 
|  | 170 		"aaData" => array() | 
|  | 171 	); | 
|  | 172 | 
|  | 173 	while ( $aRow = mysql_fetch_array( $rResult ) ) | 
|  | 174 	{ | 
|  | 175 		$row = array(); | 
|  | 176 		for ( $i=0 ; $i<count($aColumns) ; $i++ ) | 
|  | 177 		{ | 
|  | 178 			if ( $aColumns[$i] == "version" ) | 
|  | 179 			{ | 
|  | 180 				/* Special output formatting for 'version' column */ | 
|  | 181 				$row[ $aColumns[$i] ] = ($aRow[ $aColumns[$i] ]=="0") ? '-' : $aRow[ $aColumns[$i] ]; | 
|  | 182 			} | 
|  | 183 			else if ( $aColumns[$i] != ' ' ) | 
|  | 184 			{ | 
|  | 185 				/* General output */ | 
|  | 186 				$row[ $aColumns[$i] ] = $aRow[ $aColumns[$i] ]; | 
|  | 187 			} | 
|  | 188 		} | 
|  | 189 		$output['aaData'][] = $row; | 
|  | 190 	} | 
|  | 191 | 
|  | 192 	echo $_GET['callback'].'('.json_encode( $output ).');'; | 
|  | 193 ?> |