Ir para conteúdo
unset

Como filtrar a superglobal $_SERVER['REQUEST_METHOD'] da melhor forma ao enviar id de formulário ?

Recommended Posts

Olá a todos, estou com uma dúvida se alguém puder me ajudar.

 

Qual seria a melhor forma de filtrar e como filtrar $_SERVER['REQUEST_METHOD']?

 

Tenho um formulário simples

<form action="deletar/10" method="post">
	<input type="submit" class="btn  btn-sm btn-danger" value="Deletar">
</form>

Então recebo o id 10, ai como eu poderia validar esse formulário tendo certeza que ele veio pelo método post do meu servidor aplicando esse ou outro filtro ou método mais eficiente?

 

Exemplo sem sucesso

<?php
public function deletar($id) {
        
        $id = filter_var($id, FILTER_VALIDATE_INT);
        $metodo = filter_var($_SERVER['REQUEST_METHOD'], FILTER_DEFAULT);
        
        if(isset($id) && isset($metodo)):
            echo 'pode salvar os dados';
        endif;
        echo '<hr>';
        var_dump($id);
        echo '<hr>';
        var_dump($metodo);
    }
?>

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
Se seu aplicativo precisar reagir a pedido do tipo post, use o seguinte:
if(strtoupper($_SERVER['REQUEST_METHOD']) === 'POST') { // if form submitted with post method
    // validate request, 
    // manage post request differently, 
    // log or don't log request,
    // redirect to avoid resubmition on F5 etc
}

 

Compartilhar este post


Link para o post
Compartilhar em outros sites
3 horas atrás, Williams Duarte disse:

Se seu aplicativo precisar reagir a pedido do tipo post, use o seguinte:

if(strtoupper($_SERVER['REQUEST_METHOD']) === 'POST') { // if form submitted with post method
    // validate request, 
    // manage post request differently, 
    // log or don't log request,
    // redirect to avoid resubmition on F5 etc
}

Obg por responder, no entanto continuo com dúvida, é possível aplicar um filtro em $_SERVER['REQUEST_METHOD'] ? O NetBeans me da um alerta dizendo para não acessar superglobais diretamente saberia dizer por que nesse caso?

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Melhor ler a própria documentação para entender sobre os Linters, especificamente no Netbeans, particularmente prefiro o xDebug.

 

E linteres, só uso Eslint para javascript, e xDebug no PhpStorm, porque além de depurar o código corrige com as melhores práticas. Não fica só apontando tipo o VsCode com o Typescript. Tempos atrás era deste jeito, aponta os erros e você tem que se virar pra descobrir os types que a comunidade já tinha criado. Não sei agora com a evolução da linguagem.

 

Abaixo uma forma de resolver seu problema com o Netbeans.

 

https://stackoverflow.com/questions/19767894/warning-do-not-access-superglobal-post-array-directly-on-netbeans-7-4-for-ph

Compartilhar este post


Link para o post
Compartilhar em outros sites

O alerta que o netbeans aplica sobre super globais é pelo fato que você pode erroneamente alterar um valor que possivelmente não era para ser ou não deveria ser alterado.

Exemplo:

<?php
$_POST['alguma_coisa'] = true;
var_dump($_POST);

Digamos que o arquivo não recebeu dados de um formulário logo a Super Global POST não deveria existir, mas eu criei um índice. O que pode gerar confusão no tratamento de dados.

Ou no pior dos cenários:

<?php
$_SERVER['REQUEST_METHOD']['PATH'] = 'ferrei com meu servidor ^.^'; // Nunca faça isso!!!!

Portanto a melhor alternativa é nunca acessar diretamente, a não ser que saiba exatamente o que está fazendo.

 

 

20 horas atrás, unset disse:

Qual seria a melhor forma de filtrar e como filtrar $_SERVER['REQUEST_METHOD']?

Eu pessoalmente optaria assim:

<?php
$filtro = filter_input_array(INPUT_SERVER, FILTER_DEFAULT);
echo $filtro['REQUEST_METHOD'];

echo '<pre>';
var_dump($filtro);
echo '</pre>';

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora

  • Conteúdo Similar

    • Por Luiz Henrique
      Olá pessoas,
       
      Tenho uma classe e dentro dela várias chamadas para métodos de acordo com a necessidade em outra classe (para obter dados DB), como são muitas e vou duplicar os arquivos, para ganhar tempo queria colocar o nome da classe em uma variável porém não funciona.
       
      use Class1; class Class2 { public $className = 'Class1'; ... $dados = $this->className::function(); // não funciona } Era para gerar isso:
      $dados = Class1::function();
      Se eu der um echo $this->$className, ele me retorno o nome da Class1 porém para executar um método dentro da Class1 não vai, diz que a classe Class1 não existe!
      Tem alguma forma de funcionar isso?
       
      Obrigado.
    • Por asacap1000
      Galera me foi solicitado a criação de um servidor web, para disponibilizar serviços para os clientes. O que vocês recomendam?
      Tenho um servidor da DELL com windows 2016. Todo o desenvolvimento será em PHP, Javascript e companhia Ltda com conexão aos bancos de dados Mysql, SQL e ORACLE.
      Já temos um servidor que será desativado porém está utilizando uma versão muito antiga de PHP 5.4 e como base de instalação foi utilizado o WampServer. 
    • Por asacap1000
      Galera me foi solicitado a criação de um servidor web, para disponibilizar serviços para os clientes. O que vocês recomendam?
      Tenho um servidor da DELL com windows 2016. Todo o desenvolvimento será em PHP, Javascript e companhia Ltda com conexão aos bancos de dados Mysql, SQL e ORACLE.
      Já temos um servidor que será desativado porém está utilizando uma versão muito antiga de PHP 5.4 e como base de instalação foi utilizado o WampServer. 
    • Por clodoaldofc
      Boa tarde, pessoal!
      Sou novato em php .... venho do Lazarus;
      Estou tendo dificuldades em corrigir/converter esta função para o php 7.
      No php 5.6 este sistema funciona normalmente, porem quando esta no php 7 me retorna o erro : Uncaught Error: Cannot use object of type stdClass as array in 
      justamente na linha if (isset(this->db->data[0])) { $this->map($this->db->data[a]); } return $this->db->data;

      Se alguem puder me ajudar e se não for pedir muito, corrigir esta função pra eu ter como exemplo, agradeço.
       
          public function select($table, $where = '', $fields = '*', $order = '', $parametro = null, $limit = null) {           $this->db->query('SELECT ' . $fields . ' FROM ' . $table                 . (($where) ? ' WHERE ' . $where : '')                 . (($parametro) ? '  ' . $parametro : '')                 . (($order) ? ' ORDER BY ' . $order : '')                 . (($limit) ? ' LIMIT ' . $limit : ''))->fetchAll();           if (isset($this->db->data[0])) {             $this->map($this->db->data[0]);         }         return $this->db->data;
    • Por Fabio Carpi
      Hoje eu uso o try/catch na minha classe, mas ele não pega os warning...
      Eu já tentei o set_error_handler, mas ai ele pega os erros de todo o site...
×

Informação importante

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