@Evinek: Zdaje się, że Twoja metoda nie przejdzie, ponieważ pola tekstowe formularza HTML są wysyłane zawsze, a jeśli nie wpisze się wartości, to ich wartość to po prostu pusty łańcuch znaków. Niemniej jednak są one ustawione (ang. set) zatem isset() zawsze zwróci prawdę. Warunek z funkcją isset() trzeba zatem rozbudować, albo alternatywnie użyć funkcji empty():
if(empty($_POST['pole1']) || empty($_POST['pole2']) || empty($_POST['pole3'])) { echo 'Uzupełnij wszystkie pola!'; }
// alternatywą dla powyższego zapisu jest zapis poniżej
if((isset($_POST['pole1']) && $_POST['pole1'] == '') || (isset($_POST['pole1']) && $_POST['pole1'] == '') || (isset($_POST['pole1']) && $_POST['pole1'] == '')) { echo 'Uzupełnij wszystkie pola!'; }
// choć w tym drugim przypadku stosuje się raczej
if((isset($_POST['pole1']) && $_POST['pole1'] != '') && (isset($_POST['pole1']) && $_POST['pole1'] != '') && (isset($_POST['pole1']) && $_POST['pole1'] != '')) { // wszystkie pola zostały uzupełnione
} else {
echo 'Uzupełnij wszystkie pola!'; }
}
Swoją drogą tematów na ten temat na forum.php.pl było sporo.
Co do drugiego problemu, to użytkownik raczej nie powinien mieć aż tak szerokich możliwości, a jednostka powinna być odgórnie określona. Jeśli jednak użytkownik ma taką możliwość, to wyrażenia regularne mogą się tutaj sprawdzić wyśmienicie:
$temperature = !empty($_POST['temperature']) ?
$_POST['temperature'] : false; if($temperature) {
$pattern = '#^([-|0-9][0-9]+).*?#si';
$matched = preg_match($pattern, $temperature, $matches); $temperatureValue = $matches[1];
}
Jeśli tylko użytkownik nie wpisze czegoś innego, co oczywiście można kontrolować za pomocą zmiennej
$matched.