Pergunta

Vamos dizer que eu tenho uma página chamada display.php eo usuário está vendo display.php?page=3. Quero permitir que o usuário a fazer uma ação como a votação através de uma solicitação POST e, em seguida, trazê-los de volta para a página que eles estavam. Assim, Se eu fizer um pedido POST para display.php?page=3 que as informações da página também estará disponível para o script?

Foi útil?

Solução

A resposta simples é 'sim'. Você pode usar uma URL de estilo GET como o URL de envio para um formulário POST. PHP terá tanto o POST e informações GET à sua disposição nas formas usuais quando o formulário é enviado.

Isto não quer dizer que você deve fazer isso, mas vai funcionar.

Outras dicas

Em PHP, você pode obter variáveis ??de solicitação das matrizes globais especiais:

$_GET['page'] (for GET requests)
$_POST['page'] (for POST requests)
$_REQUEST['page'] (for either)

Parece que você está procurando "Redirect após Post", gostaria de sugerir que separa display.php e vote.php em arquivos separados. Votar é algo como isto:

<?php
//vote.php
$page_number = (int)$_REQUEST['page'];
vote_for_page($page_number); //your voting logic
header('Location: display.php?page=' . $page_number); //return to display.php

Note que aceitar cegamente os dados do formulário unsanitized podem ser perigosos para a sua aplicação.

Edit: Algumas pessoas consideram má forma de usar $ _REQUEST para lidar com ambos os casos. O perigo é que você pode querer sinalizar um erro se você receber um GET quando se espera um POST. Normalmente GET é reservado para visualização e POST é reservado para fazer alterações (criar / / operações de exclusão de atualização). Se este é realmente um problema depende da sua aplicação.

Sim, a matriz GET é sempre preenchido com os parâmetros de URL, independentemente do método de solicitação. Você pode experimentá-lo com uma página simples como isto:

<form action="test.php?a=b" method="post">
    <input name="a"/>
    <input type="submit"/>
</form>
<pre>
POST:
<?php print_r($_POST); ?>
GET:
<?php print_r($_GET); ?>
</pre>
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top