Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]while, for i tablica
Darkstorm
post
Post #1





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 21.08.2010

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


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 (IMG:style_emoticons/default/smile.gif)

Ten post edytował Darkstorm 30.08.2010, 14:26:35
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 2)
thek
post
Post #2





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




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ć (IMG:style_emoticons/default/winksmiley.jpg)
Powód edycji: [thek]: literka ą w rząd i ę w zajęte rozwalała kolorowanie składni ;)
Go to the top of the page
+Quote Post
Darkstorm
post
Post #3





Grupa: Zarejestrowani
Postów: 12
Pomógł: 0
Dołączył: 21.08.2010

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


ok. rozumiem o co chodzi. spróbuje Twoim sposobem. Wydaje mi się że ogarnę (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 01:45