Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Zgadywanie generowaniej liczby, Analiza kodu
xamrex
post 16.06.2010, 09:55:21
Post #1





Grupa: Zarejestrowani
Postów: 267
Pomógł: 1
Dołączył: 10.08.2007

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


Witam. Napisałem skrypt, który generuje losową liczbę, a zadaniem użytkownika jest zgadnięcie właśnie tej liczby.
Pisałem to w PHP, jestem pewny że używając java script'u było by o wiele prościej, jednak chcę przetestować własne umiejętności.
Proszę o analizę tego kodu i napisanie co można by tutaj poprawić, gdzie zrobiłem jakieś błędy.
  1. <?php
  2. ob_start();//Problemy z headers already sent
  3. echo '<html>';
  4. echo '<head>';
  5. echo '<title>Zgadywanie wygenerowaniej cyfry</title>';
  6. echo '<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-2" >';
  7. echo '</head>';
  8. echo '<body>';
  9. //Tworzeniec cookie z wygenerowana losowo cyfra
  10. if (empty($_COOKIE['losowa']))
  11. {
  12. setcookie("losowa", rand(1,10), time()+3600);
  13. echo'<meta http-equiv="Refresh" content="0">';
  14. }
  15. //tworzenie zmiennych
  16. $cyfra_wygenerowana=$_COOKIE['losowa'];
  17. $cyfra_usera=$_POST['cyfra'];
  18. //podpowiedzi
  19. if (empty($cyfra_usera))
  20. {
  21. echo 'Wpisz cyfrę (od 1 do 10)';
  22. echo '<form action="index.php" method="POST">CYFERKA: <input type=text name="cyfra"><input type=submit value="Wyślij"></form>';
  23. }elseif ($cyfra_wygenerowana>$cyfra_usera){
  24. echo 'Za mało, co ty taki skromny??';
  25. $proba++;
  26. setcookie ('proba', "$proba", time()+3600);
  27. echo '<form action="index.php" method="POST">CYFERKA: <input type=text name="cyfra"><input type=submit value="Wyślij"></form>';
  28. }elseif ($cyfra_wygenerowana<$cyfra_usera){
  29. echo 'No nie przesadzaj aż tak.';
  30. $proba++;
  31. setcookie ('proba', "$proba", time()+3600);
  32. echo '<form action="index.php" method="POST">CYFERKA: <input type=text name="cyfra"><input type=submit value="Wyślij"></form>';
  33. }elseif ($cyfra_wygenerowana==$cyfra_usera){
  34. $proba++;
  35. setcookie ('proba', "$proba", time()+3600);
  36. echo 'Zgadłeś za '.$proba.' razem BRAWO!<br><a href="index.php">Kliknij</a> by zagrać jeszcze raz.';
  37. setcookie("losowa", "", time());
  38. setcookie("proba", "", time());
  39. }else{
  40. echo 'To sie nie powinno zdarzyć';
  41. }
  42. ob_end_flush();//Problemy z headers already sent
  43. echo '</body>';
  44. echo '</html>';
  45. ?>
Go to the top of the page
+Quote Post
zend
post 16.06.2010, 10:33:49
Post #2





Grupa: Zarejestrowani
Postów: 580
Pomógł: 85
Dołączył: 25.03.2010
Skąd: Skrzyszów :)

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


1) $cyfra_wygenerowana<$cyfra_usera - tu porównujesz dwa stringi, typuj na (int)$zmienna
2) ini_set('display_errors' , 'On'); error_reporting(E_ALL | E_STRICT); na początku
3) if (empty($cyfra_usera)) => if(isset($_POST['xxx']))
4) $proba++; a gdzie jest deklaracja $proba = 0; ?
5) To można poprawić
  1. ob_end_flush();//Problemy z headers already sent
  2. echo '</body>';
  3. echo '</html>';

6) setcookie ('proba', "$proba", time()+3600); "$proba" WTF?
7) Poczytaj sobie o DRY
  1. if (empty($cyfra_usera))
  2. {
  3. echo 'Wpisz cyfrę (od 1 do 10)';
  4. echo '<form action="index.php" method="POST">CYFERKA: <input type=text name="cyfra"><input type=submit value="Wyślij"></form>';
  5. }elseif ($cyfra_wygenerowana>$cyfra_usera){
  6. echo 'Za mało, co ty taki skromny??';
  7. $proba++;
  8. setcookie ('proba', "$proba", time()+3600);
  9. echo '<form action="index.php" method="POST">CYFERKA: <input type=text name="cyfra"><input type=submit value="Wyślij"></form>';
  10. }elseif ($cyfra_wygenerowana<$cyfra_usera){

Go to the top of the page
+Quote Post
xamrex
post 16.06.2010, 11:34:16
Post #3





Grupa: Zarejestrowani
Postów: 267
Pomógł: 1
Dołączył: 10.08.2007

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


1)Poprawiłem
$cyfra_wygenerowana=(int)$_COOKIE['losowa'];
$cyfra_usera=(int)$_POST['cyfra'];
Jednak mimo to mam błąd
Undefined index: cyfra in c:\usr\krasnal\www\losowanie\index.php on line 18
3)if(isset($_POST['cyfra'])) Dostaje błędy
Kod
Notice: Undefined index: losowa in c:\usr\krasnal\www\losowanie\index.php  on line 17
Notice: Undefined index: cyfra in c:\usr\krasnal\www\losowanie\index.php on line 18
Zgadłeś za 1 razem BRAWO!

