2012-06-08 11 views
14

mam natknąć skryptów, które używają:

isset($_POST['submit']) 

jak również kod, który używa:

$_SERVER['REQUEST_METHOD']=='POST' 

Zastanawiam się, różnica między tymi dwoma i która metoda jest najlepsza.

+3

Są nieporównywalne , wykonują inną pracę – zerkms

+3

Sprawdzanie istnienia '$ _POST ['submit']', w tutaj 'submit' jest nazwą przycisku' type = submit name = submit', jest jednym z najczęstszych (i lame) nawyków, które działają szeroko wśród koderów php. Twój kod kończy się niepowodzeniem, gdy użytkownik przesyła formularz za pomocą klawisza Enter w sporej części wspólnej bazy przeglądarki. Nie rób tego, to jest bardzo amatorskie. – goat

+0

@chris Thanx za informację, nie wiedziałem tego. Jestem całkiem nowym użytkownikiem php. – Madz

Odpowiedz

4

To oznacza dwie różne rzeczy. Pierwszy, sprawdza, czy po przesłaniu formularza został przekazany parametr: submit. Wiele osób korzysta z tego fragmentu, aby sprawdzić, czy formularz został wysłany. Działa to, ponieważ przycisk przesyłania jest technicznie <input>, więc jego wartość jest wysyłana wraz z innymi elementami, które były częścią formularza.

<?php 
    if(isset($_POST['submit'])) { // This way form and form logic can be adjacent to each other 
     // Logic 
    } 
?> 
<form method='POST' action='<?= $_SERVER['REQUEST_URI'] ?>'> 
    <!--- other form stuff --> 
    <input type="submit" name="submit" value="Send!" /> 
</form> 

Drugi snippet sprawdza, czy formularz został przesłany metodą POST. Nie musi to oznaczać, że przycisk formularza został naciśnięty. Jeśli nie został przesłany z POST, superglobalny $_POST będzie pusty.

+2

Superglobalne '$ _POST' jest zawsze ustawione i zawsze jest tablicą. – Arjan

+0

@Arjan Dobry połów. Lepsze sformułowanie: "byłoby puste" –

+0

Popraw mnie, jeśli się mylę, ale jeśli metoda formularza jest POST, czy jedynym sposobem, aby $ _POST byłaby pusta, byłby przycisk nie został naciśnięty? – Madz

4

Robią różne rzeczy.

Pierwsza sprawdza, czy jest ustawiony klucz (submit) w tablicy $_POST.

Druga sprawdza, czy wartość klucza w tablicy $_SERVER to 'POST'. Sądzę, że można by użyć tego do określenia, czy dane zostały wysłane za pomocą metody "get" lub "post", ale zwykle nie obchodzi cię tylko, jaka metoda została użyta, ale raczej, jakie dane zostały wysłane.

Co próbujesz zrobić?

0

Pierwsza instrukcja sprawdza, czy metoda żądania była Post i czy żądanie zawierało wartość dla elementu submit. Druga metoda sprawdza tylko, czy metoda żądania to Post.

Aby sprawdzić, czy formularz został wysłany, drugi jest lepszy w tym sensie, że jest nieco jaśniejszy, wykonując tylko jedno i jedno. Jednak nie przejmowałbym się zbytnio tym, którego użyć.

6
isset($_POST['submit']) 

Jeśli już wiesz, że dana wartość będzie zawsze być wysyłane i dlatego jest wskaźnikiem oczekiwanego złożenia formularza (pole submit w tym przypadku) to kod powie ci dwie rzeczy:

  1. postać poddaje metodą POST, w przeciwieństwie do GET, PUT itp
  2. pole submit została przekazana.

$_SERVER['REQUEST_METHOD'] == 'POST' 

Mówi dokładnie jedno, formularz został złożony metodą POST.Powodów, aby go używać to:

  • Chcesz odróżnić składania nieprawidłowa forma (np nie wszystkie pola zostały przekazane) oraz inne rodzaje pobierania strony (GET, PUT, etc.)
  • ty nie dokładnie wiedzieć, co otrzymasz. Być może ten kod jest uruchamiany w kontrolerze, który nie zna wszystkich szczegółów jego części zależnych.

Były to

if ($_SERVER['REQUEST_METHOD'] == 'POST') { 
    if (!isset($_POST['name'])) { 
     // at this point you know that `name` was not passed as part of the request 
     // this could be treated as an error 
    } 
} 

Versus:

if (!isset($_POST['name'])) { 
    // the `name` field was not passed as part of the request 
    // but it might also be a GET request, in which case a page should be shown 
} 

Ważne

Sprawdzanie polu przycisk Wyślij w żądaniu nie jest wiarygodny jako forma może być złożone w inny sposób (np. naciśnięcie klawisza Enter w polu tekstowym).


$_POST 

tylko przy użyciu tego wyrażenia można stwierdzić, że:

  1. formularz jest przesyłany poprzez POST
  2. Przynajmniej jedno pole zostało złożone
+1

Nie zaznaczaj przycisków przesyłania, aby wykryć przesłanie formularza. Nie powiedzie się, gdy użytkownicy przesyłają formularz za pomocą klawisza Enter (w niektórych przeglądarkach) i niektórych metod przesyłania formularzy javascript. Jest to bardzo denerwujące dla użytkowników, gdy przesyłanie formularzy po cichu nie powiedzie się ... – goat

+0

@rambocoder w każdym przypadku, twój komentarz sprawił, że zmieniłem kilka rzeczy w mojej odpowiedzi, aby rozwiązać twój problem ... spójrz na pls –