gpt4 book ai didi

php - 执行数据表搜索失败

转载 作者:行者123 更新时间:2023-11-29 18:31:58 24 4
gpt4 key购买 nike

我目前正在使用数据表插件来动态列出我为我正在使用的系统制作的表数据。

目前我已经阅读了足够多的插件,并且使用它没有遇到很多问题,但是今天我遇到了一个大问题。拥有一个按特定类型列出人员的数据表,一切都运行良好,按我指示的类型(在本例中为单个人)向我显示信息,但是令我惊讶的是,在进行搜索时,通过将字母“M”,数据表自动查找表内以字母 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];

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

最佳答案

暂时将 SQL 注入(inject)风险放在一边,在过滤 Person Type 并使用 M 作为搜索词时未获得正确结果的原因是这个:

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

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

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

然后您覆盖 sWhere 变量,因此您现在根本不再过滤 PersonType:

$sWhere = "WHERE (";

您需要做的是:

$sWhere .=  " AND (";

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

关于php - 执行数据表搜索失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45606165/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com