No PHP 8 um filtro decimal vazio vira comparação com zero

[!NOTE] Resumo Executivo (DEV-2026-068): O reset da lista de clientes montava WHERE de faturamento igual a zero dos dois lados, sem ninguém ter digitado filtro. No PHP 8, converter null com ew_StrToFloat devolve 0, e 0 diferente de string vazia passa a ser verdadeiro.


🚨 O Desafio Técnico / Contexto

sac_clientelist.php?cmd=resetall gerava WHERE (ISNULL(Faturamento, 0) = 0 AND ISNULL(Faturamento, 0) = 0) ORDER BY NomeCli. SearchValue vinha de um GET ausente e SearchValue2 nem é carregado na lista: os dois eram null. Faturamento é ADO 131 (adNumeric), então ew_GetSearchSql chama ew_StrToFloat. Essa função devolve inteiro 0 para null. O teste antigo 0 <> “” descartava o campo vazio no PHP 5.6, porque lá 0 == “” é verdadeiro. No PHP 8.2 essa comparação é falsa, então 0 <> “” entra no SQL. O operador vazio vira “=” e a condição vira AND. Refatorar em sac_clienteinfo.php só troca [Faturamento] = por ISNULL(Faturamento, 0) =. Com o WHERE preenchido, o comando virava search e a sessão gravava SearchWhere. Um load seguinte, sem resetall, restaurava o filtro.


💡 Principais Lições Aprendidas & Descobertas

  • 💡 ew_StrToFloat(null) devolve 0. No PHP 8, 0 <> “” é verdadeiro. A conversão só pode rodar depois de recusar null e string vazia.
  • 💡 Digitar 0 ainda tem de gerar [Faturamento] = 0. O ISNULL é a busca real por zero, não a origem do filtro fantasma.
  • 💡 resetall limpa a sessão, mas o bug nascia de novo em AdvancedSearchWhere. O WHERE gravado só explica a página sem cmd=resetall.

🛠️ Especificação Técnica & Código-Chave

// phpfn9.php — ew_GetSearchSql, campo float/numeric
if (!is_null($FldVal) && $FldVal !== "")
    $FldVal = ew_StrToFloat($FldVal);
if (!is_null($FldVal2) && $FldVal2 !== "")
    $FldVal2 = ew_StrToFloat($FldVal2);

📈 Impacto no Ecossistema & Valor Prático

Reset da lista deixa de filtrar faturamento igual a zero quando os dois lados do campo estão vazios.

  • Projetos Relacionados: supervisor
  • Registro de Origem: _data/daily.dev-09.yml

Publicado originalmente como parte do Diário de Desenvolvimento 2026 do ecossistema Artes do Sul & Araguaci.