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

Olá gente!

 

Lá vou eu de novo...

 

É possível fazer uma atualização no banco de dados sem uso do GET para selecionar o registro? Tenho uma lista em que as últimas colunas são editar e exluir, respectivamente.

 

Eu não gostaria de fazer com GET por motivo de segurança. Estou errado? Opinem.

 

Com o método POST não estou conseguindo levar a variável de uma página para a outra do devido registro. Estou pesquisando faz uns 2 dias sobre o assunto e só tem tutoriais com GET.

 

Desde já obrigado.

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

ai na sua listagem vc tem criar um form, hidden e submit por linha. rs beeeeeem pratico.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

<form method="post" action="cadastro.php">
<input type="hidden" name="suaVariavel" value="<?php echo $suaVariavel; ?>">
</form>

Compartilhar este post


Link para o post
Compartilhar em outros sites

O problema é que cada método tem sua responsabilidade e fundamento, você não vai usar GET para criar e nem POST para recuperar.

 

Não é bem assim essa história de "segurança".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu NUNCA vi nenhuma aplicação deletar um registro usando DELETE, por exemplo.

 

Se a atualização for bem sucedida como que o usuário fica sabendo que foi bem sucedida, já que não há corpo de resposta? Redireciona, com um splash screen talvez?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Código de status + redirecionamento.

 

E sem DELETE, como vamos apagar algo? usando verbo na url :sick:.

 

PS: estou falando em nível de API, não em nível de GUI.

 

Mas vamos evitar entrar neste mérito neste tópico. O que deve ser deixado claro é que não é para usar POST em tudo porque post é "seguro".

Compartilhar este post


Link para o post
Compartilhar em outros sites

Dá pra usar DELETE com requsições Ajax sem problemas, mas não existe uma variável [inline]$_DELETE[/inline] no PHP, então você teria que obter o identificador do registro pela URI da requisição.

Se a atualização for bem sucedida como que o usuário fica sabendo que foi bem sucedida, já que não há corpo de resposta? Redireciona, com um splash screen talvez?

:seta: http://www.w3.org/Protocols/rfc2616/rfc2616-sec9.html#sec9.7

 

Aí basta verificar se o status de retorno é um desses de sucesso e redirecionar para o local desejado.

 

Se o redirecionamento não pode ser definido no lado do cliente, então o status 303 é o mais indicado. Ali no artigo fala sobre requisições POST, mas como DELETE e PUT também realizam ações no servidor, creio eu que não há problemas em utilizar também.

Compartilhar este post


Link para o post
Compartilhar em outros sites

 

Nossa, viajei legal, pensei que você tava falando de outra coisa totalmente diferente. Sorry! :pinch:

Pensei que você estava falando de transitar informações, sendo que ambos servem para isso entre páginas. Nunca pensei na aplicação GET serve apenas para recuperar e POST apenas para inserir, sendo que recupero os dados POST na outra página também. Enfim... viajei :innocent:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Utilize GET pois usar POST para "reforçar a segurança" não é uma boa justificativa para esse caso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nós podemos fazer isso para contornar o problema:

<?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;
}

 

:)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Aí basta verificar se o status de retorno é um desses de sucesso e redirecionar para o local desejado.

 

Se o redirecionamento não pode ser definido no lado do cliente, então o status 303 é o mais indicado. Ali no artigo fala sobre requisições POST, mas como DELETE e PUT também realizam ações no servidor, creio eu que não há problemas em utilizar também.

 

O ponto que eu perguntei é que nós programadores sabemos disso. Mas eu digo naquela camada mais básica formada pela massa dos usuários que se acham astronautas por usar o Google Earth. Como que eles vão saber que deu certo?

 

Imagina o usuário super leigo, que só sabe usar a GUI que o designer/programador caprichou pra ficar bem fácil. Ele vai, faz uma busca, encontra um registro clica pra deletar e se tudo funciona direitinho. Mas como ele não viu nada dizendo "Deu certo, otário" ele vai e reclama com o desenvolvedor ou o suporte.

 

Sacou?

 

Normalmente é definida uma variável de template dizendo que deu certo ou errado e renderizada uma View mostrando essa variável, dentro de uma caixinha vermelha ou verde bonitinha pra rico burro entender.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Mas para a GUI se usa GET mesmo, o normal de um recurso RESTful é esse:

 

GET     /users     - Recupera todos os usuários; response em HTML, XML, JSON, etc.
GET     /users/:id - Recupera um usuário; response em HTML, XML, JSON, etc.
POST    /users     - Cria um usuário
PUT     /users/:id - Atualiza um usuário
DELETE  /users     - Apaga todos os usuários (pouco comum)
DELETE  /users/:id - Apaga um usuário
OPTIONS /users     - Documentação do recurso (pouco comum, mas muito útil)

GET /users/create/:id - Formulário bonitinho para criar
GET /users/update/:id - Formulário bonitinho para atualizar
GET /users/delete/:id - Formulário bonitinho para deletar (não é muito comum já que podemos colocar um link simples para a remoção na lista)

E se não quiser ajax, existe uma gambiarra de sobrescrever o método passando-o como um parâmetro na query string ou como um input="hidden" nos formulários.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Nessas horas que eu acho interessante de remover a responsabilidade dessas decisões das costas do Controller delegando para uma API própria mas à parte.da aplicação.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Eu não gostaria de fazer com GET por motivo de segurança. Estou errado? Opinem.

Está errado sim.

 

Eu NUNCA vi nenhuma aplicação deletar um registro usando DELETE, por exemplo.

Twitter, Facebook e GitHub são ótimos exemplos

Se a atualização for bem sucedida como que o usuário fica sabendo que foi bem sucedida, já que não há corpo de resposta? Redireciona, com um splash screen talvez?

Response status. Em HTML, não sei de nenhum browser que não reescreva DELETE e PUT para POST/GET. Supondo que você vá utilizar AJAX ou sua própria implementação (CURL que seja), você pode conferir o response status da requisição e informar ao usuotário

 

Dá pra usar DELETE com requsições Ajax sem problemas, mas não existe uma variável [inline]$_DELETE[/inline] no PHP, então você teria que obter o identificador do registro pela URI da requisição.

$_SERVER['REQUEST_METHOD']

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.