Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Wallace Maxters

Por que não usar extract($_POST)?

Recommended Posts

Essa é uma coisa que eu estava me questionando um dia desses:

"Por que não usar extract($_POST) ao invés de $nome = $_POST['nome']?".

 

Já vi vários tutorias pela internet a fora ensinando a fazer uma exaustiva lista de novas variáveis vindas do POST:

<?php
// normalmente se faz... //
$nome = $_POST['nome'];
$cidade = $_POST['cidade'];
$endereco = $_POST['endereco'];
 
echo $cidade;
 

 

 

Nesses casos,penso que para dar agilidade no desenvolvimento, deveria ser feito assim:

 
// considerando a entrada de dados via POST acima //
<?php
extract($_POST);
echo $cidade;

 

A questão é: Fazer isso é uma prática não recomendável? E, se não há contras, por que tanta gente ensina como no primeiro exemplo?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ambas as formas são ruins.

 

No mínimo, no mínimo, aconselho fazer:

$id = (int)$_POST['id'];
$nome = filter($_POST['nome']);

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hum... Acho que já tenho a resposta. O cara pode alterar o nome do input no formulário (usando a ferramenta de desenvolvimento do Google, por exemplo) ou forjar um POST (sei lá) e isso poderia embananar o código todo:

 

exemplo:

 

<?php$nome = 'um id vindo de uma sessão ou banco de dados'; extract($_POST); echo $nome;
 
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nenhum problema em utilizar assim:

<?php 

    $data = filter_input_array( INPUT_POST, [
        'nome' => FILTER_SANITIZE_STRING,
        'cidade' => FILTER_SANITIZE_STRING,
        'idade' => FILTER_SANITIZE_NUMBER_INT
    ]);
    
    extract( $data );
    // ...

Eu por exemplo, uso.

 

O problema do extract em uma variável global (sem uma especificação do que deve vir dela), é que alguém pode facilmente "bugar" seu código, pelo fato do extract sobrescrever as variáveis (isso depende da forma de uso do extract também)

 

Agora usar o extract em algo já filtrado e especificado (da forma que eu fiz acima), não tem problema nenhum!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ambas as formas são ruins.

 

No mínimo, no mínimo, aconselho fazer:

$id = (int)$_POST['id'];$nome = filter($_POST['nome']);

tinha pensado em algo como:

// Em casos de posts que já vem em um array, é só lançar a recursividade

array_walk_recursive($_POST, function(&$value, $key)
{
  $value = trim($value);
  $value = htmlspecialchars($value);	 
})

E por aí vai.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

tinha pensado em algo como:

// Em casos de posts que já vem em um array, é só lançar a recursividade

array_walk_recursive($_POST, function(&$value, $key)
{
$value = trim($value);
$value = htmlspecialchars($value);
})

E por aí vai.

 

Cara, isso é BESTEIRA!

Dá uma olhada na API filter ... não precisa de fazer o que você já tá fazendo, sendo que já tem basicamente os filtros essenciais pra isso nativamente.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Cara, isso é BESTEIRA!

Dá uma olhada na API filter ... não precisa de fazer o que você já tá fazendo, sendo que já tem basicamente os filtros essenciais pra isso nativamente.

Muito bom!!! Value mesmo!!!

 

Vou dar uma estudada nessas funções amanhã bem cedo. Afinal, segurança é muito importante!]

 

Vi um comentário lá no Manual ( "To note: filter_has_var() is a bit faster than isset()")

o filter_has_var() é mais rápido que o isset ou algo parecido.

 

Olha o trem querendo!!!

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.