Lina 17 i 18
  1. $cyfra_wygenerowana=(int)$_COOKIE['losowa'];
  2. $cyfra_usera=(int)$_POST['cyfra'];

6)Cookie o nazwie proba przechowuje liczbe prób za którym razem user zgadł cyfrę.
7)Dry? to coś związane z instrukcja switch? ( Mam mało if więc nie użyłem switch'a)

Ja jestem początkującym więc zdarzają mi się błędy, dziękuje za odpowiedź w temacie i tłumaczenie mi moich błędów.

Ten post edytował xamrex 16.06.2010, 11:36:39
Go to the top of the page
+Quote Post
nospor
post 16.06.2010, 11:43:00
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Co do undefined to najpierw sprawdzaj czy cos jest (isset()) a dopiero potem się do tego dobieraj

ad6) chodziło o to , ze nie "$proba" a $proba. Po co ci te ciapki?

Cytat
7)Dry? to coś związane z instrukcja switch? ( Mam mało if więc nie użyłem switch'a)
http://lmgtfy.com/?q=dry
?

ps: zdajesz sobie sprawę, że przechowywanie tej wartosci w cookie ma tę "zaletę", ze trafię za kazdym razem?
Powód edycji: [nospor]:


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
xamrex
post 16.06.2010, 11:54:44
Post #5





Grupa: Zarejestrowani
Postów: 267
Pomógł: 1
Dołączył: 10.08.2007

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


myślałem ze dry to jakaś funkcja z php ;(
mój kod (ciągle z błędami)
  1. <?php
  2. ob_start();//Problemy z headers already sent
  3. ini_set('display_errors' , 'On'); error_reporting(E_ALL | E_STRICT);
  4. echo '<html>';
  5. echo '<head>';
  6. echo '<title>Zgadywanie wygenerowaniej cyfry</title>';
  7. echo '<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-2" >';
  8. echo '</head>';
  9. echo '<body>';
  10. //Tworzeniec cookie z wygenerowana losowo cyfra
  11. if (empty($_COOKIE['losowa']))
  12. {
  13. setcookie("losowa", rand(1,10), time()+3600);
  14. $proba=0;
  15. echo'<meta http-equiv="Refresh" content="0">';
  16. }
  17. //tworzenie zmiennych
  18. if(isset($_COOKIE['losowa'])){
  19.  
  20. $cyfra_wygenerowana=(int)$_COOKIE['losowa'];
  21. }
  22. if(isset($_POST['cyfra'])){
  23. $cyfra_usera=(int)$_POST['cyfra'];
  24. }
  25. //podpowiedzi
  26.  
  27. if (empty($cyfra_usera))
  28. {
  29. echo 'Wpisz cyfrę (od 1 do 10)';
  30. echo '<form action="index.php" method="POST">CYFERKA: <input type=text name="cyfra"><input type=submit value="Wyślij"></form>';
  31. }elseif ($cyfra_wygenerowana>$cyfra_usera){
  32. echo 'Za mało, co ty taki skromny??';
  33. $proba++;
  34. setcookie ('proba', $proba, time()+3600);
  35. echo '<form action="index.php" method="POST">CYFERKA: <input type=text name="cyfra"><input type=submit value="Wyślij"></form>';
  36. }elseif ($cyfra_wygenerowana<$cyfra_usera){
  37. echo 'No nie przesadzaj aż tak.';
  38. $proba++;
  39. setcookie ('proba', $proba, time()+3600);
  40. echo '<form action="index.php" method="POST">CYFERKA: <input type=text name="cyfra"><input type=submit value="Wyślij"></form>';
  41. }elseif ($cyfra_wygenerowana==$cyfra_usera){
  42. $proba++;
  43. setcookie ('proba', $proba, time()+3600);
  44. echo 'Zgadłeś za '.$proba.' razem BRAWO!<br><a href="index.php">Kliknij</a> by zagrać jeszcze raz.';
  45. setcookie("losowa", "", time());
  46. setcookie("proba", "", time());
  47. }else{
  48. echo 'To sie nie powinno zdarzyć';
  49. }
  50. ob_end_flush();//Problemy z headers already sent
  51. echo '</body>';
  52. echo '</html>';
  53. ?>

Dostaje info
Notice: Undefined variable: proba
Przecież ja ustawiłem na $proba=0 jeśli nie ma cookies. Chyba ze to wstawilem w złym miejscu. Gdzie to mam dać? (oczywiście nie mogę dać na środek bo za każdym razem zamiast się zwiększać będzie przyjmować wartość 0)
Go to the top of the page
+Quote Post
nospor
post 16.06.2010, 11:57:50
Post #6





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Cytat
Przecież ja ustawiłem na $proba=0 jeśli nie ma cookies.
nom... a jesli jest cookies to nigdzie nie ustawiasz. Jak jest cookies to musisz te $proba pobrać z ciastka, nie?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
xamrex
post 16.06.2010, 12:02:08
Post #7





Grupa: Zarejestrowani
Postów: 267
Pomógł: 1
Dołączył: 10.08.2007

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


no tak, lecz zend napisał
4) $proba++; a gdzie jest deklaracja $proba = 0; ?
Czyli muszę na starcie stworzyć cookie proba z wartoscia 0?
Go to the top of the page
+Quote Post
nospor
post 16.06.2010, 12:04:58
Post #8





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Nie, cookie z proba przeciez ustawiasz przy kazdym $proba++. To jest ok.
To ze zrobiles $proba=0 tez jest ok.
Ale nie zrobiles:
$proba = $_COOKIE['proba'] gdy to ciacho juz jest. Teraz bez tego za kazdym razem proba bedzie wynosila 1 smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
xamrex
post 16.06.2010, 12:12:27
Post #9





Grupa: Zarejestrowani
Postów: 267
Pomógł: 1
Dołączył: 10.08.2007

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


  1. <?php
  2. ob_start();//Problemy z headers already sent
  3. ini_set('display_errors' , 'On'); error_reporting(E_ALL | E_STRICT);
  4. echo '<html>';
  5. echo '<head>';
  6. echo '<title>Zgadywanie wygenerowaniej cyfry</title>';
  7. echo '<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-2" >';
  8. echo '</head>';
  9. echo '<body>';
  10. //Tworzeniec cookie z wygenerowana losowo cyfra
  11. if (empty($_COOKIE['losowa']))
  12. {
  13. setcookie("losowa", rand(1,10), time()+3600);
  14. echo'<meta http-equiv="Refresh" content="0">';
  15. }
  16. //tworzenie zmiennych
  17. if(isset($_COOKIE['losowa'])){
  18. $cyfra_wygenerowana=(int)$_COOKIE['losowa'];
  19. }
  20. if(isset($_POST['cyfra'])){
  21. $cyfra_usera=(int)$_POST['cyfra'];
  22. }
  23. //ustawianie proby
  24. if(isset($_COOKIE['proba'])){
  25. $proba = $_COOKIE['proba'] ;
  26. }else{
  27. $proba=0;
  28. }
  29. //podpowiedzi
  30. if (empty($cyfra_usera))
  31. {
  32. echo 'Wpisz cyfrę (od 1 do 10)';
  33. echo '<form action="index.php" method="POST">CYFERKA: <input type=text name="cyfra"><input type=submit value="Wyślij"></form>';
  34. }elseif ($cyfra_wygenerowana>$cyfra_usera){
  35. echo 'Za mało, co ty taki skromny??';
  36. $proba++;
  37. setcookie ('proba', $proba, time()+3600);
  38. echo '<form action="index.php" method="POST">CYFERKA: <input type=text name="cyfra"><input type=submit value="Wyślij"></form>';
  39. }elseif ($cyfra_wygenerowana<$cyfra_usera){
  40. echo 'No nie przesadzaj aż tak.';
  41. $proba++;
  42. setcookie ('proba', $proba, time()+3600);
  43. echo '<form action="index.php" method="POST">CYFERKA: <input type=text name="cyfra"><input type=submit value="Wyślij"></form>';
  44. }elseif ($cyfra_wygenerowana==$cyfra_usera){
  45. $proba++;
  46. setcookie ('proba', $proba, time()+3600);
  47. echo 'Zgadłeś za '.$proba.' razem BRAWO!<br><a href="index.php">Kliknij</a> by zagrać jeszcze raz.';
  48. setcookie("losowa", "", time());
  49. setcookie("proba", "", time());
  50. }else{
  51. echo 'To sie nie powinno zdarzyć';
  52. }
  53. ob_end_flush();//Problemy z headers already sent
  54. echo '</body>';
  55. echo '</html>';
  56. ?>

Proszę zobaczyć wiersz od 23-28 czy to jest poprawnie? Czy cały skrypt jest poprawny? (oprócz tego nagłówka bo z tym nie umiem sobie inaczej poradzić)
Go to the top of the page
+Quote Post
nospor
post 16.06.2010, 12:32:19
Post #10





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




Powinno byc ok.
A co jesli ktoś będzie chciał na nowo zacząc zgadywac? Masz gdziesz czyszczenie tych ciastek?

No i tego DRY nadal nie zastosowałes smile.gif


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
xamrex
post 16.06.2010, 12:59:58
Post #11





Grupa: Zarejestrowani
Postów: 267
Pomógł: 1
Dołączył: 10.08.2007

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


Cytat
A co jesli ktoś będzie chciał na nowo zacząc zgadywac? Masz gdziesz czyszczenie tych ciastek?

  1. echo 'Zgadłeś za '.$proba.' razem BRAWO!<br><a href="index.php">Kliknij</a> by zagrać jeszcze raz.';
  2. setcookie("losowa", "", time());
  3. setcookie("proba", "", time());


czy jak '<form action="index.php" method="POST">CYFERKA: <input type=text name="cyfra"><input type=submit value="Wyślij"></form> przypisze zmiennej $formularz i będe to stosował będzie to DRY?

Ten post edytował xamrex 16.06.2010, 13:00:47
Go to the top of the page
+Quote Post
zend
post 16.06.2010, 13:08:41
Post #12





Grupa: Zarejestrowani
Postów: 580
Pomógł: 85
Dołączył: 25.03.2010
Skąd: Skrzyszów :)

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


