Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][MySQL]Pokazywanie buttona jeśli użytkownik spełnia warunki
Forum PHP.pl > Forum > Przedszkole
Tidude
Witam.
Powiedzcie mi jak zrobić, by button był wyświetlany dla użytkownika który spełnia wymagania. Robię sobie grę przeglądarkową. Chcę by użytkownik który spełnia wymagania mógł zrealizować przetarg, jeśli ich nie spełnia to by nie mógł wziąć udziału w przetargu.

Linijki 9-12 zawierają element, który powinien działać a nie działa. Coś zrobiłem źle. Jeśli mógłby ktoś pomóc to byłbym wdzięczny.

Do realizacji przetargu użytkownik potrzebuje wymaganych w przetargu maszyn i surowców. Dane plik powinien pobierać z dwóch baz:
economy_przetarg - tutaj są informacje o wymaganiach i typie pojazdu jaki trzeba mieć by zrealizować przetarg.
  1. CREATE TABLE IF NOT EXISTS `economy_przetarg` (
  2. `nr_przetargu` int(11) NOT NULL,
  3. `user_id` int(11) NOT NULL,
  4. `nazwa_firmy` text collate utf8_unicode_ci NOT NULL,
  5. `opis_przetargu` text collate utf8_unicode_ci NOT NULL,
  6. `sposob_platnosci` text collate utf8_unicode_ci NOT NULL,
  7. `wymagania1` varchar(10) collate utf8_unicode_ci NOT NULL,
  8. `wymagania2` varchar(10) collate utf8_unicode_ci NOT NULL,
  9. `wymagania3` varchar(10) collate utf8_unicode_ci NOT NULL,
  10. `wymagania4` varchar(10) collate utf8_unicode_ci NOT NULL,
  11. `wymagania5` varchar(10) collate utf8_unicode_ci NOT NULL,
  12. `wymagania6` varchar(10) collate utf8_unicode_ci NOT NULL,
  13. `surowce` varchar(10) collate utf8_unicode_ci NOT NULL,
  14. `tekstylia` varchar(10) collate utf8_unicode_ci NOT NULL,
  15. `sprzet` varchar(10) collate utf8_unicode_ci NOT NULL,
  16. `zywnosc` varchar(10) collate utf8_unicode_ci NOT NULL,
  17. `kwota` varchar(10) collate utf8_unicode_ci NOT NULL,
  18. `punkty` int(11) NOT NULL,
  19. `aktywne` int(11) NOT NULL,
  20. PRIMARY KEY (`nr_przetargu`)
  21. ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;



economy_pojazdy_gracze - ta tabela zawiera informacje odnosnie pojazdow gracza, gdzie kolumna id zaiwera wartosc - 1 dla danego typu pojazdow.
  1. CREATE TABLE IF NOT EXISTS `economy_pojazdy_gracze` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `firma_id` int(11) NOT NULL,
  4. `nazwa_firmy` text NOT NULL,
  5. `wartosc` int(11) NOT NULL,
  6. `pracownikow` int(11) NOT NULL DEFAULT '1',
  7. `czas_produkcji` int(11) NOT NULL,
  8. `czas_rozbudowy` int(11) NOT NULL,
  9. `poziom` int(11) NOT NULL DEFAULT '1',
  10. `otwarta` int(11) NOT NULL DEFAULT '1',
  11. `produkcja` int(11) NOT NULL,
  12. `gracz_id` int(11) NOT NULL,
  13. `ostatnio_zwolniony` int(11) NOT NULL DEFAULT '0',
  14. `typ_pojazdu1` int(11) NOT NULL,
  15. PRIMARY KEY (`id`),
  16. KEY `firma_id` (`firma_id`,`gracz_id`)
  17. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;




Kod pliku przetarg.php
  1. <?php
  2.  
  3.  
  4. $firmy = mysql_query("select * from economy_przetarg where aktywne = 1");
  5. if(mysql_num_rows($firmy) == 0){
  6. echo "<p class='error'>Brak firm lub typów</p><br class='clear'>";
  7. } else {
  8. while($firma = mysql_fetch_array($firmy)){
  9. $opcja = 'nie stać Cię';
  10. if($pojazdy['typ_pojazdu'] = $firma['wymagania2'] and $pojazdy['typ_pojazdu'] = $firma['wymagania2']){
  11. $opcja = "<a href='przetarg.php?zaloz=".$firma['nr_przetargu']."' class='buttonS bGreyish'>załóż za ".$firma['kwota']."$</a>";
  12. }
  13.  
  14. $i++;
  15. $styl="style='background:#DADADA; padding:5px'";
  16. if($i % 2 == 1) $styl = " style='background:#B2B2B2; padding:5px'";
  17. echo "
  18.  
  19.  
  20. ".$opcja."
  21.  
  22. ";
  23. }
  24. echo "";
  25. }
  26.  
  27. ?>
csharp
aaaaaaaa jak zobaczyłem tyle kodu to aż mi się laptop zamknął... zrób proszę porządek i ogranicz to minimum abyśmy nie musieli się wysilać ;]
Tidude
wie ktoś może jak to zrobić? wstydnis.gif
kaktus283
No więc tak, nie pomogę Ci na pewno w kodzie w tym momencie ale ogranicz kod a zobaczę/(ymy) co da się zrobić.
Tidude
jak mogę ograniczyć jak te wszystkie informacje są potrzebne wink.gif

