Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MYSQL]Losowanie liczby różnej od liczb z bazy
Forum PHP.pl > Forum > Przedszkole
miccom
Witam serdecznie.
Chciałbym wylosować odpowiednie liczby ze zbioru liczb, ale różne od liczb już dodanych do bazy danych.
Jak to ugryźć?
Mam takie coś.
  1. <?php
  2. $mapa=rand(1,120);
  3. $pole=rand(1,100);
  4. ?>


A pola w bazie są takie same jak nazwy czyli: mapa: int i pole: int.
Jak skonstruować zapytanie do bazy?
Proszę o odpowiedzi.
Pozdrawiam.
miccom
kefirek
Ja bym to zrobił tak
  1. <?php
  2. $wynik = mysql_query("SELECT * FROM test");
  3. while($r = mysql_fetch_assoc($wynik)) {
  4. $mapa[]=$r['mapa'];
  5. $pole[]=$r['pole'];
  6. }
  7. ?>


I potem sprawdzsz czy wylosowane liczby istnieją w tablicy $mapa i $pole za pomcą
is_array" title="Zobacz w manualu PHP" target="_manual

jak istnieje to losujesz jeszcze raz jak nie to wyswietlasz lub robisz co tam chcesz dalej
miccom
Cytat(kefirek @ 6.05.2009, 19:42:26 ) *
Ja bym to zrobił tak
  1. <?php
  2. $wynik = mysql_query("SELECT * FROM test");
  3. while($r = mysql_fetch_assoc($wynik)) {
  4. $mapa[]=$r['mapa'];
  5. $pole[]=$r['pole'];
  6. }
  7. ?>


I potem sprawdzsz czy wylosowane liczby istnieją w tablicy $mapa i $pole za pomcą
is_array" title="Zobacz w manualu PHP" target="_manual

jak istnieje to losujesz jeszcze raz jak nie to wyswietlasz lub robisz co tam chcesz dalej

No tak myślałem, ale jak zrobić warunek jeśli podane dane już są?
I jak wykonać tą pętlę.
marcio
Cytat
No tak myślałem, ale jak zrobić warunek jeśli podane dane już są?
I jak wykonać tą pętlę.

http://funkcje.net/view/3/1/188/

Robisz normalna petle for lub foreach i jedziesz po danych.
miccom
Witam ponownie.
Zrobiłem coś takiego:
  1. <?php
  2. $mapa=rand(1,120);
  3. $pole=rand(1,100);
  4. $login='testowe';
  5. include('config.php');
  6. $wynik = mysql_query("SELECT * FROM miasta");
  7. while($r = mysql_fetch_assoc($wynik)) {
  8. $mapa[]=$r['mapa'];
  9. $pole[]=$r['koord'];
  10. $login[]=$r['user'];
  11. }
  12. $a = array(array($mapa[]),array($pole[]),array($login[]));
  13.  
  14. if (in_array("$mapa", "$pole", "$login"), $a) {
  15.    echo "znaleziono już miasto na koordach:$pole<br />
  16.          właściciel $login, na mapie $mapa";
  17. }else{
  18.  
  19.  echo "mogę losować koordy nowego miasta";
  20.  //dalsze instrukcje
  21. }
  22. ?>

Ale nie działa, pewnie jest coś źle;/ Pomocy!
marcio
  1. <?php
  2. $mapa=rand(1,120);
  3. $pole=rand(1,100);
  4. $login='testowe';
  5. include('config.php');
  6. $wynik = mysql_query("SELECT * FROM miasta");
  7. while($r = mysql_fetch_assoc($wynik)) {
  8.  
  9.  $mapa[] = $r['mapa'];
  10.  $pole[] = $r['koord'];
  11.  $login[] = $r['user'];
  12.  
  13. }
  14.  
  15. $a = array($mapa, $pole, $login);
  16.  
  17. if(in_array($mapa, $a) && in_array($pole, $a) && in_array($login, $a)) {
  18.  
  19.    echo "znaleziono już miasto na koordach:$pole<br />właściciel $login, na mapie $mapa";
  20.  
  21. }
  22.  
  23. else {
  24.  
  25.  echo "mogę losować koordy nowego miasta";
  26.  //dalsze instrukcje
  27. }
  28. ?>

