2014-05-23 2 views
0

J'ai remarqué que je peux utiliser $_GET dans une requête POST, pourquoi est-ce possible?

formulaire HTML:

<form method="POST" action="test.php?id=123"> 
    <input type="text" name="foo"> 
    <input type="submit"> 
</form> 

test.php:

<?php 
var_dump($_GET, $_POST); 

Sortie:

array (size=1) 
    'id' => string '123' (length=3) 

array (size=1) 
    'foo' => string 'bar' (length=3) 

Répondre

1

Contrairement à ce qui est suggéré par leur nom, et $_GET$_POST ne sont pas liés aux méthodes GET et POST de la H Spécification TTP. La chaîne de requête (qui est représentée comme un tableau associatif dans la variable $_GET de PHP) peut faire partie de n'importe quelle URL, que vous fassiez un GET, POST, PUT ou toute autre méthode sur cette URL. Bien que les chaînes de requête soient le plus souvent utilisées avec les méthodes GET, elles ne s'y limitent certainement pas. Ainsi, lors de POST un formulaire à une URL qui contient une chaîne de requête (selon l'exemple), les clés et les valeurs de la chaîne de requête seront disponibles dans la variable $_GET.

$_QUERY_STRING aurait probablement été un meilleur nom pour cette variable.

Cela fonctionne un peu différemment dans l'autre sens. Bien que la méthode POST ne soit pas la seule à pouvoir contenir un corps (par exemple, une requête PUT peut également l'être), certains tests révèlent que $_POST ne contient des données que dans le cas d'une requête POST - elle est vide dans tous les autres cas.

PHP n'a pas de variable $_PUT à utiliser avec la requête PUT, probablement because browsers only support GET and POST requests pour la soumission de formulaire. Au lieu de cela, vous pouvez utiliser file_get_contents("php://input") pour lire à partir du flux entrant vers PHP, puis utilisez str_parse() pour charger les clés et valeurs comme un tableau associatif:

parse_str(file_get_contents("php://input"), $data); 
+3

Pourquoi avez-vous répondu à votre propre question comme ça? – OptimusCrime

+0

@OptimusCrime parce que je connaissais déjà la réponse, et je voulais le partager avec d'autres personnes;) [Voir Puis-je répondre à ma propre question?] (Https://stackoverflow.com/help/self-answer) –

+0

Mais .. . Cette question est déjà répondu plusieurs fois? – OptimusCrime

Questions connexes