Mam formularz na jednej stronie, który przesyła się na inną stronę. Tam sprawdza, czy wiadomość wejściowa jest wypełniona. Jeśli tak, zrób coś, a jeśli nie jest wypełnione, zrób coś innego. Nie rozumiem, dlaczego zawsze mówi, że jest ustawione, nawet jeśli wysyłam pusty formularz. Czego brakuje lub czego nie tak?
step2.php:
<form name="new user" method="post" action="step2_check.php">
<input type="text" name="mail"/> <br />
<input type="password" name="password"/><br />
<input type="submit" value="continue"/>
</form>
step2_check:
if (isset($_POST["mail"])) {
echo "Yes, mail is set";
} else {
echo "N0, mail is not set";
}
Odpowiedzi:
Większość danych wejściowych formularza jest zawsze ustawionych, nawet jeśli nie są wypełnione, więc musisz również sprawdzić, czy nie ma pustki.
Ponieważ
!empty()
sprawdza już oba, możesz użyć tego:źródło
!
operatora w takich przypadkach (łatwiejszy do odczytania, mniejsze prawdopodobieństwo błędu itp.) I odwrócić logikę ...if (empty()) {/* No */} else {/* Yes */}
Użyj
!empty
zamiastisset
. isset zwraca prawdę dla,$_POST
ponieważ$_POST
tablica jest superglobalna i zawsze istnieje (ustawiona).Lub lepiej użyć
$_SERVER['REQUEST_METHOD'] == 'POST'
źródło
isset
i!empty
zapobiegają błędom. EDYCJA: Ups, najwyraźniej$_SERVER['REQUEST_METHOD']
zapewnia, że użytkownik przesłał formularz.$_POST
może być pusty nawet w tym przypadku. Zastanów się nad tym formularzem<form method="post"></form>
:, przesłanie go nie wyśle nic do akcji, ale typ żądania będziepost
. Albo można to zrobić z dyni:curl -X POST http://example.com/processor.php
. Jeśli procesor zawiera kod taki jakecho $_SERVER['REQUEST_METHOD']. ' '.var_export(empty($_POST),1);
, zobaczyszPOST true
Z php.net , isset
pusta przestrzeń jest uważana za zestaw. Musisz użyć pustej (), aby sprawdzić wszystkie opcje null.
źródło
Jeśli wyślesz formularz pusty, $ _POST ['mail'] będzie nadal wysyłany, ale wartość jest pusta. Aby sprawdzić, czy pole jest puste, musisz to sprawdzić
źródło
Dodaj następujący atrybut do postaci tekstu wejściowego:
required="required"
. Brak wypełnienia formularza uniemożliwi użytkownikowi przesłanie formularza.Twój nowy kod będzie:
źródło
Możesz po prostu użyć:
Alternatywnie użyj pustego ()
źródło
@
, np@$_POST['username']
. : . Dziękuję, że to zauważyłeś.Użyj
!empty()
zamiastisset()
. Ponieważisset()
zawsze zwróci prawdę w Twoim przypadku.źródło
Może możesz spróbować tego:
źródło
źródło
Pomyślmy, że to jest twój formularz HTML w step2.php
Myślę, że potrzebujesz go do swojej bazy danych, więc możesz przypisać wartość formularza HTML do zmiennej php, teraz możesz użyć prawdziwego ciągu ucieczki, a poniżej musi być twój
Gdzie $ db to połączenie z bazą danych.
źródło
Sprawdź, czy FORMULARZ został przesłany jako pierwszy, a następnie pole. Powinieneś także oczyścić pole, aby zapobiec hakerom.
step2_check:
źródło
Aby odpowiedzieć na zadane pytanie: isset and empty razem podaje trzy warunki. Może być również używany przez Javascript z poleceniem Ajax.
źródło
Możesz spróbować tego:
źródło
źródło
Możesz spróbować,
źródło