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.