0

Como tratar $_POST com valor ''?

criado por Mateus da Silva Pessanha em 04/11/2010 5:29pm
Tenho uma query que pode receber de 1 até 3 valores de um formulário POST. Estou tendo problemas no tratamento do valor ''.
Segue abaixo minha query.

$sql = "SELECT A.nome_acao, B.cod_job, B.cod_remessa, B.dt_previsao, B.cod_mailing
FROM tb_jobs A, tb_mailing_prev B
WHERE A.cod_job = B.cod_job
AND B.cod_mailing <> ''
AND B.status = 0
AND B.cod_remessa = '$_POST[mailing_prev]'
AND A.cod_job = '$_POST[job]'
AND B.cod_mailing = '$_POST[$mailing]'";

Lista de Respostas:

0
05/11/2010 1:08pm
(~13 anos atrás)
BOZO respondeu:
Não jogue as variaveis POST diretamente na sql.

Faça a verificação antes, ex:


$mailing_prev = ($_POST["mailing_prev"]) ? $_POST["mailing_prev"] : "VALOR QUALQUER";
$_POST[job]
$job = ($_POST["job"]) ? $_POST["job"] : "VALOR QUALQUER";
$mailing = ($_POST["mailing"]) ? $_POST["mailing"] : "VALOR QUALQUER";


$sql = "SELECT A.nome_acao, B.cod_job, B.cod_remessa, B.dt_previsao, B.cod_mailing
FROM tb_jobs A, tb_mailing_prev B
WHERE A.cod_job = B.cod_job
AND B.cod_mailing <> ''
AND B.status = 0
AND B.cod_remessa = 'mailing_prev'
AND A.cod_job = '$job'
AND B.cod_mailing = '$$mailing'";

0
12/11/2010 10:28pm
(~13 anos atrás)
Mateus, se entendi direito, você pretende utilizar os de 1 a 3 campos no SELECT, dependendo do que o usuário preencheu. Para isso você pode colocar as condições a serem agrupadas com "AND" em um vetor, depois fazer um implode delas desse jeito:

$vt_condicoes = array();

$mailing_prev = trim($_POST['mailing_prev']);
$cod_job      = trim($_POST['job']);
$cod_mailing  = trim($_POST['mailing']);

// Checar quais parametros foram usados
if ($mailing_prev !== '') {
    $mailing_prev = $db->quote($mailing_prev); // Escapar para evitar Injection
    $vt_condicoes[] = "B.cod_remessa = '{$mailing_prev}'";
}
if ($cod_job !== '') {
    $cod_job = $db->quote($cod_job); // Escapar para evitar Injection
    $vt_condicoes[] = "B.cod_job = '{$cod_job}'";
}
if ($cod_mailing !== '') {
    $cod_mailing = $db->quote($cod_mailing); // Escapar para evitar Injection
    $vt_condicoes[] = "B.cod_mailing = '{$cod_mailing}'";
}

// Se nao preencheu nenhum dos 3 campos
if (empty($vt_condicoes)) {
    // O que fazer se nao preencheu nenhum dos 3 campos?
    return false;
}

// Juntar as condicoes com AND
$condicoes = implode(' AND ', $vt_condicoes);

// Montar a SQL
$sql = <<<SQL
SELECT
  A.nome_acao, B.cod_job, B.cod_remessa, B.dt_previsao, B.cod_mailing
FROM
  tb_jobs A INNER JOIN tb_mailing_prev B ON (A.cod_job = B.cod_job)
WHERE
  B.status = 0 AND {$condicoes}
SQL;

...

Note que testei se o valor passado não é idêntico a '':
if ($mailing_prev !== '') {

Pois se você fizer:
if (!$mailing_prev) {

O PHP vai interpretar "0" como false, e não vai entrar no IF. Se você quer considerar "0" como false, então tem que usar esta segunda alternativa.

Nova Resposta:

(Você pode usar tags como <b>, <i> ou <code>. URLs serão convertidas para links automaticamente.)