Zgadywanie liczb

0

Cześć, może nie jest to dosłownie zgadywanie liczb, ale to program polegający na tym, że dana osoba może sprawdzić jak radzi sobie z mnożeniem.

Moje pytanie jest takie czy mógłby mi ktoś pomóc, bo niby wszystko działa, ale zawsze pokazuje, że została podana zła liczba, kiedy zmienię z liczb losowych na stałe, wtedy jest ok. Ale chodzi o to, że to muszą być liczby losowe. Czy ktoś mógłby mi wyjaśnić co zrobiłam nie tak? :(

<!DOCTYPE HTML>
<html land="pl">
<head>

<meta charset="utf-8">
<title>Sprawdź się</title>
<style type="text/css">
html, body {
	
	background-color: #ffffcc;
	color: #000;
	margin-left: 90px;
	margin-top:15px;
	padding: 0;
	
}
</style>
</head>
<body>

<h1>

<?php
$liczba1=rand(10,50);
$liczba2=rand(10,50);
$liczbaa=$liczba1*$liczba2;
echo "Ile wynosi ".$liczba1."*".$liczba2."?";

?>
</h1>
<form method="POST">
<input type="text" name="liczba"/>
<input type="submit" value="sprawdź">
</form>
<?php
$zgadywana=($_POST['liczba']);
if ($zgadywana==$liczbaa)
{
	echo "Brawo";
}
else
{
	echo "Może innym razem :(";
}
?>

</body>
</html>
2

Nie rozumiesz chyba co to jest Request-Scope. Podczas wchodzenia na stronę wykonuje się cały kod, więc zarówno losowanie jak i sprawdzenie! Załóżmy więc że wylosowałeś liczby 1 i 1. Wypisujesz to userowi. On wpisuje wynik. wysyła formularz i strona sie przeładowuje (!) losując tym samym nowe liczby 2 i 2. User wpisał wynik 1 więc sprawdzając czy wynik jest poprawny odpowiedź brzmi: Nie.

Rozwiązanie tego problemu mogłoby polegać na przykład na przechowywaniu po stronie mappingu: sesja-użytkownika -> oczekiwany wynik. Albo na szyrowaniu wyniku i zapisaniu go w cookie użytkownika / wysłaniu tego zaszyfrowanego wyniku w formularzu a potem zdekodowanie go i porównanie.

0
Martii15 napisał(a):

... program polegający na tym, że dana osoba może sprawdzić jak radzi sobie z mnożeniem.
Raczej z kalkulatorem.

Martii15 napisał(a):

... ale zawsze pokazuje, że została podana zła liczba
Po naciśnięciu sprawdź generujesz nowe zadanie i porównujesz z odpowiedzią na poprzednie.

0

Tak podejrzewałam... no niestety jestem baaardzo początkująca. Czy ktoś mógłby mi pomóc to zmienić?

0

Najpierw przerób na następującą wersję.
Niech form wywoła inną stronę która ten wynik sprawdzi.

0

Trywialny przykład bez szyfrowania:

<form method="POST">
<input type="text" name="liczba"/>
<input type="hidden" name="wynik"/ value=<?php echo $liczbaa ?>>
<input type="submit" value="sprawdź">
</form>
<?php
$zgadywana=($_POST['liczba']);
if (isset($_POST["wynik"])) {
  if ($zgadywana==$_POST["wynik"]){
    echo "Brawo";
  } 
  else {
    echo "Może innym razem :(";
  }
}
?>

Oczywiście tak zrobić nie możesz bo user sobie sprawdzi wynik jak będzie chciał i zawsze "wygra". Ale jak zaszyfrujesz ten wynik jakimś AESem a potem odkodujesz przed sprawdzeniem to już niekoniecznie :)

0

To znaczy, mam zmieniać tę stronę na którą przesyłana jest odpowiedź użytkownika, czy wystarczy tylko to? Bo próbowałam przesyłać, ale wtedy to już w ogóle się pogubiłam, bo nie wiedziałam jak do tamtej sprawdzającej strony przesyłać również losowane liczby. a jeśli wystarczy to dziękuję za pomocną sugestię :)

0

mogę jakoś usunąć ten post?

1 użytkowników online, w tym zalogowanych: 0, gości: 1