$_POST contre $_SERVER['REQUEST_METHOD'] == 'POST'
Certains gars qui s'appelle un de mes Snipplr mémoires "de la merde" parce que j'ai utilisé if ($_SERVER['REQUEST_METHOD'] == 'POST')
au lieu de if ($_POST)
La vérification de la demande de la méthode semble plus correct pour moi parce que c'est ce que je veux vraiment faire. Est-il opérationnel différence entre les deux ou est-ce juste un code de clarté problème?
- Dire que le gars il suce.
- surtout depuis que <gnud> le mentionne dans sa réponse, ils ne sont pas les mêmes et ($POST) est une sorte de "hack" dans votre vérifier si un tableau, qui seulement se présenter lors d'une requête POST, existe. Aussi à la demande de la méthode peut être utilisée dans d'autres cas, comme vous.
- Vous devez utiliser
===
au lieu de==
ici comme0 == 'POST'
. - $_SERVER["REQUEST_METHOD"] peut contenir des "POST" pour les requêtes HTTP GET sur du PHP+Apache2 installations. Comme le mien. Et voilà comment je suis arrivé ici.
- Si c'est vrai (ce dont je ne crois pas qu'il est), c'est une grave bug grave. Pouvez-vous fournir un lien vers un PHP ou Apache rapport de bug? Étapes pour reproduire? Comme il est, je ne vous crois pas.
- Pourquoi
$_SERVER['REQUEST_METHOD']
jamais être le nombre0
? Pour autant que je sais, c'est impossible. - C'est une question de foi. Vraiment.
- Hmm première fois que j'ai jamais rencontré ce. Dernière équipe, j'ai travaillé sur
if ( $_POST )
tous sur la place (même s'ils ont été connus pour faire beaucoup de choses de manière incorrecte). Je suis content que vous posiez cette. Je suis juste 10 ans de retard, hah.
Vous devez vous connecter pour publier un commentaire.
Bien, ils ne font pas la même chose, vraiment.
$_SERVER['REQUEST_METHOD']
contient la méthode de la requête (surprise).$_POST
contient toutes les données post.Il est possible pour une requête POST pour ne pas contenir de données POST.
- Je vérifier la méthode de la requête — en fait, je ne pensais jamais que sur l'évaluation de la
$_POST
tableau. J'ai vérifier les post champs, cependant. Donc un vide post demande aurait pour effet de donner à l'utilisateur un grand nombre de messages d'erreur - qui fait sens pour moi.if ($_SERVER['REQUEST_METHOD'] == 'POST')
est la bonne façon, vous pouvez envoyer une requête post sans aucun post de données.J'ai utilisé pour vérifier
$_POST
jusqu'à ce que j'avais de la difficulté avec les plus grands publier des données et des fichiers téléchargés. Il y a des directives de configurationpost_max_size
etupload_max_filesize
- si l'un d'eux est dépassé,$_POST
tableau n'est pas renseigné.De sorte que le "de manière sûre" est de vérifier
$_SERVER['REQUEST_METHOD']
. Vous devez toujours utiliserisset()
sur chaque$_POST
variable, et il n'a pas d'importance, si vous pouvez cocher ou ne pas cocher$_SERVER['REQUEST_METHOD']
.Si votre application a besoin de réagir sur requête de type post, utilisez ceci:
Si votre application a besoin de réagir sur toutes les données reçues par le biais d'une requête post, utilisez ceci:
Elle est mise en œuvre spécifiques, mais vous allez utiliser les deux, + de $_FILES superglobale.
Vous pouvez remplir un formulaire en appuyant sur la touche entrée (c'est à dire sans en cliquant sur le bouton "soumettre") dans la plupart des navigateurs, mais cela ne signifie pas nécessairement envoyer présenter comme une variable de sorte qu'il est possible de soumettre un formulaire vide c'est à dire
$_POST
sera vide, mais la forme sera toujours ont généré une requête http post à la page php. Dans ce casif ($_SERVER['REQUEST_METHOD'] == 'POST')
est mieux.$_POST
ne serait pas vide: il serait un tableau avec des valeurs vides.Ils sont tous les deux corrects. Personnellement, je préfère votre meilleure approche pour sa verbosité, mais c'est vraiment vers le bas à la préférence personnelle.
La main, en cours d'exécution si($_POST) ne lancerait pas d'une erreur de l' $_POST tableau existe, peu importe si la demande a été envoyée avec POST-têtes. Un tableau vide est jeté à faux dans un boolean.
Il vérifie si la page a été appelée par la POSTE (par opposition à GET, HEAD, etc).
Lorsque vous tapez une URL dans la barre de menu, la page est appelée par OBTENIR. Toutefois, lorsque vous soumettez un formulaire avec method="post" action page est appelée avec la POSTE.
C'est vraiment un 6 de l'un, une demi-douzaine de l'autre situation.
Le seul argument contre votre approche est $_SERVER['REQUEST_METHOD'] == 'POST' ne peut pas être remplie sur certains serveurs web/configuration, alors que le $_POST tableau existera toujours dans PHP4/PHP5 (et si elle n'existe pas, vous avez plus de problèmes (-:)
Ils travaillent tous les deux de la même façon, mais
$_POST
doit être utilisé car il est plus propre. Vous pouvez ajouterisset()
afin de vérifier s'il existe.$_POST
existera toujours, mais il peut être vide (qui est converti en booléenfalse
). Et qu'entendez-vous par "plus propre"?