Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Instrukcja warunkowa czy pętla?
Forum PHP.pl > Forum > Przedszkole
Marco1357
Witam wszystkich. Oto mój problem. Tworzę program kalkulator w php. Mam dwa pliki. W jednym pliku ( kalkulator.php ) mamy przyciski, które są formularzami, po naciśnięciu których przenoszeni jesteśmy do drugiego pliku kalk.php. Tutaj zależnie od wciśniętego przycisku, tworzona jest tablica z cyframi, a następnie tablica wyświetlana jest w pliku kalkulator.php. I teraz można zrobić tę tablicę przy pomocy instrukcji warunkowych. Wadą tego rozwiązania jest duża ilość kodu do napisania. Można też użyć pętli. J tu jest problem. Moja pętla foreach po naciśnięciu cyfry zero tworzy i wyświetla od razu tablicę z ośmioma cyframi zamiast jednej. Co w tej sytuacji zrobić?
Oto kod:

kalk.php

  1. <?php
  2. if (isset($_GET['wynik']) ) {
  3. // $liczby = array();
  4.  
  5. $zero = array('zero', 'dziesiec', 'dwadziescia', 'trzydziesci', 'czterdziesci', 'piecdziesiat', 'szescdziesiat', 'siedemdziesiat');
  6.  
  7. if ($_GET['wynik'] == "0") {
  8. $_SESSION['zero']= $_GET['wynik'];
  9.  
  10. }
  11.  
  12.  
  13. foreach ($zero as $wartosc){
  14. if($_GET['wynik'] == "0" & $_SESSION[$wartosc]=="0"){
  15. if($_SESSION['siedemdziesiat'] =="0"){
  16. break;
  17. }
  18.  
  19. $nast_el = next($zero);
  20. $_SESSION[$nast_el]="0";
  21.  
  22. }
  23. }
  24.  
  25.  
  26.  
  27.  
  28.  
  29. if ($_GET['wynik'] == "1") {
  30. $_SESSION['jeden']= $_GET['wynik'];
  31.  
  32. }
  33.  
  34. if($_GET['wynik']=="2" & $_SESSION['dwa']=="2"){
  35. $_SESSION['dwanascie']="2";
  36. }
  37.  
  38. if ($_GET['wynik']=="2") {
  39. $_SESSION['dwa']= $_GET['wynik'];
  40.  
  41. }
  42.  
  43.  
  44. if ($_GET['wynik'] == "3") {
  45. $_SESSION['trzy']= $_GET['wynik'];
  46. }
  47.  
  48. if ($_GET['wynik'] == "4") {
  49. $_SESSION['cztery']= $_GET['wynik'];
  50. }
  51.  
  52.  
  53. } else {
  54. echo "wybierz stronę!";
  55. }
  56.  
  57. include 'kalkulator.php';
  58.  
  59. ?>




