datatable: сделать серверный скрипт для фильтрации каждого столбца - PullRequest
0 голосов
/ 24 сентября 2010

Я хочу, чтобы моя таблица могла фильтроваться в каждом столбце. я получаю скрипт на стороне клиента от DataTable.net . Чтобы это работало, я должен внести изменения в сценарии на стороне сервера для этого. Мои поля таблицы: Линия, Имя модели, Версия, Лот, Серийный номер, Идентификационный номер, Номер_отчета_отряда и Дата_процесса.

Я пытался синхронизировать каждый столбец с этим серверным скриптом, но всегда получаю сообщение об ошибке. это следующий скрипт:

sSearch:
bEscapeRegex:true
sSearch_0:
bEscapeRegex_0:true
bSearchable_0:true
sSearch_1:
bEscapeRegex_1:true
bSearchable_1:true
sSearch_2:
bEscapeRegex_2:true
bSearchable_2:true   //data array same until sSearch_7

EDIT

а это запрос:

$sWhere = "";
if (postVar('sSearch') !="" )
{
  $sWhere = " WHERE Line LIKE '%".mysql_real_escape_string( $_POST['sSearch'] )."%'  ";
}
if (postVar('sSearch_0') !="")
{
  $sWhere = " AND Line LIKE '".mysql_real_escape_string( $_POST['sSearch_0'])."' ";
}
if (postVar('sSearch_1') !="") 
{ 
  $sWhere = " AND Model_name LIKE '%".mysql_real_escape_string( $_POST['sSearch_1'])."%' ";

// до sSearch_7

Я получаю сообщение об ошибке по этому запросу:

error: "Произошла ошибка во время выполнения запроса: (): у вас есть ошибка в вашем синтаксисе SQL; проверьте правильность синтаксиса в руководстве, соответствующем вашей версии сервера MySQL, рядом с 'AND Line LIKE' 2 'ORDER BY Название модели desc LIMIT 0, 10 'в строке 1 ";

Ответы [ 3 ]

1 голос
/ 24 сентября 2010

В вашем коде есть несколько ошибок:

  1. Я сомневаюсь, что "* LIKE" является допустимым синтаксисом SQL.Вы должны определить одно имя поля здесь.Если postVar ('sSearch') равняется "", вам также не удастся добавить "WHERE" к вашему запросу.

    if (postVar('sSearch') !="" )
    {
             $sWhere = " WHERE * LIKE '%".mysql_real_escape_string( $_POST['sSearch'] )."%'  ";
    }
    
  2. Вы пропустили закрывающий паратез после mysql_real_escape_string (..

    if (postVar('sSearch_0') !="")
    {
            $sWhere = " AND Line LIKE '%".mysql_real_escape_string( $_POST['sSearch_0']."%' ";
    }
    
1 голос
/ 24 сентября 2010

WHERE * LIKE неверно.

Вам необходимо указать правильное имя столбца вместо *

И синтаксическая ошибка PHP заключается в следующем:

$sWhere = " AND Line LIKE '%".mysql_real_escape_string( $_POST['sSearch_0']."%' ";

отсутствует ), чтобы закрыть mysql_real_escape_string function cal

0 голосов
/ 24 сентября 2010

Вы должны объединить свои запросы в цепочку.
пока вы заменяете $ sWhere каждым последующим условием.
Вы можете использовать конкатенацию (.= instead of =), но позвольте мне предложить использовать массив для этого:

$aWhere = array();
if (postVar('sSearch')) {
  $aWhere[] = "Line LIKE '%".mysql_real_escape_string( $_POST['sSearch'] )."%'";
}
if (postVar('sSearch_0'))
{
  $aWhere[] = "Line LIKE '".mysql_real_escape_string($_POST['sSearch_0'])."'";
}
if (postVar('sSearch_1')) 
{ 
  $aWhere = "Model_name LIKE '%".mysql_real_escape_string( $_POST['sSearch_1'])."%'";
}
//and so on
if (count($aWhere)) $where="WHERE ".implode(' AND ',$aWhere);
$query="select * from table $where";
mysql_query($query) or trigger_error(mysql_error().": ".$query);

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...