Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][PHP]Problem z warunkami
Forum PHP.pl > Forum > Przedszkole
Szunaj85
Chciałbym zadać kilka pytań odnośnie formularza, a właściwie warunków w PHP, które mają sprawdzać jego pola.

1. Mam trzy pola i teraz jak napisać warunek, który będzie wyglądał tak. Jeżeli użytkownik uzupełni którekolwiek z trzech pól (czyli jedno lub dwa ze wszystkich pól) wyświetli mu się komunikat, że nie uzupełnił wszystkich pól?
2. Kolajna sprawa to weryfikacja jednego pola, która dotyczy poprawności wpisanej temperatury, ale z pewnego zakresu (od minusowej do plusowej). Problemu by nie było gdyby były to same liczby.
Jednak użytkownicy mogą wpisywać np. "20°C", "20 °C", "20 stopni celcjusza", "-10°C", "- 10 °C", itp.
Jak za pomocą warunku pierw spradzić czy w ogóle jakaś liczba jest wisana, wyodrębnić tą liczbę i sprawdzić czy mieści się w zdefiniowanym zakresie liczb?
Evinek
1.
  1. if(!isset($pole1) || !isset($pole2) || !isset($pole2)){
  2. echo "Nie wszystkie pola zostały uzupełnione";
  3. }
  4. else{
  5. //Jeżeli wszystko wypisane
  6. }

2.
Ja bym zrobił tak, że wpisuje się samą liczbę a obok input'a napisał °C.
[ ]°C
I sprawdzanie z jednym ifem:
  1. if(-40 < $temperatura < 40){
  2. ...
  3. }

Nie wiem czy zadziała z minusem bo nigdy tak nie robiłem - nawet nie wiem czemu.
Pozdrawiam.
Szunaj85
Dzięki za rozwiązanie do pierwszego pytania.
Cytat
Ja bym zrobił tak, że wpisuje się samą liczbę a obok input'a napisał °C.
Oczywiście też myślałem nad takim rozwiązaniem, ale w moim przypadku to chyba nie najlepszy pomysł. Mi przychodzą na myśl wyrażenia regularne. Niestety nie jestem w nich zbyt dobry. sad.gif
r4xz
Cytat(Szunaj85 @ 8.01.2012, 12:07:05 ) *
Dzięki za rozwiązanie do pierwszego pytania.
Oczywiście też myślałem nad takim rozwiązaniem, ale w moim przypadku to chyba nie najlepszy pomysł. Mi przychodzą na myśl wyrażenia regularne. Niestety nie jestem w nich zbyt dobry. sad.gif

ja najpierw bym sprawdził czy podał samą liczbę (tak - wiadomo, nie ma problemu), jeśli użytkownik dopisał także coś w stylu "20°C", "20 °C", "20 stopni celcjusza" to pobrać z tego liczbę, zmienić POST, ale formularza jeszcze nie przepuszczaj tylko daj komunikat w stylu 'wartości niektórych pól zostały zmieniony, potwierdź zmiany'
mortus
@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():
  1. if(!empty($_POST)) {
  2. if(empty($_POST['pole1']) || empty($_POST['pole2']) || empty($_POST['pole3'])) {
  3. echo 'Uzupełnij wszystkie pola!';
  4. }
  5. // alternatywą dla powyższego zapisu jest zapis poniżej
  6. if((isset($_POST['pole1']) && $_POST['pole1'] == '') ||
  7. (isset($_POST['pole1']) && $_POST['pole1'] == '') ||
  8. (isset($_POST['pole1']) && $_POST['pole1'] == '')) {
  9. echo 'Uzupełnij wszystkie pola!';
  10. }
  11. // choć w tym drugim przypadku stosuje się raczej
  12. if((isset($_POST['pole1']) && $_POST['pole1'] != '') &&
  13. (isset($_POST['pole1']) && $_POST['pole1'] != '') &&
  14. (isset($_POST['pole1']) && $_POST['pole1'] != '')) {
  15. // wszystkie pola zostały uzupełnione
  16. } else {
  17. echo 'Uzupełnij wszystkie pola!';
  18. }
  19. }

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:
  1. $temperature = !empty($_POST['temperature']) ? $_POST['temperature'] : false;
  2. if($temperature) {
  3. $pattern = '#^([-|0-9][0-9]+).*?#si';
  4. $matched = preg_match($pattern, $temperature, $matches);
  5. $temperatureValue = $matches[1];
  6. }

Jeśli tylko użytkownik nie wpisze czegoś innego, co oczywiście można kontrolować za pomocą zmiennej $matched.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.