2017-08-10 12 views
0

私は現在、作業中のシステムに対して作成したテーブルデータを動的にリストするためにdatatablesプラグインを使用しています。データテーブル検索の実行に失敗しました

現在、私はプラグインを十分に読んでいますが、使用するには多くの問題はありませんでしたが、今日は大きな問題に遭遇しました。特定のタイプの人々を一覧表示するデータテーブルを持つと、すべてがうまく動作し、私が示しているタイプ(この場合は1人の人)の情報が表示されますが、検索を行うときに、文字「M」の場合、データテーブルは、文字Mを含む表の人々の中にあるものをすべて自動的に探します。私は検索しましたが、その制限を維持する方法を見つけることができず、情報を表示する必要があります。検索。

情報を表示すると、検索を実行するために、次の方法の私が持っているコード:

//Ordenacion 
    if (isset($_GET['iSortCol_0'])) 
    { 
     $sOrder = "ORDER BY "; 
     for ($i=0 ; $i<intval($_GET['iSortingCols']) ; $i++) 
     { 
      if ($_GET[ 'bSortable_'.intval($_GET['iSortCol_'.$i]) ] == "true") 
      { 
       $sOrder .= $aColumnas[ intval($_GET['iSortCol_'.$i]) ]." 
       ".$_GET['sSortDir_'.$i] .", "; 
      } 
     } 

     $sOrder = substr_replace($sOrder, "", -2); 
     if ($sOrder == "ORDER BY") 
     { 
      $sOrder = ""; 
     } 
    } 

    //Filtracion 
    $sWhere = " WHERE s.id_tipo = 1"; 
    if ($_GET['sSearch'] != "") 
    { 
     $sWhere = "WHERE ("; 
     for ($i=0 ; $i<count($aColumnas) ; $i++) 
     { 
      $sWhere .= $aColumnas[$i]." LIKE '%".$_GET['sSearch']."%' OR "; 
     } 
     $sWhere = substr_replace($sWhere, "", -3); 
     $sWhere .= ')'; 
    } 

    // Filtrado de columna individual 
    for ($i=0 ; $i<count($aColumnas) ; $i++) 
    { 
     if ($_GET['bSearchable_'.$i] == "true" && $_GET['sSearch_'.$i] != '') 
     { 
      if ($sWhere == "") 
      { 
       $sWhere = "WHERE "; 
      } 
      else 
      { 
       $sWhere .= " AND "; 
      } 
      $sWhere .= $aColumnas[$i]." LIKE '%".$_GET['sSearch_'.$i]."%'"; 
     } 
    } 


    //Obtener datos para mostrar SQL queries 

    $sQuery = " 
    SELECT SQL_CALC_FOUND_ROWS ".str_replace(" , ", " ", implode(", ", $aColumnas))." 
    FROM personas p 
    INNER JOIN sesion s ON s.personas_cedula=p.cedula 
    $sWhere 
    $sOrder 
    $sLimit 
    "; 

    $rResult = $mysqli->query($sQuery); 


    /* Data set length after filtering */ 
    $sQuery = " 
    SELECT FOUND_ROWS() 
    "; 
    $rResultFilterTotal = $mysqli->query($sQuery); 
    $aResultFilterTotal = $rResultFilterTotal->fetch_array(); 
    $iFilteredTotal = $aResultFilterTotal[0]; 

    /* Total data set length */ 
    $sQuery = " 
    SELECT COUNT(".$sIndexColumn.") 
    FROM $sTabla 
    "; 
    $rResultTotal = $mysqli->query($sQuery); 
    $aResultTotal = $rResultTotal->fetch_array(); 
    $iTotal = $aResultTotal[0]; 

他のデータは示されてはならないので、私は、検索状況について少し心配に。たぶん何が起こっているのかなんて愚かなことかもしれませんが、本当に解決できません。だから私は助けを求めています。あなたがPersonTypeで宣言した

$sWhere = " WHERE s.id_tipo = 1"; 

+0

SQLインジェクションを防ぐために準備された文について学ぶ – Jens

+0

すべてのコードの**まずSQLインジェクションの脆弱性です** DATATABLE海を含むパラメータを送信rch文字列( 'sSearch')には、検索を許可したいすべての列イオンと共にこのパラメータを使用できます。 –

+0

しかし、それはsSearchに置くことができるので、検索ではsWhereパラメータに従ってそれを行います。 – rodrigo2324

答えて

0

今の片側にSQLインジェクションのリスクを置く、Person Typeにフィルタリングし、検索語としてMを使用するときは、正しい結果を取得していない理由はこれですフィルタ引数は、しかし、あなたは、検索文字列の値をチェック:

if ($_GET['sSearch'] != "") 

をそして、あなたが今しているので、にsWhere変数を上書き全くPersonTypeでのフィルタリングではない:私はPHPに慣れていないんだけど、私は、.=+=と同じである、すなわちを想定してい

$sWhere .= " AND ("; 

$sWhere = "WHERE ("; 

あなたがする必要がどのようなことはこれです$sWhere = $sWhere +

+0

hello @markpsmith。= ANDを検索するときにデータセットにこのエラーが表示されます。DataTables警告:table id = mitabla - 無効なJSON応答。このエラーの詳細については、http://datatables.net/tn/1を参照してください。<---このエラーは、よく書かれていないものまたはデータテーブルのコードにあるものがある場合に発生します。私がANDだけを置くと、1人の人が1つのタイプを持っていても別の名前を書くことができますが、それは人のデータベースに存在するためです。 – rodrigo2324

+0

あなたはタイプミスがないことを確認するためにクエリをデバッグする必要がありますそれはすべての文字列連結後です。 – markpsmith

関連する問題