Próbuję sprawdzić, czy $ _POST istnieje, a jeśli tak, wydrukuj go w innym ciągu, jeśli nie, w ogóle nie drukuj.
coś takiego:
$fromPerson = '+from%3A'.$_POST['fromPerson'];
function fromPerson() {
if !($_POST['fromPerson']) {
print ''
} else {
print $fromPerson
};
}
$newString = fromPerson();
Każda pomoc byłaby świetna!
empty()
jest poprawny dla wyboru nr 1, ponieważ w php ciąg jest równoważny - i zwraca dla wszystkich wartości równoważnych fałszowi . Więc używając , kod pominie drukowanie, jeśli wartość to . Jeśli chcesz wykluczyć pusty ciąg, zobacz odpowiedź Augusta.'0'
false
empty()
true
empty
'0'
Wszyscy mówią, że używają isset () - co prawdopodobnie będzie dla ciebie działać.
Jednak ważne jest, aby zrozumieć różnicę między
$_POST['x'] = NULL;
i$_POST['x'] = '';
isset($_POST['x'])
zwrócifalse
w pierwszym przykładzie, ale zwrócitrue
w drugim, nawet jeśli próbujesz wydrukować którykolwiek z nich, oba zwróciłyby pustą wartość.Jeśli
$_POST
pochodzi z pola / formularza wprowadzonego przez użytkownika i pozostaje puste, WIERZĘ (nie jestem tego w 100% pewien), że wartość będzie wynosić „”, ale NIE NULL.Nawet jeśli to założenie jest niepoprawne (ktoś, proszę, popraw mnie, jeśli się mylę!), Powyższe nadal warto wiedzieć do wykorzystania w przyszłości.
źródło
empty()
jest tutaj poprawne, ponieważ w php ciąg jest równoważny - i zwraca dla wszystkich wartości równoważnych fałszowi . Więc używając , kod pominie drukowanie, jeśli wartość to .'0'
false
empty()
true
empty
'0'
Zaskoczony, że nie wspomniano
źródło
isset($_POST['fromPerson']
jesttrue
, chociażif($_SERVER['REQUEST_METHOD'] == 'POST'
jestfalse
. O ile nie ma takiej sytuacji, wystarczy tylkoisset...
część.fromPerson
może nie być obecny, ale POST może nadal istnieć. Pytanie brzmiało: „Jeśli $ _POST istnieje”. i tylko w przykładzie użyto $ _POST ['fromPerson']. W niektórych sytuacjach, jak opisuje @goat tutaj , nawet jeślifromPerson
była to nazwa przesyłania , może nie być obecna w POST.źródło
Właściwym sposobem sprawdzenia, czy klucz tablicy istnieje, jest funkcja
array_key_exists()
Różnica polega na tym, że jeśli masz
$_POST['variable'] = null
, oznacza to, że klucz istnieje i został wysłany, ale wartość była zerowaInną opcją jest to,
isset()
która sprawdzi, czy klucz tablicy istnieje i czy został ustawionyOstatnią opcją jest użycie,
empty()
które sprawdzi, czy klucz tablicy istnieje, jeśli jest ustawiony i czy wartość nie jest uważana za pustą.Przykłady:
Odnośnie twojego pytania
Właściwym sposobem sprawdzenia, czy wartość została wysłana, jest użycie funkcji array_key_exists () z metodą sprawdzania żądania
Ale są pewne przypadki, w zależności od twojej logiki, gdzie
isset()
iempty()
może być również dobre.źródło
empty
. Zgodnie z komentarzem Shi do odpowiedzi Augustusa Francisa , nieempty()
jest poprawnym wyborem alternatywnym, ponieważ w php ciąg jest równoważny - i zwraca dla wszystkich wartości równoważnych fałszowi . Więc używając , kod pominie drukowanie, jeśli wartość to . Jeśli chcesz wykluczyć pusty ciąg, zobacz odpowiedź Augusta.'0'
false
empty()
true
empty
'0'
isset
nie jest odpowiednia.Zgodnie z dokumentacją PHP: http://php.net/manual/en/function.array-key-exists.php
(patrz Przykład # 2 array_key_exists () vs isset () )
Metoda
array_key_exists
jest przeznaczona do sprawdzania obecności klucza w tablicy.Tak więc kod w pytaniu można zmienić w następujący sposób:
źródło
isset
rozwiązania tylko wtedy, gdy pole wpisu jest ustawione, ale zawiera wartość NULL. To dobra alternatywa , jeśli chcesz zezwolićNULL
welse
oddziale. Jednak jest to błąd, jeśli potrzebny jest ciąg; w tej sytuacjiisset
działa dobrze, ale ten kod nie - przekażeNULL
wartość dalej. Późniejsza odpowiedź Roberta pokazuje różnicę.Wszystkie metody są faktycznie odradzane, jest to ostrzeżenie w Netbeans 7.4 i na pewno dobrą praktyką jest nie uzyskiwanie bezpośredniego dostępu do zmiennych superglobalnych, zamiast tego użyj filtru
źródło
isset
jest o wiele bardziej czytelny niż wyrażenie filtru. Ale dziękuję za wskazanie tego; warto rozważyć tę opcję.empty
, potknęło się o luźne pisanie php; trudno sobie wyobrazić, że dostęp do $ _POST zostałby uznany za słaby style.)Próbować
źródło
empty($_POST['fromPerson'])
czy ten połączony test. Łatwiejsze do czytania i pisania :)empty('0')
zwracatrue
. Więc to nie to samo.Spróbuj ?
isset
($_POST['fromPerson'])
źródło
źródło
is_array()
sprawdza, czy jest to tablica, druga część sprawdza, czy zawiera element z kluczem'fromPerson'
.if( isset($_POST['fromPerson']) )
jest w porządku.Możesz użyć funkcji i powrotu, lepiej niż kierowanie echem.
źródło
Lubię sprawdzać, czy jest ustawiony i czy jest pusty w operatorze trójskładnikowym.
źródło
empty('0')
jesttrue
. Więc lepiej nie miećversion
0
, lubuserID
0
itp.Chciałbym dodać swoją odpowiedź, mimo że ten wątek ma już lata i jest dla mnie wysoko w Google.
Moja najlepsza metoda to:
Tak
$_POST
jak tablica, jeśli skrypt ładuje się i nie ma danych w$_POST
zmiennej, będzie miał długość tablicy równą 0. Można tego użyć w instrukcji IF.Możesz się również zastanawiać, czy powoduje to błąd „undefined index”, widząc, że sprawdzamy, czy
$_POST
jest ustawiony ... W rzeczywistości$_POST
błąd „undefined index” pojawi się tylko wtedy, gdy spróbujesz wyszukać $ _POST wartość tablicy, która nie istnieje.$_POST
zawsze istnieje w sobie, będąc pustym lub ma wartości tablicowe.$_POST['value']
może nie istnieć, powodując błąd „undefined index”.źródło