Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [HTML][PHP]Prosty kalkulator w PHP z funkcją preg_match
Forum PHP.pl > Forum > Przedszkole
stefan09
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.
acztery
http://php.net/manual/en/function.is-numeric.php tutaj poszukaj odp.
adbacz
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.
stefan09
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?
Dominis
  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
stefan09
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?
Dominis
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.
stefan09
Wszystko jasne. Jeszcze raz dzięki wink.gif
adbacz
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
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.