Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: sprawdzanie czy zmienne nie są równe
Forum PHP.pl > Forum > PHP
WMP
  1. <?php
  2. $title="Loteria";
  3. require_once("includes/head.php");
  4.  
  5. if ($player -> location != 'Enaria') 
  6. {
  7. error ('W tym mieście nie ma lotrii. Dostępna jest ona tylko w Enarii');
  8. }
  9.  
  10. /*
  11. / Kupno kuponu :)
  12. */
  13. if (isset ($_GET['view']) && $_GET['view'] == 'kupon'){
  14. $loteria_on_off = $db -> Execute("SELECT on_off FROM loteria WHERE id=1"); //Jeżlei bedzie mozna kupic bilet wartosc w komórce on_off dla id 1 będzie wyności
    ć 1
  15. if ($loteria_on_off == '0') 
  16. {
  17. error ('<span id="typing">Przepraszam, ale <b>nie można</b> teraz kupić kuponu. Właśnie trwa losowanie. Proszę przyjdˇ póˇniej.</span>');
  18. }
  19. $cena1 = $db -> Execute("SELECT cena FROM loteria WHERE id=1");
  20. $cena = $cena1 -> fields['cena'];
  21. $cena1 -> Close();
  22. $smarty -> assign('Cena', $cena);
  23. if (isset ($_GET['step']) && $_GET['step'] == 'kupon_kupno'){
  24. if ($player -> credits <= $cena) 
  25. {
  26. error ("<span id="typing">Nie masz tyle pieniędzy! Potrzebujesz ".$cena."</span>");
  27.  }
  28. $db -> Execute("UPDATE players SET credits=credits-".$cena." WHERE id=".$player -> id);
  29.  $db -> Execute("UPDATE skarbiec set credits=credits+".$cena." where id=1");
  30.  //Określenie numeru kuponu
  31.  $limit = $db -> Execute("SELECT loteria FROM players ORDER BY loteria DESC LIMIT 0,1");
  32.  $limit1 = $limit -> fields['loteria'];
  33.  $limit -> Close();
  34.  //END okreslanie numeru kuponu
  35. $db -> Execute("UPDATE players SET loteria=".++$limit1." WHERE id=".$player -> id);
  36. error ("<span id="typing">Kupiłeś już kupon. Jest to kupon nr. <b>".++$limit1."</b>. Jeśli zapomnisz jaki masz numer, idź do loterii. Niestety dziśiejszy regula
    min nie zewzwala na posiadanie więcej niż 1 kuponu. Wkrótce powinno to się zmieni
    ć.</span>"
    );
  37. }
  38. /*
  39. / Lista nagród
  40. */
  41. $pm = $db ->Execute("SELECT * FROM loteria_item");
  42. $arrid = array();
  43. $arrnazwa = array(0);
  44. $arrilosc = array();
  45. $i = 0;
  46. while (!$pm -> EOF) 
  47. {
  48. $arrid[$i] = $pm -> fields['id'];
  49. $arrnazwa[$i] = $pm -> fields['nazwa'];
  50. $arrilosc[$i] = $pm -> fields['ilosc'];
  51. $pm -> MoveNext();
  52. $i = $i + 1;
  53. }
  54. $pm -> Close();
  55. $smarty -> assign ( array("Nazwa" => $arrnazwa, "Ilosc" => $arrilosc));
  56.  
  57.  
  58. } // zamknięcie ifa view kupno
  59. if (isset ($_GET['view']) && $_GET['view'] == 'admin')
  60. {
  61. if ($player -> rank != "Admin") 
  62. {
  63. error ("Nie jestes adminem! Spadaj!");
  64. }
  65. if (isset ($_GET['step']) && $_GET['step'] == 'losowanie')
  66. {
  67. if ($loteria_on_off != 1) //zamkniecie loterii gdy otwarta
  68. {
  69. $db -> Execute("UPDATE on_off SET loteria=1 WHERE id=1");
  70. }
  71. //Losowanie nagrody pierwszego stopnia
  72. $limit = $db -> Execute("SELECT loteria FROM players ORDER BY loteria DESC LIMIT 0,1");
  73. $limit1 = $limit -> fields['loteria'];
  74. $limit -> Close();
  75. $wylosowany1 = rand (1, $limit1);
  76. /* Tabela możliwej ilość osób nagrodzonych:
  77.  
  78.  osoby  miejsce
  79. wygrana nr. 1 1 6
  80. wygrana nr. 2 3 21
  81. wygrana nr. 3 5 35
  82. wygrana nr. 4 10  70
  83. wygrana nr. 5 30  210
  84. */
  85. $db -> Execute("UPDATE loteria SET nagrodzony1=".$wylosowany1." WHERE id=1");
  86. //END losowanie nagrody pierwszego stopnia
  87. //Losowanie nagrody drógiego stopnia
  88. $wylosowany2 = rand (1, $limit1);
  89. //Cały if sprawdzający
  90. if ($wylosowany2 == $wylosowany1) //sprawdznaie cyz wylosowany2 jest równe wylosowany1
  91. {
  92.  while ($wylosowany2 == $wylosowany1)  
  93. {
  94.  srand((double) microtime() * 10000000);
  95. $wylosowany2 = rand (1, $limit1);
  96. }
  97. }
  98.  
  99. //END Cały if sprawdzający
  100.  
  101.  
  102.  
  103.  
  104.  
  105.  
  106.  
  107.  
  108. //END losowanie nagrody drógiego stopnia
  109. }//zamkniecie ifa losowanie
  110. }//zamknecie ifa admin
  111. $smarty -> assign(array("Step" => $_GET['step'], "View" => $_GET['view']));
  112. $smarty -> display ('loteria.tpl');
  113. require_once("includes/foot.php");
  114. ?>


