Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]while, for i tablica
Forum PHP.pl > Forum > Przedszkole
Darkstorm
Witam. Od razu przechodzę do rzeczy. Wyobraźmy sobie tabelę która reprezentuje układ sali z wyborem miejsc na seans.

Generuję ją w taki sposób:
  1. for ($r = 65; $r <= 80; $r++) {
  2. $rzad = chr($r);
  3. echo "<tr id=\"$rzad\">";
  4. for ($j = 1; $j <= 15; $j++) {
  5.  
  6. echo "<td bgcolor=\"#22B14C\">
  7. <input class=\"miejsca\"
  8. type=\"checkbox\"
  9. value=\"" .$rzad .$j . "\"
  10. name=\"miejsce[]\" />" .$rzad.$j . "</td>";
  11.  
  12. }
  13. echo "</tr>";
  14. }


i mam tablicę 15x16. Każda komórka ma wartość przypisaną z rzędu i miejsca. więc mamy rzędy od A do P oraz miejsca od 1 do 15. Komórka więc przyjmuje wartość np A10, H11 itd. Jeśli user zaznaczy odpowiednie miejsce i wciśnie przycisk Rezerwuj to do bazy danych zostają wysłanie dane o czasie rezerwacji, użytkowniku, miejscach i numerze seansu na który jest rezerwacja.

teraz chcę rozbudować powyższy kod o sprawdzenie, czy dane miejsce jest już zajęte i jeśli tak, to zmieniać kolor komórki i ustawiać checkboxa na wyłączonego. No i jest problem. Żeby sprawdzić czy miejsce jest zajęte pobieram dane o seansie z bazy :
  1. mysql_query('SET NAMES utf8');
  2. $miejsca = "SELECT miejsca FROM rezerwacje WHERE id_filmu ='$numer'";
  3. $sprawdz = mysql_query($miejsca) or die("Zapytanie do bazy nie powiodło się. " . mysql_error());


Dla swojej wygody każde zaznaczone miejsce na sali (nawet wybrane przez jednego użytkownika) zapisuje się jako nowy wiersz w kolumnie. Więc jeśli użytkownik zaznacz dwa miejsca w bazie będą dwa wpisy. Tak wymyśliłem na potrzeby późniejszego zliczania ilości rezerwacji miejsc na dany seans.

aby rozbudować for o sprawdzanie czy miejsce jest zajęte muszę w pierwszej kolejności pobrać zajęte miejsca z zapytania do bazy danych:

  1. while ($jakie = mysql_fetch_assoc($sprawdz)) {
  2.  
  3. $miejsce_sala = $jakie['miejsca'];
  4. }


pytanie jak połączyć tego while z for powyżej i w jak określić warunek zmiennego wyglądu tła komórki jeśli dane miejsce jest zajęte?

z góry dziękuję za wszelką pomoc i zainteresowanie problemem smile.gif
thek
A więc zrób całość już na etapie przygotowania danych. Pobierz tylko zajętość sali na dany seans filmowy dla danej sali. Stwórz 2-wymiarową tablicę z domyślnymi wartościami ustawionymi na "wolne" (true, 1 czy jak tam chcesz - masz pełną dowolność). Pobierasz wszystkie rekordy i po kolei parsując wyniki "zaznaczasz", które miejsce zajęte. Potem to już tylko wyświetlasz odczytując ładnie tablicę. Jeśli zajęte to ustawiasz inny kolor tła/klasę czy co tam chcesz i nie dajesz checkboxa.

EDIT: Parsujesz to znaczy zamieniasz wpis z bazy w stylu G13 na $zajete = array('G' => array('13' => true) ); W sumie nawet nie musiałbyś robić tabeli 2-wymiarowej na starcie. Wystarczy byś miał sparsowane wszystkie zajęte i w pętli byś tylko odczytywał czy
  1. if( isset( $zajete[(string)$rzad][$j] ) ) {
  2. //jakieś info/operacje, że miejsce zajęte
  3. } else {
  4. //jakieś info,/operacje że wolne
  5. }
Oczywiście może być inaczej, ale to jedno z moim zdaniem normalniejszych rozwiązań. Są lepsze, ale po co kombinować w takim wypadku? Problem jest wystarczająco prosty by go nie było sensu udziwniać winksmiley.jpg
Darkstorm
ok. rozumiem o co chodzi. spróbuje Twoim sposobem. Wydaje mi się że ogarnę winksmiley.jpg
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.