Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [HTML][PHP]Prosty kalkulator w PHP z funkcją preg_match
stefan09
post 28.09.2011, 16:49:39
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 28.09.2011

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


Witam,

PHP uczę się trzeci dzień, także jestem totalnym laikiem, tym bardziej, że wcześniej nie miałem do czynienia z językiem obiektowym (tylko HTML i CSS).

Do rzeczy: napisałem sobie prosty "kalkulator". Wygląda to tak, że jest formularz z dwoma polami i trzeba wpisać do nich dwie liczby (do każdego pola po jednej), a następnie wybrać z inputa select czy chcemy dodać/odjąć/pomnożyć/podzielić liczbę.

Fajnie- jest prymitywne, ale działa biggrin.gif Żeby to trochę rozwinąć chciałem dodać funkcję preg_match, żeby sprawdzić czy w obu polach jest przynajmniej jedna liczba. Część odpowiadającą za liczenie dałem jako funkcję. No i się posypało- wyskakuje error. Proszę o pokazanie mi gdzie leży błąd i ewentualną wskazówkę jak go usunąć.

  1. <form action="calc.php" method="post">
  2.  
  3. Liczba 1 <input type="text" name="jeden"><br>
  4. Liczba 2 <input type="text" name="dwa"><br>
  5. <select name="option">
  6. <option value="dodawanie">Dodawanie</option>
  7. <option value="odejmowanie">Odejmowanie</option>
  8. <option value="mnozenie">Mnożenie</option>
  9. <option value="dzielenie">Dzielenie</option>
  10.  
  11. <input type="submit" value="Wyslij"><br>
  12.  
  13. </form>

  1. <?php
  2.  
  3. $_POST['jeden'] = $jeden;
  4. $_POST['dwa'] = $dwa;
  5. $_POST['option'] = $option;
  6.  
  7.  
  8. if (preg_match('@[0-9]{1,}@',$jeden && $dwa)){
  9. oblicz();
  10. }
  11.  
  12. else{
  13. echo('wpisz liczby!');
  14. }
  15.  
  16. function oblicz(){
  17.  
  18. if ($option == "dodawanie"){
  19. $suma = $jeden + $dwa;
  20. echo("Suma to $suma");
  21. }
  22.  
  23. else if ($option == "odejmowanie"){
  24. $roznica = $jeden - $dwa;
  25. echo("Roznica to $roznica");
  26. }
  27.  
  28. else if ($option == "mnozenie"){
  29. $iloczyn = $jeden * $dwa;
  30. echo("Iloczyn to $iloczyn");
  31. }
  32.  
  33. else {
  34. $iloraz = $jeden / $dwa;
  35. echo("Iloraz to $iloraz");
  36. }
  37. }
  38.  
  39. ?>


Zamierzenie jest takie, że wymagane jest wypełnienie obu pól formularza dowolnymi liczbami. Jeśli warunek zostanie spełniony, ma zostać wykonana funkcja oblicz, jeśli nie- ma pokazać się komunikat "Wpisz liczby!".

Jeszcze jedno pytanie- czy pogrubiony poniżej fragment kodu jest poprawny? Chodzi o te &&.
if (preg_match('@[0-9]{1,}@',$jeden && $dwa))

Z góry dziękuję za pomoc i pozdrawiam.
Go to the top of the page
+Quote Post
acztery
post 28.09.2011, 17:05:03
Post #2





Grupa: Zarejestrowani
Postów: 945
Pomógł: 7
Dołączył: 15.03.2005
Skąd: katowice

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


http://php.net/manual/en/function.is-numeric.php tutaj poszukaj odp.
Go to the top of the page
+Quote Post
adbacz
post 28.09.2011, 17:21:48
Post #3





Grupa: Zarejestrowani
Postów: 532
Pomógł: 24
Dołączył: 15.04.2011
Skąd: Kalisz

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


Cytat
Jeszcze jedno pytanie- czy pogrubiony poniżej fragment kodu jest poprawny? Chodzi o te &&.
if (preg_match('@[0-9]{1,}@',$jeden && $dwa))


Nie, nie jest poprawny. Trzeba zrobić dwa warunki:
  1. if(preg_match('@[0-9]{1,}@',$jeden) && preg_match('@[0-9]{1,}@',$dwa)) {
  2.  
  3. }


