Jump to content
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);
    }
?>

 

Share this post


Link to post
Share on other 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
}

 

Share this post


Link to post
Share on other 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?

 

Share this post


Link to post
Share on other 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

Share this post


Link to post
Share on other 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>';

 

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By 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.
    • By 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. 
    • By 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. 
    • By 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;
    • By 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...
×

Important Information

Ao usar o fórum, você concorda com nossos Terms of Use.