Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Ćwiczenia w mnożeniu
Forum PHP.pl > Forum > Przedszkole
kubek3898
Mam zrobić losowanie cyfr od 1 do 10, a później poprosić użytkownika o wpisanie poprawnej odpowiedzi. Jeśli będzie poprawna lub nie, ma wypisać stosowny komunikat.

Na razie mam taki kod:

  1. <?php
  2.  
  3. $a = rand(1, 10);
  4. $b = rand(1, 10);
  5.  
  6. $wynik = $a * $b;
  7.  
  8. echo $a. ' * ' .$b;
  9.  
  10. ?>
  11.  
  12. <form action="index.php" method="post">
  13. <input type="text" name="test" />
  14. <input type="submit" name="submit" value="Wyslij" />
  15. </form>
  16.  
  17. <?php
  18.  
  19. if(isset($_POST['test']))
  20. {
  21. $test = addslashes($_POST['test']);
  22.  
  23. if($test == $wynik)
  24. {
  25. echo 'udalo sie!<br><br>';
  26. echo $wynik; // do sprawdzenia ile wynosi $wynik
  27. }
  28. else
  29. {
  30. echo 'nie udalo sie<br><br>';
  31. echo $wynik; // do sprawdzenia ile wynosi $wynik
  32. }
  33. }
  34.  
  35. ?>


I teraz może mi ktoś wytłumaczyć dlaczego, po wpisaniu liczby, tak jakby przetwarza z opóźnionym zapłonem i wynik to zawsze wynik działania do przodu? Wrzućcie to sobie na host, zobaczycie o co mi chodzi... Po prostu zmienna $wynik nie wynosi tyle ile przy starcie skryptu, tylko losuje już inne liczby po naciśnięciu przycisku "submit". Jak temu zapobiec?
nospor
Cytat
Po prostu zmienna $wynik nie wynosi tyle ile przy starcie skryptu, tylko losuje już inne liczby po naciśnięciu przycisku "submit".
No tak... każde żądanie to nowe losowanie.
Albo zapisuj w sesji wynik albo przekazuj go do pola ukrytego w formularzu. A potem porównuj to co poda user albo z wynikiem w sesji, albo z wynikiem w ukrytym formie
Lysiur
Przeanalizuj co się dzieje. (tak w uproszczeniu)
[Start]
1. losuje liczby,
2. generuje formularz
3. sprawdzam czy wysłano formularz (nie wysłano), podaje wynik i wysyłam formularz

[Wysyłany formularz]
1. losuje <nowe> liczby
2. generuje formularz,
3. Sprawdzam czy wysłano formularz (wysłano), to sprawdzam czy wynik zgadza się z pkt. 1 (losuje <nowe> liczby) - wynik się nie zgadza, dlaczego? Ponieważ przesłany wynik porównjesz z nowo wygenerowanym zestawem liczb. Brakuje Ci w tym wszystkim zapamiętania wyniku z wygenerowanych w pkt.1 liczby. Wysyłając formularz Twój skrypt uruchamia sie od nowa, i traci wcześniej wygenerowany zestaw danych.

Najprosztsze rozwiązanie, wynik wylosowanych liczb z pkt. 1 wstaw np.: w formularz w polu type hidden, a w kroku 3 sprawdź czy wynik wprowadzony przez użytkownika jest równy z pola ukrytego.

To jest oczywiście tylko obraz rozwiązania Twojego problemu, spróbuj i pokombinuj. Jak uda Ci się to zaimplementować to spróbuj waracji z mechanizmem sesji.
kubek3898
I nadal nic... próbowałem z sesjami, myślałem, że będzie prościej - nic z tego. Dlatego wybrałem te hiddeny, oto wyniki mojej marnej pracy:

  1. <?php
  2.  
  3. $a = rand(1, 10);
  4. $b = rand(1, 10);
  5.  
  6. $wynik = $a + $b;
  7.  
  8. echo $a. ' * ' .$b;
  9.  
  10. ?>
  11.  
  12. <form action="" method="post">
  13. <input type="text" name="test" />
  14. <input type="submit" name="submit" value="Wyslij" />
  15. <input type="hidden" name="hidden" />
  16. </form>
  17.  
  18. <?php
  19.  
  20. if(isset($_POST['submit']))
  21. {
  22. $test = addslashes($_POST['test']);
  23. $hidden = $_POST['hidden'];
  24. $hidden = $wynik;
  25.  
  26. if(empty($test))
  27. {
  28. echo 'Nie wypełniłeś wszystkich pól!<br><br>';
  29. }
  30. else
  31. {
  32. if($hidden == $test)
  33. {
  34. echo 'Gratulacje!<br><br>';
  35. }
  36. else
  37. {
  38. echo 'Błąd!<br><br>';
  39. }
  40. }
  41. }
  42.  
  43. ?>