PS. Następnym razem radzę przeczytać co wyskakuje za błąd, mimo, że jest po angielsku to w 90% wszystko nam serwer pokazuje, w jakij linijce i ewentualnie jaka funkcja. A jak nie możesz dojśc co to za problem wyskoczył, najlepiej skopiować i wkleić go tutaj i podać kawałek kodu z linijką, która występuje w błędzie.

Ten post edytował adbacz 28.09.2011, 17:24:13
Go to the top of the page
+Quote Post
stefan09
post 28.09.2011, 20:00:57
Post #4





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 28.09.2011

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


Dzięki za cenną radę co do sprawdzania błędów smile.gif

Wiem, że problem leży w funkcji oblicz() i domyślam się, że brakuje jej parametrów, ale nie mam pojęcia jakie zmienne wpisać pomiędzy nawiasy, żeby skrypt działał.

Bez użycia funkcji (przy użyciu instrukcji warunkowej w instrukcji warunkowej biggrin.gif) skrypt działa dobrze, ale chciałbym się dowiedzieć co robię źle.

Swoją drogą takie używanie "ifa w ifie" jest poprawne?
Go to the top of the page
+Quote Post
Dominis
post 28.09.2011, 20:11:18
Post #5





Grupa: Zarejestrowani
Postów: 77
Pomógł: 19
Dołączył: 13.02.2010

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


  1. $_POST['jeden'] = $jeden;
  2. $_POST['dwa'] = $dwa;
  3. $_POST['option'] = $option;


Prawdopodobnie chcesz przypisać z formularza danych do zmiennych, więc powinieneś zrobić to odwrotnie czyli
  1. $jeden = $_POST['jeden'];


twoja funkcja oblicz, powinna przyjąć jakieś parametry i w tej funkcji pracujesz na jej parametrach, czyli:

  1. oblicz($jeden, $dwa, $option);


zamiast preg_match, uzyj is numeric, a wczesniej sprawdź czy taka zmienna istnieje, tzn:

  1. if(isset($_POST['jeden'])
  2. echo 'istnieje';



w funkcji oblicz chyba lepiej użyć switch-a niż if, elseif w twoim przypadku.

Ppozdro


--------------------
www.maxcode.pl
Go to the top of the page
+Quote Post
stefan09
post 28.09.2011, 20:23:47
Post #6





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 28.09.2011

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


Dzięki.

Nie mogę zrozumieć tylko jakie to ma znaczenie czy jest
  1. $_POST['zmienna'] = $zmienna;
czy
  1. $zmienna = $_POST['zmienna'];


Przecież x = y to y = x.
Czyli jak zamienię z $_POST na $zmienna to potem muszę używać już tylko drugiej wersji?

Ten post edytował stefan09 28.09.2011, 20:24:31
Go to the top of the page
+Quote Post
Dominis
post 28.09.2011, 20:27:48
Post #7





Grupa: Zarejestrowani
Postów: 77
Pomógł: 19
Dołączył: 13.02.2010

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


znaczenie ma takie, ze na początku skryptu zmienna $jeden jest pusta.
Skoro robisz:
  1. $_POST['jeden'] = $jeden;


To do zmiennej odebranej z formularza przypisujesz pusta zmienną.

a jeśli dasz odwrotnie to do zmiennej $jeden przypisujesz zmienna odebrana z formularza.


--------------------
www.maxcode.pl
Go to the top of the page
+Quote Post
stefan09
post 28.09.2011, 20:30:18
Post #8





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 28.09.2011

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


Wszystko jasne. Jeszcze raz dzięki wink.gif
Go to the top of the page
+Quote Post
adbacz
post 24.10.2011, 11:54:18
Post #9





Grupa: Zarejestrowani
Postów: 532
Pomógł: 24
Dołączył: 15.04.2011
Skąd: Kalisz

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


Jakby ktoś pytał, to najpierw radzę dobrze zaznajomić z operatorami bo w PHP znak równości (=) nie oznacza równości więc:
  1. //to
  2. $_POST['jeden'] = $jeden;
  3. //nie jest to samo co to
  4. x = y;

= - przypisanie prawej do lewej
== - lewa równa z prawą i odwrotnie
=== - lewa identyczna z prawą i odwrotnie
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: 25.04.2025 - 23:34