无法执行数据表搜索

时间:2017-08-10 06:36:33

标签: php jquery mysql datatables

我目前正在使用datatables插件动态列出我为我正在处理的系统所做的表数据。

目前我已经阅读了足够的插件,并且我没有遇到很多问题,但今天我遇到了一个大问题。有一个数据表按特定类型列出人员,一切都很好,按我所指示的类型(在这种情况下是一个人)向我显示信息,但是在进行搜索时,通过放置字母“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];

我对搜索情况有点担心,因为不应该显示其他数据。也许这是愚蠢的事情,但我真的无法解决,这就是我寻求帮助的原因。

1 个答案:

答案 0 :(得分:0)

暂时将SQL注入风险放在一边,在Person Type上过滤并使用M作为搜索字词时,您无法获得正确结果的原因是:

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

您已声明PersonType过滤器参数,但之后检查搜索字符串中的值:

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

然后你覆盖 sWhere变量,所以你现在根本没有过滤PersonType:

$sWhere = "WHERE (";

您需要做的是:

$sWhere .=  " AND (";

我不熟悉PHP,但我假设.=+=相同,即$sWhere = $sWhere +