Dałem wyżej kod całego pliku. Probelm zacyzna się od linijki 71 do 100. Otóż ten kod ma weryfikować czy wartosci w danych zmiennych nie równaja się sobie. Jak widac (od 91 do 98 linijki) wsadizłem if który sprawdza czy zmienne równaja się sobie. Jeśli tak to pętla losuje tylke razy aby zmeinne nie równały się sobie. I zobaczcie jaki cód, chodzi. Problem zaczyna się w gdy dojdzie 3 zmienna($wylosowany22 nie ma tej zmeinnej bo dopiero chce ja stworzyć), która ma się nie równać pozostałym. Potem dochodiz następna o nazwie $wylosowany23. Potem dochodiz $wylosowany3, $wylosowny32 ... $wylosowny34, $wylosowany35. I zmeinne z wylosowaną nagrodą nr 4 czyli $wylosowny4, $wylosowny42...$wylosowny49 . Potem nadszedł czas na nagrodę nr 5 czyli $wylosowny5...$wylosowny529 . I te wsyztkie zmienn emają się sobie nie równać!!! Więc jak to zapisac? Aby nei robic pętli w pętli ? Mam nadzieje ze załapaliście zasade.

To ma być taka loteria a w loterii jets tak ze jedna osoba nie moze wygrac 2 nagród, wiec id gracza(osoby) nie moze sie powtarzać.
em1X
Dzieje sie tak, poniewaz zle do problemu podchodzisz :/

Chcesz wylosowac ludzi, ktorzy wygrywaja tak? Nie chce mi sie tego twojego kodu analizowac, bo jest brzydki sadsmiley02.gif

Sprobuj moze lepiej cos w stylu:

  1. SELECT * FROM uzytkownicy ORDER BY rand() LIMIT 5


i masz wylosowanych 5 losowych uzytkownikow (bez powtorzen)..
WMP
o wielkie dizęki, ten kod jets piękny! smile.gif
Tylko powiedz mi jak potem z tych wylosowanychy 5 ludiz wybrac pierwszego potem drógiego trzeciego...?
em1X
  1. <?php
  2. $source = $db->Execute("select * from uzytkownicy order by rand() limit 5");
  3.  
  4. while (! $source->EOF)
  5. {
  6.  echo $source->fields['login'] . "<br/>";
  7. }
  8. ?>
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.