Naprowadźcie mnie proszę, co robię źle, bo oczywiście efekt taki sam jak w kodzie powyżej (1 post).

Pozdrawiam.
_Borys_
  1. <input type="hidden" name="hidden" value = "<?php echo $wynik ?>"/>

  1. //$hidden = $wynik;
bpskiba
Może Kolega zrozumie na tym przykładze dwa pojęcia:
- przetwarzanie po stronie serwera
- przetwarzanie po stronie klienta

w tym ćwiczeniu aż się prosi o javascript....
in5ane
Cytat(bpskiba @ 25.02.2013, 20:50:19 ) *
Może Kolega zrozumie na tym przykładze dwa pojęcia:
- przetwarzanie po stronie serwera
- przetwarzanie po stronie klienta

w tym ćwiczeniu aż się prosi o javascript....

Skoro jest bardzo początkujący albo musi mieć koniecznie PHP, no to sesje najprościej.

Kolego zrób tak. Te swoje randy jak masz to daj:
  1. $_SESSION['wynik'] = $a * $b;


I później zrób sobie:
  1. if($test == $_SESSION['wynik'])

i dopisz sobie w tym IF'ie (po wyświetleniu stosownego komunikatu o gratulacjach)

i to Ci po prostu zniszczy sesje.

Dodatkowo na samym początku skryptu dodaj sobie:


Praktycznie podałem Ci wszystko, jak na talerzu. Mam nadzieję, że sobie to wklepiesz w swój kodzik ;-)
kubek3898
Cytat(bpskiba @ 25.02.2013, 20:50:19 ) *
Może Kolega zrozumie na tym przykładze dwa pojęcia:
- przetwarzanie po stronie serwera
- przetwarzanie po stronie klienta

w tym ćwiczeniu aż się prosi o javascript....


Gdybym chciał użyć JS i AJAX'a już dawno, bym to zrobił, tutaj chciałem przetestować tą funkcję. Ot tak, stworzyłem sobie skrypt sprawdzający wynik smile.gif.


Cytat(in5ane @ 25.02.2013, 21:09:22 ) *
Skoro jest bardzo początkujący albo musi mieć koniecznie PHP, no to sesje najprościej.

Kolego zrób tak. Te swoje randy jak masz to daj:
  1. $_SESSION['wynik'] = $a * $b;


I później zrób sobie:
  1. if($test == $_SESSION['wynik'])

i dopisz sobie w tym IF'ie (po wyświetleniu stosownego komunikatu o gratulacjach)

i to Ci po prostu zniszczy sesje.

Dodatkowo na samym początku skryptu dodaj sobie:


Praktycznie podałem Ci wszystko, jak na talerzu. Mam nadzieję, że sobie to wklepiesz w swój kodzik ;-)


Robiłem $_SESSION['wynik'] = $wynik; i nie działało. Już sobie poradziłem, zamieniłem na pole typu hidden.

Czy jestem początkujący? Być może. Zależy jak to rozumieć. I nie musiałeś użyć ironii mówiąc "kodzik".

Tak czy owak, poradziłem sobie, można zamknąć.

Pozdrawiam.
in5ane
Cytat(kubek3898 @ 26.02.2013, 13:29:08 ) *
Czy jestem początkujący? Być może. Zależy jak to rozumieć. I nie musiałeś użyć ironii mówiąc "kodzik".
W żadnym wypadku nie miała to być ironia. Tak mi się po prostu napisało. Pozdrawiam ;-)
kubek3898
Skoro tak to przepraszam, źle to odebrałem.

Rownież pozdrawiam i proszę o zamknięcie, bo spam robimy biggrin.gif
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.