$ _GET无法处理特定变量

时间:2017-03-01 16:22:00

标签: php get

我正在处理一个从链接获取参数的php文件。所说的链接是

http://www.page.com/faltantes.php?filProveedor%5B%5D=Test&filProveedor%5B%5D=TEST1&filProveedor%5B%5D=TEST11&filProveedor%5B%5D=TEST12&filProveedor%5B%5D=TEST2&filProveedor%5B%5D=TEST3&filEstatus%5B%5D=ST&filEstatus%5B%5D=SC&filPaises%5B%5D=col&aceptar=Aceptar

程序需要获得三个参数才能在函数中使用它: filProveedor filEstatus filPaises

前两个参数没有问题,但第三个参数没有。以下是获取参数的代码:

if($_GET['cancelar'])
{
    $filProveedor = '';
    $filEstatus = 'SC';
    $filPais = '';
    $filGuia = '';
}else{
        $filProveedor = $_GET['filProveedor'];
        $filEstatus = $_GET['filEstatus'];
        $filPais = $_GET['filPaises'];
        $filGuia = $_GET['filGuia'];
    }

这些参数将用于以下功能:

function listadoFaltantes($filProveedor, $filEstatus, $filPais, $filGuia, $registroPorPagina,$pagina)
{
    conectar();
    //$consulta="SELECT * FROM articulos, estatus, ordenes, proveedor WHERE art_id_estatus = est_id AND art_pag = '0' AND art_id_orden = ord_id AND art_id_proveedor = pro_id_clave AND art_id_estatus != 'AP' AND  art_id_estatus != 'PA' AND art_id_estatus != 'LE' AND art_id_estatus != 'PB' AND  art_id_estatus != 'ER' AND art_id_estatus != 'RE' AND art_id_estatus != 'RO' AND  art_id_estatus != 'CF' AND art_id_estatus != 'CS'  AND art_id_estatus != 'EO'";
    $consulta="SELECT * 
                FROM articulos, estatus, ordenes, proveedor 
                WHERE art_id_estatus = est_id 
                AND art_id_orden = ord_id 
                AND art_id_proveedor = pro_id_clave 
                AND art_num_guia IS NULL  ";

    if($filProveedor != null)
    {
        $consulta.=" AND (";
        $num = count($filProveedor);
        for($i=0; $i <= $num; $i++)
        {
            $filProveedorId = $filProveedor[$i];
            if($i == 0 && $filProveedorId != null){$consulta.="art_id_proveedor='$filProveedorId'";}
            elseif($filProveedorId != null){$consulta.=" OR art_id_proveedor='$filProveedorId'";}
        }
        $consulta.=")";
    }   

    if($filEstatus != null)
    {
        $consulta.=" AND (";
        $num = count($filEstatus);
        for($i=0; $i <= $num; $i++)
        {
            $filEstatusId = $filEstatus[$i];
            if($i == 0 && $filEstatusId != null){$consulta.="art_id_estatus ='$filEstatusId'";}
            elseif($filEstatusId != null){$consulta.=" OR art_id_estatus ='$filEstatusId'";}
        }
        $consulta.=")";
    }

    echo "<script>console.log('$filPais');</script>";
    if($filPais != null){
        $consulta.=" AND (";
        $num = count($filPais);
        for($i = 0; $i <= $num; $i++){
            $filPaisId = $filPais[$i];
            echo "<script>console.log('$filPaisId');</script>";
            if($i == 0 && $filPaisId != null){$consulta.="pro_pais ='$filPaisId'";}
            elseif($filPaisId != null){$consulta.=" OR pro_pais ='$filPaisId'";}
        }
        $consulta.=")";
    }

    if ($filGuia == 'notNull') $consulta.=" AND art_num_guia IS NOT NULL";
    if ($filGuia == 'null') $consulta.=" AND art_num_guia IS NULL";

    //filtro
    $consulta.=" ORDER BY art_id_orden ASC";

    $inicio = ($pagina-1)*$registroPorPagina;
    $consulta .= " LIMIT $inicio , $registroPorPagina";
    $tabla = mysql_query($consulta);
    return $tabla;
}   

加载页面时,应考虑每个部分的所有可能参数。但是,当我第一次加载页面时,在我注释掉上述函数的 $ filPais 部分之前,没有显示任何内容。我告诉函数在控制台上写一下 $ filPais 的值是什么,它告诉我它什么都没有,或者是空字符串。

为什么?谢谢!

其他信息

print_r($_GET)的结果是

Array ( 
    [filProveedor] => Array ( 
                [0] => Test 
                [1] => TEST1 
                [2] => TEST11 
                [3] => TEST12 
                [4] => TEST2 
                [5] => TEST3 
            ) 
    [filEstatus] => Array ( 
                [0] => ST 
                [1] => SC 
            ) 
    [filPaises] => Array ( 
                [0] => col 
            ) 
    [aceptar] => Aceptar 
    )

1 个答案:

答案 0 :(得分:4)

%5B is '['
and %5D is ']'

所以这些$ _GET变量实际上是数组,即

$_GET['filProveedor'][];

和其他所有人一样

所以在这段代码中:

$filProveedor = $_GET['filProveedor'];
$filEstatus = $_GET['filEstatus'];
$filPais = $_GET['filPaises'];
$filGuia = $_GET['filGuia'];

$filProveedor已捕获$_GET['filProveedor'][]数组,因此您将一组数组传递给您的函数。

您需要将单个出现传递给现有函数或更改函数以将其参数作为数组处理

其他调试建议:

在脚本的第一行中执行

<?php
echo '<pre>' . print_r($_GET,1) . '</pre>';

如果您有可见性问题,请将其写入文件

<?php
file_put_contents('get_debug.txt', '<pre>' . print_r($_GET,1) . '</pre>');