Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] Losowanie broni
Lethys
post
Post #1





Grupa: Zarejestrowani
Postów: 642
Pomógł: 2
Dołączył: 9.03.2006

Ostrzeżenie: (30%)
XX---


Witam,

Chcę zrobić losowanie nazwy broni która gracze będą dostawać.

Tabele wyglądają tak:

nazwa_bron


1 | Trujący
2 | Hipnotyczny

itp.

typ_bron


1 | Pistolet
2 | Rewolwer


Kod wygląda tak:


  1. <?php
  2.  
  3.  
  4. ini_set('display_errors', 1);
  5.  
  6. include ("config.php");
  7.  
  8. $nazwa_bron = mysql_fetch_array(mysql_query("select * from nazwa_bron") or die(mysql_error());
  9. $typ_bron = mysql_fetch_array(mysql_query("select * from typ_bron") or die(mysql_error());
  10.  
  11. // Zliczanie wszystkich wyników w tabeli
  12.  
  13. $liczenie1 = mysql_num_rows(mysql_query("select * from nazwa_bron")) or die(mysql_error());
  14. $liczenie2 = mysql_num_rows(mysql_query("select * from typ_bron")) or die(mysql_error());
  15.  
  16. // Losowanie nazwy broni
  17.  
  18. $losowanie_nazwy = rand(1,$liczenie1);
  19. $losowanie_typu = rand(1,$liczenie2);
  20.  
  21. // Wylosowanie broń
  22.  
  23. $wylosowana_nazwa = mysql_fetch_array(mysql_query("select * from nazwa_bron where id='$losowanie_nazwy'") or die(mysql_error());
  24. $wylosowany_typ = mysql_fetch_array(mysql_query("select * from typ_bron where id='$losowanie_typu'") or die(mysql_error());
  25.  
  26. echo ("$wylosowana_nazwa $wylosowany_typ");
  27.  
  28.  
  29. ?>


Kiedy odpalam kod, nic się nie dzieje. Żadem błąd nie wyskakuje tylko biała pusta strona. O co chodzi?


--------------------
filmy podobne do - wyszukiwarka podobnych filmów
motywacja do działania - Bądź Lepszy
Go to the top of the page
+Quote Post
nospor
post
Post #2





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




var_dump($wylosowana_nazwa);
Już coś wyskakuje?


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

"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
kadlub
post
Post #3





Grupa: Zarejestrowani
Postów: 548
Pomógł: 105
Dołączył: 4.06.2010

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


  1. echo $wylosowana_nazwa['nazwa_broni'];
  2. echo $wylosowany_typ['typ_broni'];
  3.  

tam gdzie masz nazwa broni wstawiasz nazwę kolumny z tabeli w której przechowujesz nazwe tej broni analogicznie z tym drugim

Ten post edytował kadlub 22.04.2011, 08:27:24
Go to the top of the page
+Quote Post
matino
post
Post #4





Grupa: Zarejestrowani
Postów: 175
Pomógł: 30
Dołączył: 9.08.2007

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


Nawiasów brak:
  1. $nazwa_bron = mysql_fetch_array(mysql_query("select * from nazwa_bron") or die(mysql_error()));
  2. $typ_bron = mysql_fetch_array(mysql_query("select * from typ_bron") or die(mysql_error()));

i tu:
  1. $wylosowana_nazwa = mysql_fetch_array(mysql_query("select * from nazwa_bron where id='$losowanie_nazwy'") or die(mysql_error()));
  2. $wylosowany_typ = mysql_fetch_array(mysql_query("select * from typ_bron where id='$losowanie_typu'") or die(mysql_error()));

Polecam jakieś dobre IDE wink.gif
Go to the top of the page
+Quote Post
Hpsi
post
Post #5





Grupa: Zarejestrowani
Postów: 483
Pomógł: 50
Dołączył: 15.03.2005
Skąd: Poznań

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


Btw, po co tyle zapytań jeśli możesz w mysql losować?:
  1. $wylosowana_nazwa = mysql_fetch_array(mysql_query("select * from nazwa_bron ORDER BY RAND()")) or die(mysql_error());
  2. $wylosowany_typ = mysql_fetch_array(mysql_query("select * from typ_bron ORDER BY RAND()")) or die(mysql_error());


Ten post edytował Hpsi+ 22.04.2011, 08:36:30


--------------------
Daiquiri: T1 = (dx/dt * s)^hpsi
Daiquiri: gdzie T1 - Twój czas przybycia na miejsce, dx/dt - prędkość, s droga
Daiquiri: brb trzeba by to poprawić T1 - Czas jaki Ci to zajmie
Daiquiri: Zatem T - czas dotarcia p T1 + T2 gdzie T2 = aktualny czas

===
po prostu kocham ją :D haha
Go to the top of the page
+Quote Post
#luq
post
Post #6





Grupa: Zarejestrowani
Postów: 589
Pomógł: 91
Dołączył: 22.05.2008
Skąd: Gliwice

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


Cytat(Hpsi+ @ 22.04.2011, 09:35:00 ) *
Btw, po co tyle zapytań jeśli możesz w mysql losować?:

Bo niestety to mało optymalne przy dużej liczbie rekordów. To zależy też co ile się takie losowanie odbywa, bo ja często korzystam z RAND() w MySQL jeśli skrypt jest odpalany raz dziennie przed crona


--------------------
Moja gra - scraby.io
Go to the top of the page
+Quote Post
Hpsi
post
Post #7





Grupa: Zarejestrowani
Postów: 483
Pomógł: 50
Dołączył: 15.03.2005
Skąd: Poznań

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


Cytat
Bo niestety to mało optymalne przy dużej liczbie rekordów

zdaje sobię sprawę z tego ze to średnio optymalne jest. Ale w tym konrketym przypadku: ile może być rodzajów broni 200-300? , ile typów broni 60/100 ? przy takiej ilości rekordów to jest wg mnie dopuszczalne smile.gif ale to moja opinia


--------------------
Daiquiri: T1 = (dx/dt * s)^hpsi
Daiquiri: gdzie T1 - Twój czas przybycia na miejsce, dx/dt - prędkość, s droga
Daiquiri: brb trzeba by to poprawić T1 - Czas jaki Ci to zajmie
Daiquiri: Zatem T - czas dotarcia p T1 + T2 gdzie T2 = aktualny czas

===
po prostu kocham ją :D haha
Go to the top of the page
+Quote Post
Lethys
post
Post #8





Grupa: Zarejestrowani
Postów: 642
Pomógł: 2
Dołączył: 9.03.2006

Ostrzeżenie: (30%)
XX---


Zrobiłem wersje z losowaniem w mysql

teraz kod wyglada tak:

  1. <?php
  2.  
  3.  
  4. ini_set('display_errors', 1);
  5.  
  6. include ("config.php");
  7.  
  8. $nazwa_bron = mysql_fetch_array(mysql_query("select * from nazwa_bron") or die(mysql_error()));
  9. $typ_bron = mysql_fetch_array(mysql_query("select * from typ_bron") or die(mysql_error()));
  10.  
  11.  
  12. // Losowanie broni
  13.  
  14. $wylosowana_nazwa = mysql_fetch_array(mysql_query("select * from nazwa_bron ORDER BY RAND()")) or die(mysql_error());
  15. $wylosowany_typ = mysql_fetch_array(mysql_query("select * from typ_bron ORDER BY RAND()")) or die(mysql_error());
  16.  
  17.  
  18.  
  19. echo $wylosowana_nazwa['nazwa'];
  20. echo " ";
  21. echo $wylosowany_typ['nazwa'];
  22.  
  23.  
  24. ?>


Wywala błąd:

Cytat
Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /srv/www/vhosts/westernlife.pl/httpdocs/losowanie.php on line 9 Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in /srv/www/vhosts/westernlife.pl/httpdocs/losowanie.php on line 10 Ognisty Pistolet


Jak wyłączę wyświetlanie błędów wszystko działa.

Jedynie mam problem z kodowaniem sad.gif

Plik php jest zapisany w UTF-8 bez BOM, w bazie danych Metoda porównywania napisów utf8_general_ci a mimo wszystko nie pobiera dobrze poslkich nazw.

Przykładowo: GĹ�oĹ�ny Pistolet



--------------------
filmy podobne do - wyszukiwarka podobnych filmów
motywacja do działania - Bądź Lepszy
Go to the top of the page
+Quote Post
Hpsi
post
Post #9





Grupa: Zarejestrowani
Postów: 483
Pomógł: 50
Dołączył: 15.03.2005
Skąd: Poznań

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


Po pierwsze smile.gif
Pierwsza dwa zapytania są zbędne:
  1. $nazwa_bron = mysql_fetch_array(mysql_query("select * from nazwa_bron") or die(mysql_error()));
  2. $typ_bron = mysql_fetch_array(mysql_query("select * from typ_bron") or die(mysql_error()));

W tym wypadku nie są potrzebne, wiec możesz je wywalić.
Wpisywałeś dane do bazy z pma czy z poziomu strony www?
bo czesto sie zdarza ze jeśli masz stronę kodowana w utf8 , i wrzucasz dane do bazy przez pma to wychodza krzaczki na stronie

A bład ci wywalał przez brak nawiasów tam smile.gif

Nospor - ja bym raczej płakał smile.gif

Ten post edytował Hpsi+ 22.04.2011, 09:08:44


--------------------
Daiquiri: T1 = (dx/dt * s)^hpsi
Daiquiri: gdzie T1 - Twój czas przybycia na miejsce, dx/dt - prędkość, s droga
Daiquiri: brb trzeba by to poprawić T1 - Czas jaki Ci to zajmie
Daiquiri: Zatem T - czas dotarcia p T1 + T2 gdzie T2 = aktualny czas

===
po prostu kocham ją :D haha
Go to the top of the page
+Quote Post
nospor
post
Post #10





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




Cytat
Jak wyłączę wyświetlanie błędów wszystko działa.
Nie wiadomo czy tu się śmiać czy płakać wink.gif
Błąd zapewne generują ci zapytania, które poprzednik kazał ci usunąć. Nie kasuj nigdy wyświetlania błędów, tylko usuwaj te błędy
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
#luq
post
Post #11





Grupa: Zarejestrowani
Postów: 589
Pomógł: 91
Dołączył: 22.05.2008
Skąd: Gliwice

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


Cytat(Hpsi+ @ 22.04.2011, 10:01:03 ) *
zdaje sobię sprawę z tego ze to średnio optymalne jest. Ale w tym konrketym przypadku: ile może być rodzajów broni 200-300? , ile typów broni 60/100 ? przy takiej ilości rekordów to jest wg mnie dopuszczalne smile.gif ale to moja opinia

Znaczy to bardzo trudno nam stwierdzić gdy nie znamy szczegółów, bo jeśli te losowanie będzie generowane przez użytkowników 1k razy na sekund to może spocić jednak serwer biggrin.gif


--------------------
Moja gra - scraby.io
Go to the top of the page
+Quote Post
Lethys
post
Post #12





Grupa: Zarejestrowani
Postów: 642
Pomógł: 2
Dołączył: 9.03.2006

Ostrzeżenie: (30%)
XX---


Ok, już wszystko działa. Usunąłem te dwa pierwsze zapytania bo faktycznie były zbędne.

Co dziwne kodowanie samo się naprawiło. Wyświetla się już poprawnie.


A tak na przyszłość, to w jaki sposób dodawać wpisy do bazy danych aby kodowanie było dobre? Skopiowanie z Notepada++ w kodowaniu UTF8 do pma pewnie nic nie da?

Jak jest z tym losowaniem w MYSQL? Bo luq napisał, że nie jest to optymalne rozwiązanie a mój skrypt będzie bardzo dużo razy dziennie odpalany. Powininenem zrobić to po staremu, czy może zostać losowanie w MYSQL?


--------------------
filmy podobne do - wyszukiwarka podobnych filmów
motywacja do działania - Bądź Lepszy
Go to the top of the page
+Quote Post
Ulysess
post
Post #13





Grupa: Zarejestrowani
Postów: 695
Pomógł: 65
Dołączył: 27.07.2009
Skąd: Y

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


w bazie utf_polish_ci
i przy połączniu z bazą
mysql_query('SET NAMES utf8');
Go to the top of the page
+Quote Post
Hpsi
post
Post #14





Grupa: Zarejestrowani
Postów: 483
Pomógł: 50
Dołączył: 15.03.2005
Skąd: Poznań

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


Cytat
A tak na przyszłość, to w jaki sposób dodawać wpisy do bazy danych aby kodowanie było dobre? Skopiowanie z Notepada++ w kodowaniu UTF8 do pma pewnie nic nie da?

Tego nie próbowałem więc nie powiem, ale jedna rada - napisz panel administratora gdzie możesz takie wpisy przez przeglądarke dodawać i problemu nie będzie


--------------------
Daiquiri: T1 = (dx/dt * s)^hpsi
Daiquiri: gdzie T1 - Twój czas przybycia na miejsce, dx/dt - prędkość, s droga
Daiquiri: brb trzeba by to poprawić T1 - Czas jaki Ci to zajmie
Daiquiri: Zatem T - czas dotarcia p T1 + T2 gdzie T2 = aktualny czas

===
po prostu kocham ją :D haha
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 Aktualny czas: 21.08.2025 - 10:59