kalkulator.php




  1.  
  2.  
  3.  
  4. <?php
  5. // session_start();
  6.  
  7.  
  8. ?>
  9.  
  10. <!DOCTYPE html>
  11. <html>
  12. <head>
  13. <meta charset='utf-8'>
  14. <meta http-equiv='X-UA-Compatible' content='IE=edge'>
  15. <title>KALKULATOR</title>
  16. <meta name='viewport' content='width=device-width, initial-scale=1'>
  17. <link rel='stylesheet' type='text/css' media='screen' href='main1.css'>
  18. <script src='main.js'></script>
  19. </head>
  20. <body>
  21.  
  22.  
  23. <table class="tabela">
  24. <tr>
  25. <td colspan="4" class="wyswietlacz">
  26. Działanie: <?php
  27.  
  28.  
  29. foreach ($_SESSION as $cyfra){
  30. echo $cyfra;
  31. }
  32. ?>
  33. <br>
  34. Wynik:<br>
  35.  
  36. </td>
  37. </tr>
  38.  
  39. <tr>
  40.  
  41. <td>
  42. <form action="kalk.php" method="get">
  43. <input type=submit value="1" class="input"/>
  44. <input type="hidden" name="wynik" value= "1" />
  45.  
  46. </form>
  47. </td>
  48.  
  49. <td>
  50. <form action="kalk.php" method="get">
  51. <input type=submit value="2" class="input"/>
  52. <input type="hidden" name="wynik" value="2" />
  53. </form>
  54. </td>
  55.  
  56. <td>
  57. <form action="kalk.php" method="get">
  58. <input type=submit value="3" class="input"/>
  59. <input type="hidden" name="wynik" value="3" ?>
  60. </form>
  61. </td>
  62.  
  63. <td>
  64. <form action="kalk.php" method="get">
  65. <input type=submit value="C" class="input"/>
  66. <input type="hidden" name="wynik" value="C" ?>
  67. <input type="hidden" name="zn" value="kasowanie"/>
  68. </form>
  69. </td>
  70.  
  71. </tr>
  72.  
  73. <tr>
  74.  
  75. <td>
  76. <form action="kalk.php" method="get">
  77. <input type=submit value="4" class="input"/>
  78. <input type="hidden" name="wynik" value="4" ?>
  79. </form>
  80. </td>
  81.  
  82. <td>
  83. <form action="kalk.php" method="get">
  84. <input type=submit value="5" class="input"/>
  85. <input type="hidden" name="wynik" value="5" ?>
  86. </form>
  87. </td>
  88.  
  89. <td>
  90. <form action="kalk.php" method="get">
  91. <input type=submit value="6" class="input"/>
  92. <input type="hidden" name="wynik" value="6" ?>
  93. </form>
  94. </td>
  95.  
  96. <td>
  97. <form action="kalk.php" method="get">
  98. <input type=submit value="-" class="input"/>
  99. <input type="hidden" name="wynik" value="-" ?>
  100. <input type="hidden" name="zn" value="minus"/>
  101. </form>
  102. </td>
  103.  
  104. </tr>
  105. <tr>
  106. <td>
  107. <form action="kalk.php" method="get">
  108. <input type=submit value="7" class="input"/>
  109. <input type="hidden" name="wynik" value="7" ?>
  110. </form>
  111. </td>
  112.  
  113. <td>
  114. <form action="kalk.php" method="get">
  115. <input type=submit value="8" class="input"/>
  116. <input type="hidden" name="wynik" value="8" ?>
  117. </form>
  118. </td>
  119.  
  120.  
  121. <td>
  122. <form action="kalk.php" method="get">
  123. <input type=submit value="9" class="input"/>
  124. <input type="hidden" name="wynik" value="9" ?>
  125. </form>
  126. </td>
  127. <td>
  128.  
  129. <form action="kalk.php" method="get">
  130. <input type=submit value="+" class="input"/>
  131. <input type="hidden" name="wynik" value="+" ?>
  132. <input type="hidden" name="zn" value="plus"/>
  133. </form>
  134.  
  135. </td>
  136. </tr>
  137.  
  138. <tr>
  139. <td>
  140. <form action="kalk.php" method="get">
  141. <input type=submit value="." class="input"/>
  142. <input type="hidden" name="wynik" value="." ?>
  143. </form>
  144.  
  145.  
  146. </td>
  147.  
  148. <td>
  149. <form action="kalk.php" method="get">
  150. <input type=submit value="/" class="input"/>
  151. <input type="hidden" name="wynik" value="/" ?>
  152. <input type="hidden" name="zn" value="dzielenie"/>
  153. </form>
  154.  
  155.  
  156.  
  157. </td>
  158.  
  159. <td>
  160. <form action="kalk.php" method="get">
  161. <input type=submit value="0" class="input"/>
  162. <input type="hidden" name="wynik" value="0" ?>
  163. </form>
  164. </td>
  165.  
  166. <td>
  167. <form action="kalk.php" method="get">
  168. <input type=submit value="=" class="input"/>
  169. <input type="hidden" name="wynik" value="=" ?>
  170. <input type="hidden" name="zn" value="rowna"/>
  171. </form>
  172. </td>
  173.  
  174.  
  175. </tr>
  176. <tr>
  177. <td>
  178. <form action="kalk.php" method="get">
  179. <input type=submit value="*" class="input"/>
  180. <input type="hidden" name="wynik" value="*" ?>
  181. <input type="hidden" name="zn" value="mnozenie"/>
  182. </form>
  183. </td>
  184.  
  185. <td>
  186. <form>
  187. <input type=submit value=" " class="input"/>
  188.  
  189. </form>
  190. </td>
  191.  
  192. <td>
  193. <form>
  194. <input type=submit value=" " class="input"/>
  195.  
  196. </form>
  197. </td>
  198.  
  199. <td>
  200. <form>
  201. <input type=submit value=" " class="input"/>
  202.  
  203. </form>
  204. </td>
  205.  
  206.  
  207. </tr>
  208.  
  209. </table>
  210. <?php
  211.  
  212.  
  213.  
  214.  
  215.  
  216. ?>
  217. </body>
  218. </html>
  219. </html>


nospor
Nie
& $_SESSION[$wartosc]=="0"

a
&& $_SESSION[$wartosc]==="0"


Ale lepiej by bylo bys napisal co ty probujesz osiagnac bo to coteraz robisz nie ma najmniejszego sensu i raczej na pewno mozna to zrobic lepiej/prosciej/czytelniej
Marco1357
Cytat(nospor @ 25.01.2023, 17:12:59 ) *
Nie
& $_SESSION[$wartosc]=="0"

a
&& $_SESSION[$wartosc]==="0"


Ale lepiej by bylo bys napisal co ty probujesz osiagnac bo to coteraz robisz nie ma najmniejszego sensu i raczej na pewno mozna to zrobic lepiej/prosciej/czytelniej


