Ir para conteúdo

Arquivado

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

rodrigo.dill

Atualizar e Excluir sem uso da $_GET

Recommended Posts

Twitter, Facebook e GitHub são ótimos exemplos

 

Respectivamente: Não uso, não uso e nunca fucei. :lol:

 

Mas ainda assim cai naquela de usar na API e não no site propriamente dito.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas ainda assim cai naquela de usar na API e não no site propriamente dito.

Como eu havia dito, por conta do browser reescrever o método.

 

Fiz um testezinho rápido aqui: http://oliveiraev.com:8001/~evandro/method.php

 

No Opera, tudo que não for POST vira GET. No curl, PUT e DELETE retornam 403 (como configurado) e HEAD não retorna nada (como esperado). GET, POST e OPTIONS vão OK.

Compartilhar este post


Link para o post
Compartilhar em outros sites

OPTIONS e HEAD não faz sentido o browser suportar, o PUT e DELETE podem ser requisitados via AJAX ou com a "gambiarrinha".

 

Não é nenhum sofrimento para fazer.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aqui no Chrome só o POST foi "respeitado". Todos os outros mostraram como GET.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

 

<?php

$_PUT = [];
$_DELETE = [];

switch ($_SERVER['REQUEST_METHOD']) {
    case 'PUT':
        parse_str(file_get_contents('php://input'), $_PUT);
        break;
    case 'DELETE':
        parse_str(file_get_contents('php://input'), $_DELETE);
        break;
}

 

 

Mas isso não são superglobais, você não pode usar em qualquer lugar.

__________________

 

No Firefox também apenas o POST é respeitado, o resto vira GET.

 

Edit:

Evandro, sério que você usa Opera? ehuehuehhuhe

Compartilhar este post


Link para o post
Compartilhar em outros sites

Foi um exemplo, e usar superglobal é uma má prática, o ideal é usarmos uma abstração de HTTP.

 

No Safari deu a mesma coisa, apenas POST respeitado, o resto é GET.

 

Mas uma questão que me bateu curiosidade: porque os malditos browsers não simplesmente respeitam os métodos?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas isso não são superglobais, você não pode usar em qualquer lugar.

Você pode usar a [inline]$_REQUEST[/inline]

Evandro, sério que você usa Opera? ehuehuehhuhe

Seríssimo

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pelo que sei, nenhum navegador suporta outro método senão POST e GET no <form>. Se outro método diferente for dado, será convertido em GET, por ser o método default. Isso foi uma decisão do W3C para o HTML4 e XHTML1. Nas especificações do HTML5, é citado também um método chamado 'dialog' (não está na spec do HTTP), que serviria para "indicating that submitting the form is intended to close the dialog box in which the form finds itself, if any, and otherwise not submit".

 

O métodos PUT, DELETE, etc. são suportados via XHR.

 

Então eu proponho o seguinte.

 

Use um campo extra para indicar qual a ação será realizada:

 

 

<input type="hidden" name="method" value="delete">

 

Use JavaScript para capturar o evento de submeter o formulário e envie o formulário via XHR usando o método indicado no campo "method" e remova esse campo.



Refs:

http://www.whatwg.org/specs/web-apps/current-work/multipage/association-of-controls-and-forms.html#attr-fs-method

http://www.w3.org/TR/html401/interact/forms.html#adef-method

Compartilhar este post


Link para o post
Compartilhar em outros sites

Foi um exemplo, e usar superglobal é uma má prática, o ideal é usarmos uma abstração de HTTP.

Eu não uso, mas 90% dos "programadores" PHP usam =P.

 

Vou fazer uns testes aqui brincando com esses métodos via ajax e posto resultados.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Feriado de programador é só alegria :lol:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tá, vamos lá, qual motivo ?

 

Essa eu sei responder:

Nego acha que só porque não está na URL do navegador, não tem como o cara saber o que ele está enviando na requisição HTTP.

Qualquer um que já usou o inspetor de rede do Firebug ou do Chrome entende que tanto faz, GET ou POST, é fácil ver o que será enviado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Feriado só aí no Brasil, eu tenho 3 provas na próxima semana... ehuhehehueheuh

 

Esqueci que o Sr. é chique. :P

 

Essa eu sei responder:

Nego acha que só porque não está na URL do navegador, não tem como o cara saber o que ele está enviando na requisição HTTP.

Qualquer um que já usou o inspetor de rede do Firebug ou do Chrome entende que tanto faz, GET ou POST, é fácil ver o que será enviado.

 

Pior...

 

O Firebug até exige um pouquinho mais de conhecimento porque tem que instalar uma extensão à parte. O Chrome é nativo. Até se o cara esbarrar no F12 ele vai ficar curioso e fuçar nas opções.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Esqueci que o Sr. é chique. :P

 

 

Pior...

 

O Firebug até exige um pouquinho mais de conhecimento porque tem que instalar uma extensão à parte. O Chrome é nativo. Até se o cara esbarrar no F12 ele vai ficar curioso e fuçar nas opções.

 

Errado, o povo daqui fala que você está com vírus se abrir algo que eles não conhecem.

However, ainda assim ... é FRESCURA de mais e um custo benefício péssimo pra quem envia um AJAX só pra usar um 'DELETE', sendo que o resultado final será o MESMO que usando GET.

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.