Kombinuj cos w ten desen albo w ogole to zmiennej $a daj np tak:
  1. <?php
  2. $a = array(0 => $mapa, 1 => $pole, 2 => $login);
  3. ?>

Rob print_r na tablice $a i zobacz jakie daje ci dane ktore zapisuje w petli while() i mi pokarz.
miccom
Zrobiłem coś takiego:$mapa=rand(1,50);
plik los.php
  1. <?php
  2. $mapa=rand(1,50);
  3. $pole=rand(1,100);
  4. $login=$l;//login zapisany jest w bazie danych
  5. include('config.php');
  6. $zapytanie="SELECT * FROM miasta WHERE mapa='$mapa' AND koord='$pole' AND user='$login'";
  7. $wynik=mysql_query($zapytanie);
  8. $cnt = mysql_num_rows($wynik);
  9. if($cnt==0){
  10.  //budowanie miasta (update koordów mapy i pola do bazy)
  11.  }else{
  12.  Header("Location: los.php");//jeśli   $cnt != 0 (czyli ktoś jest na takich danych, przenoszę przez header ponownie do tego pliku, i on znów losuje.
  13. //Musiałbym mies strasznego pecha aby zapętlić tak, że skrypt będzie się wykonywał parę minut;/
  14.    }
  15. ?>
marcio
Nie rozumiem to bylo pytanie czy stwierdzenie?
miccom
Witaj.
Robiąc tak jak podałeś:

  1. <?php
  2. $mapa=rand(1,120);
  3. $pole=rand(1,100);
  4. $login='testowe';
  5. include('config.php');
  6. $wynik = mysql_query="SELECT * FROM miasta";
  7. while($r = mysql_fetch_assoc($wynik)) {
  8.  
  9. $mapa[] = $r['mapa'];
  10. $pole[] = $r['koord'];
  11. $login[] = $r['user'];
  12.  
  13. }
  14.  
  15. $a = array(0 => $mapa, 1 => $pole, 2 => $login);
  16.  
  17.  
  18. if(in_array($mapa, $a) && in_array($pole, $a) && in_array($login, $a)) {
  19.  
  20.   echo "znaleziono już miasto na koordach:$pole<br />właściciel $login, na mapie $mapa";
  21.  
  22. }
  23.  
  24. else {
  25.  
  26. echo "mogę losować koordy nowego miasta";
  27. //dalsze instrukcje
  28. }
  29. ?>

Wyciągasz dane z danych, bo $mapa jest wylosowane na samej górze.
Po za tym wrzuciłem powyższy kod: i nie działa, pusta strona;/
marcio
Sam $mapa wrzucales do tablicy to raz.

Dwa to nie powiedzialem ze kod bedzie dziala tylko ze masz robic cos w ten desen co ci podalem bo miales duzo bykow.

Trzy:
  1. <?php
  2. $wynik = mysql_query="SELECT * FROM miasta";
  3. while($r = mysql_fetch_assoc($wynik)) {
  4.  
  5. $mapa[] = $r['mapa'];
  6. $pole[] = $r['koord'];
  7. $login[] = $r['user'];
  8.  
  9. }
  10. ?>

Zrob potem:
  1. <?php
  2. print_r($mapa);
  3. print_r($pole);
  4. print_r($login);
  5. ?>

I pokaz chodz kawalek bo nawet nie wiem czy ci pobiera dane potem zrobi sie reszte.

P.S i dawaj sobie zawsze error_reporting(E_ALL) zeby kod debugowac.

P.S2 zapomnialem dodac ze jak tak bedziesz robil:
  1. <?php
  2. $login[] = $r['user'];
  3. ?>

to dostaniesz tylko ostatnie dane bo nadpisujesz za kazdym obejsciem petli daj .= zamiast =
miccom
Ok.
Działa.
Otrzymałem takie dane:
Mam dwa wpisy testowe a wynik to
Array ( [0] => 1 [1] => 1 ) Array ( [0] => 24 [1] => 56 ) Array ( [0] => testowe [1] => bierun )
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.