Konkretnie to chodzi o ten fragment kodu (poniżej), chcę aby po wciśnięciu klawisza 0, wyświetlone było 0 a nie tak jak teraz 00000000, i kolejne wciśnięcie 0 powodowało wyświetlenie 00, kolejne 000 itd.

kalk.php

  1.  
  2. <?php
  3. if (isset($_GET['wynik']) ) {
  4. // $liczby = array();
  5.  
  6. $zero = array('zero', 'dziesiec', 'dwadziescia', 'trzydziesci', 'czterdziesci', 'piecdziesiat', 'szescdziesiat', 'siedemdziesiat');
  7.  
  8. if ($_GET['wynik'] == "0") {
  9. $_SESSION['zero']= $_GET['wynik'];
  10.  
  11.  
  12. }
  13.  
  14.  
  15. foreach ($zero as $wartosc){
  16. if($_GET['wynik'] == "0" && $_SESSION[$wartosc]==="0"){
  17. if($_SESSION['siedemdziesiat'] =="0"){
  18. break;
  19. }
  20.  
  21. $nast_el = next($zero);
  22. $_SESSION[$nast_el]="0";
  23.  
  24.  
  25. }
  26. }
  27.  


wyświetlanie natomiast, fragment kalkulator.php:

  1.  
  2. <tr>
  3. <td colspan="4" class="wyswietlacz">
  4. Działanie: <?php
  5.  
  6.  
  7. foreach ($_SESSION as $cyfra){
  8. echo $cyfra;
  9. }
  10. ?>
  11. <br>
  12. Wynik:<br>
  13.  
  14. </td>
  15. </tr>
  16.  


nospor
Podalem ci na szybko rozwiazanie twojego problemu, masz poprawic IF



A ja sie pytam o caloksztal co ty chcesz zrobic.

chccesz za jak ktos wcisniej 1 a potem 3 a potem 6 to zeby wyswietlalo mu 136?
A jak wcisnie 1 potem 1 potem 1 to ma wyswietlic 111?

Pytam, bo teraz to tak na pewno nie dziala.
Marco1357
Cytat(nospor @ 25.01.2023, 17:49:52 ) *
Podalem ci na szybko rozwiazanie twojego problemu, masz poprawic IF



A ja sie pytam o caloksztal co ty chcesz zrobic.

chccesz za jak ktos wcisniej 1 a potem 3 a potem 6 to zeby wyswietlalo mu 136?
A jak wcisnie 1 potem 1 potem 1 to ma wyswietlic 111?

Pytam, bo teraz to tak na pewno nie dziala.


Tak dokładnie o to chodzi. chcę aby było 136, ale też żeby było 111.
nospor
no wlasnie. skad pomysl ze ty masz tam wrzucac kazda liczbe osobno? Przeciez wystarczy tylko ta jedna linijka zamiast petryliarda twoich

  1. if (isset($_GET['wynik']) ) {
  2. if (is_numeric($_GET['wynik'])) {
  3.  
  4. if (!isset($_SESSION['liczba']))
  5. {
  6. $_SESSION['liczba'] = '';
  7. }
  8.  
  9. $_SESSION['liczba'] .= $_GET['wynik'];
  10. }
  11.  
  12. }
  13.  

I wyswietlanie:

echo $_SESSION['liczba'];

i juz. dziala na wszystkie cyfry jakie wpiszesz i w jakiej kolejnosci
Marco1357
Cytat(nospor @ 25.01.2023, 18:01:21 ) *
no wlasnie. skad pomysl ze ty masz tam wrzucac kazda liczbe osobno? Przeciez wystarczy tylko ta jedna linijka zamiast petryliarda twoich

  1. if (isset($_GET['wynik']) ) {
  2. if (is_numeric($_GET['wynik'])) {
  3.  
  4. if (!isset($_SESSION['liczba']))
  5. {
  6. $_SESSION['liczba'] = '';
  7. }
  8.  
  9. $_SESSION['liczba'] .= $_GET['wynik'];
  10. }
  11.  
  12. }
  13.  

I wyswietlanie:

echo $_SESSION['liczba'];

i juz. dziala na wszystkie cyfry jakie wpiszesz i w jakiej kolejnosci



Dzięki wszystko działa. Teraz zauważyłem kropkę (Konkatenację).
nospor
Cytat
Chciałbym zachować wygląd kalkulatora.

A co ma piernik do wiatraka?

Wyglad formularza to jedno, a przechowywanie danych to drugie.
No ale spoko, rob po swojemu, zycze szczescia w wyswietleniu 111 smile.gif
Marco1357
Cytat(nospor @ 25.01.2023, 18:35:32 ) *
A co ma piernik do wiatraka?

Wyglad formularza to jedno, a przechowywanie danych to drugie.
No ale spoko, rob po swojemu, zycze szczescia w wyswietleniu 111 smile.gif



Dzięki wszystko działa. Teraz zauważyłem kropkę (Konkatenację).
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.