Como tratar $_POST com valor ''?
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]'";
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]'";
comentários (0)
suspender
Lista de Respostas:
05/11/2010 1:08pm
(~14 anos atrás)
(~14 anos atrás)
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'";
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'";
12/11/2010 10:28pm
(~14 anos atrás)
(~14 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:
Note que testei se o valor passado não é idêntico a '':
Pois se você fizer:
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.
$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.