Jeśli ktoś nie wie jak pomóc, to niech nie zgania na natłok kodu..
kaktus283
Za robienie z nas idiotów nikt teraz nie powinien Ci pomóc ...
"Ten post edytował Tidude Dzisiaj, 14:40"
Moja wiadomość 14:32, gdy oglądałem było bardzo dużo HTML, niepotrzebnych funkcji...
!*!
Brakuje Ci podstawowej wiedzy o PHP, to nie są poprawne warunki

  1. if($pojazdy['typ_pojazdu'] = $firma['wymagania2'] and $pojazdy['typ_pojazdu'] = $firma['wymagania2']){

Ponieważ nic w nich nie sprawdzasz, a przypisujesz wartości.
Tidude
Otóż to, wiedzy nie posiadam. And zamieniłem na && ale też nie działało. Chcę żeby spełnienie np. wymaganych w przetargu warunków pokazywało $opcje.

PHP nie znam, działam na przykładach.
CTRL
Nie o to mu chodziło. Niedoświadczonemu człekowi trzeba od razu powiedzieć że if($a=5) działa tak samo jak $a=5; tylko że jeśli się to uda, a prawie na pewno to się stanie to wykona się warunek. Jeśli chcesz sprawdzić czy $a jest równe 5, musisz dać ==. if($a==5) jest poprawne, więc jeśli przed tym warunkiem dasz $a=4; nie spełni się ten if, czyli o to nam chodzi.

@Down:
!*! nie można być takim twardym jak kamień, biczem nikogo php nie nauczysz
!*!
Cytat
PHP nie znam, działam na przykładach.

To poznaj. http://pl.wikibooks.org/wiki/PHP

@up CTRL - e tam wink.gif
Tidude
Cytat(CTRL @ 4.07.2012, 20:02:06 ) *
Nie o to mu chodziło. Niedoświadczonemu człekowi trzeba od razu powiedzieć że if($a=5) działa tak samo jak $a=5; tylko że jeśli się to uda, a prawie na pewno to się stanie to wykona się warunek. Jeśli chcesz sprawdzić czy $a jest równe 5, musisz dać ==. if($a==5) jest poprawne, więc jeśli przed tym warunkiem dasz $a=4; nie spełni się ten if, czyli o to nam chodzi.

@Down:
!*! nie można być takim twardym jak kamień, biczem nikogo php nie nauczysz



Wiesz co zrobiłem tak:
  1. if($firma['wymagania1'] == $pojazdy['typ_pojazdu1'] && $firma['wymagania2'] == $pojazdy['typ_pojazdu2'] && $firma['wymagania3'] == $pojazdy['typ_pojazdu3'])


i dalej nie działa.
!*!
Czyli warunek jest zły. chcesz żeby wymaganie było takie jak typ pojazdu, wszystkie na raz? Zamiast AND, powinno być OR Sama konstrukacja bazy danych i tego jak chcesz to sprawdzić kuleje.
Tidude
Rozumiem, że stosując OR wymaganie1 lub wymaganie2 będzie musiało być takie jak jest w przetargu. Moją intencją jest by udział w przetargu był możliwy dopiero po zrealizowaniu wszystkich wymagań. Mijałoby się z celem ustalenie 4 wymagań, a tak naprawdę jedno by wystarczyło do jego realizacji.
Chyba, że źle rozumiem zastosowanie OR.
CTRL
Gdzie pobierasz tablicę $pojazdy?
Tidude
z pliku odpowiadającego za sesję użytkownika.


  1. //pobieramy dane gracza z bazy
  2. $pojazdy = mysql_fetch_array(mysql_query("select * from economy_firmy_gracze where gracz_id = ".$_SESSION['user']));




Sprawdziłem działanie OR, działa gdy jeden warunek z kilku jest spełniony. I właśnie tu cały ambarans, bo ja bym chciał by skrypt działał gdy są spełnione wszystkie warunki. Ale dzięki chłopaki za konstruktywne podpowiedzi, czegoś się już dowiaduję.
CTRL
A czy jesteś pewien że wszystko Ci się dobrze pobiera? pokaż zawartość tablic obu.
Tidude
Są na samej górze w 1 poście biggrin.gif
CTRL
Miałem na myśli print_r($pojazdy); smile.gif
Tidude
  1. CREATE TABLE IF NOT EXISTS `economy_firmy_gracze` (
  2. `id` int(11) NOT NULL AUTO_INCREMENT,
  3. `firma_id` int(11) NOT NULL,
  4. `nazwa_firmy` text NOT NULL,
  5. `wartosc` int(11) NOT NULL,
  6. `pracownikow` int(11) NOT NULL DEFAULT '1',
  7. `czas_produkcji` int(11) NOT NULL,
  8. `czas_rozbudowy` int(11) NOT NULL,
  9. `poziom` int(11) NOT NULL DEFAULT '1',
  10. `otwarta` int(11) NOT NULL DEFAULT '1',
  11. `produkcja` int(11) NOT NULL,
  12. `gracz_id` int(11) NOT NULL,
  13. `ostatnio_zwolniony` int(11) NOT NULL DEFAULT '0',
  14. `typ_pojazdu1` int(11) NOT NULL,
  15. `typ_pojazdu2` int(11) NOT NULL,
  16. `typ_pojazdu3` int(11) NOT NULL,
  17. `typ_pojazdu4` int(11) NOT NULL,
  18. `typ_pojazdu5` int(11) NOT NULL,
  19. `typ_pojazdu6` int(11) NOT NULL,
  20. PRIMARY KEY (`id`),
  21. KEY `firma_id` (`firma_id`,`gracz_id`)
  22. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;
!*!
To jest struktura bazy, a nie to co zwraca.
Tidude
Miałem tego kodu użyć w pliku przetarg.php?

Tak też zrobiłem i otrzymałem taką wiadomość zwrotną:


Cytat
Array ( [0] => 1 [id] => 1 [1] => 1 [firma_id] => 1 [2] => Budka z Hotdogami [nazwa_firmy] => Budka z Hotdogami [3] => 200 [wartosc] => 200 [4] => 1 [pracownikow] => 1 [5] => 1341438274 [czas_produkcji] => 1341438274 [6] => 1340967257 [czas_rozbudowy] => 1340967257 [7] => 1 [poziom] => 1 [8] => 1 [otwarta] => 1 [9] => 100 [produkcja] => 100 [10] => 1 [gracz_id] => 1 [11] => 0 [ostatnio_zwolniony] => 0 [12] => 1 [typ_pojazdu1] => 1 [13] => 1 [typ_pojazdu2] => 1 [14] => 1 [typ_pojazdu3] => 1 [15] => 1 [typ_pojazdu4] => 1 [16] => 1 [typ_pojazdu5] => 1 [17] => 1 [typ_pojazdu6] => 1 )


To wie ktoś jak to zrobić?
!*!
Rozwiązanie już padło. Skoro nie działa, to znaczy że, albo warunek jest zły, albo nie zgadzają się wartości jakie masz. Skoro pobierasz tylko economy_przetarg to skąd Ci się bierze tablica $pojazdy że chcesz z nią porównywać?
Tidude
Cytat(Tidude @ 4.07.2012, 20:25:38 ) *
z pliku odpowiadającego za sesję użytkownika.


  1. //pobieramy dane gracza z bazy
  2. $pojazdy = mysql_fetch_array(mysql_query("select * from economy_firmy_gracze where gracz_id = ".$_SESSION['user']));

!*!
  1. $firma['wymagania1'] == $pojazdy['typ_pojazdu1']

Sprawdź co zwracają te tablice.
Konstrukcja bazy, też nie jest najlepsza. Przemyśl to jeszcze raz.
Tidude
Dobrze zauważyłeś, bo
  1. $firma['wymagania1']
działa dobrze. Lecz
  1. $pojazdy['typ_pojazdu1']
zawsze wyświetla wartość 1. Nawet gdy wymagania1 = 5, to i tak typ_pojazdu1 wyświetli 1. Czyli wyświetla jeden typ pojazdu, obojętne jakieby były wymagania w przetargu.

Trzeba sprecyzować zapytanie do bazy danych?
  1. $pojazdy = mysql_query("select * from economy_firmy_gracze where gracz_id = ".$uzytkownik['gracz'].", typ_pojazdu1 = ".$firma['wymagania1'].", typ_pojazdu2 = ".$firma['wymagania2']);


Ciąglę próbuję i nic.
piotrex41
Przy WHERE jeśli chcesz dać kilka warunków dajemy AND a nie "," (przecinek).
  1. $pojazdy = mysql_query("select * from `economy_firmy_gracze` where `gracz_id` = '".$uzytkownik['gracz']."' AND `typ_pojazdu1` = '".$firma['wymagania1']."' AND `typ_pojazdu2` = '".$firma['wymagania2']."'");
Tidude
Witam.
Panowie porzuciłem tamten kod, ale ostatnio do niego wróciłem. Siedzę i się głowię.

Zmieniłem go trochę:

  1. $firmy = mysql_query("select * from economy_firmy_gracze inner join economy_przetarg on typ_pojazdu1 = wymagania1 AND typ_pojazdu2 = wymagania2 where gracz_id = ".$uzytkownik['gracz']);
  2. if(mysql_num_rows($firmy) == 0){
  3. echo "<p class='error'>Nie posiadasz pojazdów</p><br class='clear'>";
  4. }
  5.  
  6.  
  7. else {
  8. while($firma = mysql_fetch_array($firmy)){
  9.  
  10. $opcja = 'nie posiadasz któregoś pojazdu';
  11. if(($firma['typ_pojazdu1'] == $firma['wymagania1']) && ($firma['typ_pojazdu2'] == $firma['wymagania2'])) {
  12. $opcja = "<a href='przetarg.php?zaloz=".$firma['nr_przetargu']."' class='buttonS bGreyish'>załóż za ".$firma['kwota']."$</a>";
  13.  
  14.  
  15. }
  16.  
  17. echo "
  18.  
  19.  
  20. <tr>
  21. <td>".$firma['nazwa_przetargu']."</td>
  22. <td>".$firma['opis_przetargu']."</td>
  23. <td>".$firma['sposob_platnosci']."</td>
  24. <td class='center'><img src='http://camshow.webd.pl/images/pojazdy/".$firma['firma_id'].".jpg' style='max-height:30px;max-width:30px;'/> </td>
  25. <td class='center'>".$firma['wymagania1']."</td>
  26. <td class='center'>".$firma['nazwa_firmy']."</td>
  27. <td class='center'>".$opcja."</td>
  28. </tr>
  29.  
  30.  
  31.  
  32. ";
  33. }
  34. }


I jak zrobiłem, że potrzebny był tylko jeden warunek - typ_pojazdu1 = wymagania1 to wszystko śmigało. Ale jak już chcę, żeby spełniało dwa warunki to nie działa.

Sprawdziłem print_r($firmy); i otrzymałem: Resource id #13


Ma ktoś jakiś pomysł?
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.