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.
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.
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.
Superglobalne '$ _POST' jest zawsze ustawione i zawsze jest tablicą. – Arjan
@Arjan Dobry połów. Lepsze sformułowanie: "byłoby puste" –
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
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ć?
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ć.
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:
POST
, w przeciwieństwie do GET
, PUT
itpsubmit
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:
GET
, PUT
, etc.)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:
POST
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
@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 –
Są nieporównywalne , wykonują inną pracę – zerkms
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
@chris Thanx za informację, nie wiedziałem tego. Jestem całkiem nowym użytkownikiem php. – Madz