Я использую 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 он собирается жить в прямом смысле этого слова, поэтому мне очень нужна помощь! Можно ли это сделать? И как?
у вас есть session_start (директива) на странице, которая делает использование переменных $ _SESSION? Также вы можете повторить свое окончательное заявление запроса $ sWhere и посмотреть, что вы там получаете? – Maximus2012
Я действительно! view-reports-test.php включает session_start() в верхней части страницы и инициализирует $ _SESSION ['company'] и некоторые другие. Если я выхожу из нашей $ _SESSION ['company'] в view-reports-test.php, я получаю правильный вывод. –
Я не уверен, где эхо $ sWhere и получить какие-либо результаты ... Я пробовал на view-reports-test.php и на server_processing.php, но я не нахожу вывод ... –