DRY - pl. Nie Powtarzaj Się. Wwal cały kod z if'ów który się powtarza pod if'y i będzie ok, nic się nie będzie dublować
Go to the top of the page
+Quote Post
xamrex
post 16.06.2010, 13:15:50
Post #13





Grupa: Zarejestrowani
Postów: 267
Pomógł: 1
Dołączył: 10.08.2007

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


zaden kos sie nie powtarza.
<input type=text name="cyfra"><input type=submit value="Wyślij"></form> Muszę to mieć w if bo jeśli osoba wygra ot nie chcę mu pokazywać tego formularza (no bo co jesli nie chce grac?)
Go to the top of the page
+Quote Post
zend
post 16.06.2010, 13:20:08
Post #14





Grupa: Zarejestrowani
Postów: 580
Pomógł: 85
Dołączył: 25.03.2010
Skąd: Skrzyszów :)

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


  1. if(!$wygrał)
  2. {
  3. //formularz
  4. }


No i tu się różnimy, bo jak dla mnie to się powtarza praktycznie *3
  1. $proba++;
  2. setcookie ('proba', $proba, time()+3600);
  3. echo '<form action="index.php" method="POST">CYFERKA: <input type=text name="cyfra"><input type=submit value="Wyślij"></form>';


Ten post edytował zend 16.06.2010, 13:21:20
Go to the top of the page
+Quote Post
xamrex
post 16.06.2010, 14:00:59
Post #15





