Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]wypożyczenie maszyn
Forum PHP.pl > Forum > Przedszkole
krzesik
Witam,

mam pewien problem ze skryptem odpowiedzialnym za wyświetlenie maszyn wolnych i wypożyczonych

mam tablicę z maszynami:
  1. CREATE TABLE `obiekty` (
  2. `id_obiektu` int(10) NOT NULL,
  3. `nazwa` text NOT NULL,
  4. `typ` text NOT NULL,
  5. `aktywny` int(1) NOT NULL,
  6. `cena` decimal(9,2) NOT NULL,
  7. `czas` text NOT NULL
  8. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;

ta tablica przechowuje wszystkie maszyny

kolejną tablicą jest tablica gdzie zapisywane są rekordy z wynajmem:
  1. CREATE TABLE `rent` (
  2. `id_rent` int(10) NOT NULL,
  3. `id_obiektu` int(11) NOT NULL,
  4. `start` datetime NOT NULL,
  5. `stop` datetime NOT NULL,
  6. `cena` decimal(9,2) NOT NULL,
  7. `czas_najmu` text NOT NULL,
  8. `wartosc_najmu` decimal(9,2) NOT NULL,
  9. `login_start` text NOT NULL,
  10. `login_stop` text NOT NULL
  11. ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci;
  12.  


w jaki sposób pokazać wszystkie maszyny z bazy to wiem:

  1. $Obiekty = "SELECT * FROM obiekty WHERE aktywny='1' ORDER BY typ ASC, nazwa ASC";
  2. $Obiekty_ = $mysqli -> query($Obiekty);

ale jak pokazać również maszyny które aktualnie sa wypożyczone?

zrobiłem tak, ale pokazuje TYLKO wypożyczone:

  1. ........
  2.  
  3. $Obiekty = "SELECT * FROM obiekty WHERE aktywny='1' ORDER BY typ ASC, nazwa ASC";
  4. $Obiekty_ = $mysqli -> query($Obiekty);
  5.  
  6.  
  7. $lp == 0;
  8.  
  9. while($r = mysqli_fetch_array($Obiekty_))
  10. {
  11. $Status = "SELECT * FROM rent WHERE id_obiektu = '$r[id_obiektu]' AND start!='' and stop =''";
  12. $Status_ = $mysqli -> query($Status);
  13.  
  14. $lp++;
  15.  
  16. echo '<tr>';
  17. echo '<td>';
  18.  
  19. if($Status_-> num_rows < 1)
  20. {
  21. echo '
  22. <div class="alert alert-info" style="height:center; width: center; border-radius: 0.5rem;" role="alert">
  23. L.p. '.$lp.' <br />
  24. Typ: '.$r[typ].' | Nr: '.$r[nazwa].'
  25. </div>
  26. ';
  27. echo '</td>';
  28. echo '</tr>';
  29. }
  30. else ($Status_-> num_rows > 0)
  31. {
  32. echo '
  33. <div class="alert alert-danger" style="height:center; width: center; border-radius: 0.5rem;" role="alert">
  34. L.p. '.$lp.' <br />
  35. Typ: '.$r[typ].' | Nr: '.$r[nazwa].'
  36. </div>
  37. ';
  38. echo '</td>';
  39. echo '</tr>';
  40. }
  41. }
  42.  
  43. .................
  44.  
  45.  




nospor
skoro START i STOP to pola typu DATETIME lub NULL to czemu ty to porownujesz do pustego tekstu? chyba powinines porownywac do NULL, nie sadzisz?

ps: i juzz czystej ciekawosci: czemy pola czas, czas_najmu, login_start i login_end to pola typu TEXT?
krzesik
to mi nie zrobiło żadnej różnicy, (w wyniku)
czy mam:
  1. $Status = "SELECT * FROM rent WHERE id_obiektu = '$r[id_obiektu]' AND start!='' and stop =''";
  2. $Status_ = $mysqli -> query($Status);

czy też mam:
  1. $Status = "SELECT * FROM rent WHERE id_obiektu = '$r[id_obiektu]' AND start IS NOT NULL and stop IS NULL";
  2. $Status_ = $mysqli -> query($Status);
  3.  

za każdym razem otrzymuję trafienie tylko dwóch zajętych rekordów, ale nie mam ani jednego z bazy obiektów

odpowiadając na Twoje pytanie, to prototyp dopiero "idę" w kierunku tych pól
nospor
pokaz przykladowe dane jakie masz w bazie i przykladowy wynik jaki chcesz otrzymac bo poprawdzie nie kumam co dostajesz i czemu wg ciebie to jest zle.
krzesik
tablica obiektów
  1. INSERT INTO `obiekty` (`id_obiektu`, `nazwa`, `typ`, `aktywny`, `cena`, `czas`) VALUES
  2. (1, '1', 'piła', 1, '20.00', '3600'),
  3. (2, '2', 'łopata', 1, '20.00', '3600'),
  4. (3, '3', 'młotek', 1, '20.00', '3600');


tablica zajętości obiektów
  1. INSERT INTO `rent` (`id_rent`, `id_obiektu`, `start`, `stop`, `cena`, `czas_najmu`, `wartosc_najmu`, `login_start`, `login_stop`, `start_str`, `stop_str`) VALUES
  2. (1, 1, '2024-08-26 14:32:10', '0000-00-00 00:00:00', '20.00', '', '0.00', 'a@b.pl', '', '2024-08-26 12:32:50', '0000-00-00 00:00:00'),
  3. (2, 2, '2024-08-26 15:20:09', '0000-00-00 00:00:00', '20.00', '', '0.00', 'a@b.pl', '', '2024-08-26 13:20:36', '0000-00-00 00:00:00');


pokazuje mi tylko rekordy z tablicy rent, a powinno pokazać również rekord '3' z tablicy obiekty
nospor
Iterujesz po glowny OBIEKTY wiec powinno ci pokazac wszystko. Jedyne co mi przechodzi do glowy to ten twoj IF ELSE jest zwalony. Juz nie wspominaja html

Sprobuj tak i powiedz co zwraca

  1. $Obiekty = "SELECT * FROM obiekty WHERE aktywny='1' ORDER BY typ ASC, nazwa ASC";
  2. $Obiekty_ = $mysqli -> query($Obiekty);
  3.  
  4.  
  5. $lp == 0;
  6.  
  7. while($r = mysqli_fetch_array($Obiekty_))
  8. {
  9. $Status = "SELECT * FROM rent WHERE id_obiektu = '$r[id_obiektu]' AND start!='' and stop =''";
  10. $Status_ = $mysqli -> query($Status);
  11.  
  12. $lp++;
  13.  
  14. echo '<tr>';
  15. echo '<td>od obiektu: ' . $r[id_obiektu];
  16.  
  17. if($Status_-> num_rows == 0)
  18. {
  19. echo '
  20. <div class="alert alert-info" style="height:center; width: center; border-radius: 0.5rem;" role="alert">
  21. L.p. '.$lp.' <br />
  22. Typ: '.$r[typ].' | Nr: '.$r[nazwa].'
  23. </div>
  24. ';
  25. }
  26. else
  27. {
  28. echo '
  29. <div class="alert alert-danger" style="height:center; width: center; border-radius: 0.5rem;" role="alert">
  30. L.p. '.$lp.' <br />
  31. Typ: '.$r[typ].' | Nr: '.$r[nazwa].'
  32. </div>
  33. ';
  34. }
  35. echo '</td>';
  36. echo '</tr>';
  37.  
  38. }
krzesik
teraz jest jak być powinno, dziękuję!
nospor
Pamietaj.:

Nie ma skladni ELSE (warunek)
jest skladnia
albo ELSE
albo ELSE IF (warunek)

Zas gdy twoj IF ma tylko dwa stany to wtedy sie nie uzywa IF....ELSE IF tylko IF.. ELSE

przekombinowales z IFem poprostu.


Kolejna sprawa to nazywaj z sensem twoje zmienne

np:
nie
$Obiekty = "SELECT * FROM obiekty WHERE aktywny='1' ORDER BY typ ASC, nazwa ASC";
$Obiekty_ = $mysqli -> query($Obiekty);

a:
$sqlObiekty = "SELECT * FROM obiekty WHERE aktywny='1' ORDER BY typ ASC, nazwa ASC";
$resObiekty = $mysqli -> query($Obiekty);

Kolejna rzecz:
jak cos jest INT to nie zadne = '1' tylko poprostu =1

O jak otwierasz TR TD bez warunku, to i masz zamykac bez warunku a nie jak u ciebie bylo ze waliles zamkniecie w kazdej warunkowej sytuacji
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.