Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Losowanie broni
Forum PHP.pl > Forum > Przedszkole
Lethys
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?
nospor
var_dump($wylosowana_nazwa);
Już coś wyskakuje?
kadlub
  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
matino
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
Hpsi
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());
#luq
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
Hpsi
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
Lethys
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

Hpsi
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
nospor
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
#luq
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
Lethys
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?
Ulysess
w bazie utf_polish_ci
i przy połączniu z bazą
mysql_query('SET NAMES utf8');
Hpsi
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
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.