Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [HTML][PHP]Problem z warunkami
Szunaj85
post 8.01.2012, 10:28:28
Post #1





Grupa: Zarejestrowani
Postów: 392
Pomógł: 7
Dołączył: 11.05.2008

Ostrzeżenie: (0%)
-----


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?
Powód edycji: [wookieb]:


--------------------
Jeśli Ci pomogłem wciśnij Jeśli mi pomożesz wcisnę
Go to the top of the page
+Quote Post
Evinek
post 8.01.2012, 10:46:05
Post #2





Grupa: Zarejestrowani
Postów: 280
Pomógł: 46
Dołączył: 23.03.2010

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
Szunaj85
post 8.01.2012, 12:07:05
Post #3





Grupa: Zarejestrowani
Postów: 392
Pomógł: 7
Dołączył: 11.05.2008

Ostrzeżenie: (0%)
-----


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


--------------------
Jeśli Ci pomogłem wciśnij Jeśli mi pomożesz wcisnę
Go to the top of the page
+Quote Post
r4xz
post 8.01.2012, 12:24:30
Post #4





Grupa: Zarejestrowani
Postów: 673
Pomógł: 106
Dołączył: 31.12.2008

Ostrzeżenie: (0%)
-----


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'

Ten post edytował r4xz 8.01.2012, 12:25:23


--------------------
Go to the top of the page
+Quote Post
mortus
post 8.01.2012, 12:39:40
Post #5





Grupa: Zarejestrowani
Postów: 2 178
Pomógł: 596
Dołączył: 25.09.2009
Skąd: Piwniczna-Zdrój

Ostrzeżenie: (0%)
-----


@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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 28.06.2025 - 21:26