Grupa: Zarejestrowani
Postów: 267
Pomógł: 1
Dołączył: 10.08.2007

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


  1. if (empty($cyfra_usera))
  2. {
  3. echo 'Wpisz cyfrę (od 1 do 10)';
  4.  
  5. }elseif ($cyfra_wygenerowana>$cyfra_usera){
  6. echo 'Za mało, co ty taki skromny??';
  7. $proba++;
  8. setcookie ('proba', $proba, time()+3600);
  9.  
  10. }elseif ($cyfra_wygenerowana<$cyfra_usera){
  11. echo 'No nie przesadzaj aż tak.';
  12. $proba++;
  13. setcookie ('proba', $proba, time()+3600);
  14.  
  15. }
  16.  
  17.  
  18. if ($cyfra_wygenerowana==$cyfra_usera){
  19. $proba++;
  20. setcookie ('proba', $proba, time()+3600);
  21. echo 'Zgadłeś za '.$proba.' razem BRAWO!<br><a href="index.php">Kliknij</a> by zagrać jeszcze raz.';
  22. setcookie("losowa", "", time());
  23. setcookie("proba", "", time());
  24. }else{
  25. echo '<form action="index.php" method="POST">CYFERKA: <input type=text name="cyfra"><input type=submit value="Wyślij"></form>';
  26. }

Mniej więcej ten sposób byłby poprawny?
Go to the top of the page
+Quote Post
zend
post 16.06.2010, 14:04:33
Post #16





Grupa: Zarejestrowani
Postów: 580
Pomógł: 85
Dołączył: 25.03.2010
Skąd: Skrzyszów :)

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


Dalej powtarzasz ten sam kod
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: 7.07.2025 - 12:14