2013-10-01 5 views
0

Я использую DataTables-1.9.4 с обработкой на стороне сервера, и все работает отлично, но моя таблица возвращает ВСЕ из таблицы! Это в общей сложности 3,147 записей, растущих ежедневно ...DataTables 1.9.4 - Limiting Results

Пример: www.hunterpdx.com/metro_new_copy/view-reports-test.php

Есть ли способ, чтобы ограничить возвращение, чтобы показать данные конкретно связанные с конкретной user: WHERE company = $_SESSION['company']? Я уверен, это может быть сделано , но я целыми днями на этом и не получили нигде ...

Я использую базовый код инициализации (даже покинул идентификатор таблицы и то же):

Единственного, что я изменил в файле server_processing.php является массив aColumns и информация подключения к базе данных:

<?php 
    /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * 
    * 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) 
    */ 
    $aColumns = array('company', 'bldg', 'report', 'freq', 'report_date', 'file_path'); 

    /* Indexed column (used for fast and accurate table cardinality) */ 
    $sIndexColumn = "report_id"; 

    /* DB table to use */ 
    $sTable = "uploads"; 

    /* Database connection information */ 
    $gaSql['user']  = "root"; 
    $gaSql['password'] = ""; 
    $gaSql['db']   = "members"; 
    $gaSql['server']  = "localhost"; 

Я предполагаю, что он должен сделать что-то с этой частью server_processing.php:

/* 
* 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 = ""; 
if (isset($_GET['sSearch']) && $_GET['sSearch'] != "") 
{ 
    $sWhere = "WHERE ("; 
    for ($i=0 ; $i<count($aColumns) ; $i++) 
    { 
     $sWhere .= "`".$aColumns[$i]."` LIKE '%".mysql_real_escape_string($_GET['sSearch'])."%' OR "; 
    } 
    $sWhere = substr_replace($sWhere, "", -3); 
    $sWhere .= ')'; 
} 

/* Individual column filtering */ 
for ($i=0 ; $i<count($aColumns) ; $i++) 
{ 
    if (isset($_GET['bSearchable_'.$i]) && $_GET['bSearchable_'.$i] == "true" && $_GET['sSearch_'.$i] != '') 
    { 
     if ($sWhere == "") 
     { 
      $sWhere = "WHERE "; 
     } 
     else 
     { 
      $sWhere .= " AND "; 
     } 
     $sWhere .= "`".$aColumns[$i]."` LIKE '%".mysql_real_escape_string($_GET['sSearch_'.$i])."%' "; 
    } 
} 

цель здесь, чтобы убедиться, что пользователь видит только данные, связанные с его компанией (даже при использовании встроенного поиска фильтрации):

WHERE company = '$_SESSION['company']' 

T он собирается жить в прямом смысле этого слова, поэтому мне очень нужна помощь! Можно ли это сделать? И как?

+0

у вас есть session_start (директива) на странице, которая делает использование переменных $ _SESSION? Также вы можете повторить свое окончательное заявление запроса $ sWhere и посмотреть, что вы там получаете? – Maximus2012

+0

Я действительно! view-reports-test.php включает session_start() в верхней части страницы и инициализирует $ _SESSION ['company'] и некоторые другие. Если я выхожу из нашей $ _SESSION ['company'] в view-reports-test.php, я получаю правильный вывод. –

+0

Я не уверен, где эхо $ sWhere и получить какие-либо результаты ... Я пробовал на view-reports-test.php и на server_processing.php, но я не нахожу вывод ... –

ответ

0

Благодарим вас за @ Maximus2012 за то, что пропустили меня через этот! Ответ прост:

Позвоните session_start(); в верхней части страницы server_processing.php!

Для фильтрации для конкретного сеанса, я установить конкретный пользователь переменного ниже начала сессии:

$userCompany = $_SESSION['company']; 

, а затем назвал переменный в фильтрующей части коды путем изменения первого:

$sWhere = ""; 

в

$sWhere = "WHERE company = '".$userCompany."'"; 

Наконец, чтобы убедиться, что фильтр поиска не получил Arou й начальный фильтр, я изменил

$sWhere .= ')'; 

к

$sWhere .= ") AND company = '".$userCompany."'";