Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Wyszukiwanie i rezerwacja lotów
Forum PHP.pl > Forum > Przedszkole
artur2233
Witam, mam nadzieję, że temat wrzuciłem w odpowiedni dział.

otoż: robię system wyszukiwania i rezerwacji lotów i mam taki problem, że nie wiem jak to zrobić z lotami w jedną lub w dwie strony.
Np. user wybiera lot w dwie strony, skąd-dokąd, obie daty, ilość pasażerów (dorośli, dzieci, niemowlaki)

w bazie mam na razie tabelę users:
users [user_id, user_name, ...]

Planuję dodać tabele:
loty [id_lot, skad, dokad, dzien_odlotu, miesiacirok_odlotu, godzina, czas_lotu, cena]
rezerwacje [id_rezerwacja, user_id, id_lot, dorosli, dzieci, niemowleta, dodatkowe_opcje, oplata, data_rezerwacji]
no ale właśnie to będzie tylko lot w jedną stronę, a jak zrobić lot w dwie strony? w Tabeli rezerwacje zrobić id_lot1, id_lot2, gdzie id_lot2 będzie mógł być NULL? Ważne, żeby sumowało ceny obu lotów.

wyszukiwanie:
SELECT skad, dokad, dzien_odlotu, miesiacirok_odlotu, godzina, czas_lotu, cena FROM loty ... ?
Teraz przyszło mi do głowy, żeby odpowiednio zmodyfikować to zapytanie dodając coś, ale właśnie co? I jak zrobić, żeby odczytywało odpowiednie zapytanie w zależności od wybranej opcji lotu?

rezerwacja tego co wyszuka:
INSERT INTO `rezerwacje`(...) VALUES (... , ' ".time()." '); ?

Dziękuję za ewentualną pomoc, chętnie przeczytam różne punkty widzenia na ten temat.
Michael2318
Ja bym to zrobił, dodając do bazy pole tinyint(1) o przykładowej nazwie lot_strona. Jeśli pole jest równe 0 to lot w jedną stronę, jeśli pole jest równe 1 to lot w dwie strony (oczywiście możesz sobie dać lot w jedną stronę = 1, lot w dwie strony = 2 - bez różnicy). Potem już to wykorzystujesz w instrukcjach warunkowych, czyli:

  1. if ( $row['lot_strona'] == 0)
  2. {
  3. echo 'lot w jedną stronę';
  4. }
  5. else
  6. {
  7. echo 'lot w dwie strony.';
  8. }


W ten sposób możesz sobie i ceny pomnożyć przez 2 i co tam tylko potrzebujesz.
artur2233
Dzięki, całkiem spoko rozwiązanie.

A jak skonstruować zapytanie dla wyszukiwania lotów w obie strony?
Michael2318
SELECT * FROM tabela WHERE lot_strona = 1; // wyświetli wyniki dla lotów w obie strony. Jesli chcesz w jedną to zamiast 1, podstaw 0.
artur2233
Witam ponownie, mam taki koddo wyszukiwania lotów w jedna i w dwie strony, jak wyżej był polecany.

  1. <?php
  2. if ( $row['lot_strona'] == 1)
  3. {
  4. include 'lot1.php';
  5. }
  6. else
  7. {
  8. include 'lot2.php';
  9. }
  10. ?>


W każdym z tych includów będzie inny kod wyszukiwania, będą różnić się jedynie zapytaniem i metodą wyświetlania wyszukanych lotów.
Mój problem polega na określeniu zmiennej 'lot_strona', ponieważ w HTMLu mamy taki kod:

  1. <tr class="radio-btns">
  2. <td><input type="radio" name="travel_type" id="tt1" onclick="change_sector_2_fields(0,false)" checked></td>
  3. <td><label for="tt1">W obie strony</label></td>
  4. <br />
  5. <td><input type="radio" name="travel_type" id="tt2" onclick="change_sector_2_fields(1,false)"></td>
  6. <td style="width: 110px"><label for="tt2">W jedną stronę</label></td>
  7. </tr>


I nie mam pojęcia jak to ustawić do bazy i potem pobierać z bazy do if'a z początku tego postu.

lot1.php, mam tutaj wątpliwości co do poprawności drugiego zapytania, gdzie jest dużo AND. Poproszę o wytknięcie błędów w zapytaniu jak i w całym kodzie i ewentualne poprawki. Wszystkie pola są w HTML polami wyboru.
  1. <?php
  2.  
  3. if(isset($_POST['skad']) && isset ($_POST['dokad']) && isset ($_POST['dzien_odlotu']) && isset ($_POST['miesiacirok_odlotu']) && isset ($_POST['dorosli']))
  4. {
  5. // filtrowanie danych...
  6. $_POST['skad'] = clear($_POST['skad']);
  7. $_POST['dokad'] = clear($_POST['dokad']);
  8. $_POST['dzien_odlotu'] = clear($_POST['dzien_odlotu']);
  9. $_POST['miesiacirok_odlotu'] = clear($_POST['miesiacirok_odlotu']);
  10. $_POST['dorosli'] = clear($_POST['dorosli']);
  11. $_POST['dzieci'] = clear($_POST['dzieci']);
  12. $_POST['niemowleta'] = clear($_POST['niemowleta']);
  13.  
  14. // początek tabeli wyświetlającej wyszukane loty
  15. echo '<h2>Lista lotów</h2>
  16. <table border="1" width="500px">
  17. <tr>
  18. <th>Skąd</th>
  19. <th>Dokąd</th>
  20. <th>Dzień odlotu</th>
  21. <th>Miesiąc i rok odlotu</th>
  22. <th>Godzina</th>
  23. <th>Czas lotu</th>
  24. <th>Cena</th>
  25. </tr>';
  26.  
  27. // sprawdzanie wszystkie loty
  28. $result = mysql_query("SELECT Count(id_lot) FROM `loty`");
  29. $row = mysql_fetch_row($result);
  30. $count_loty = $row[0];
  31.  
  32. // jeśli jest chociaż 1 lot to wyświetlanie
  33. if($count_loty > 0) {
  34. $result = mysql_query("SELECT * FROM `loty` WHERE `skad` = '{$_POST['skad']}' AND `dokad` = '{$_POST['dokad']}' AND `skad` = '{$_POST['dzien_odlotu']}' AND `miesiacirok_odlotu` = '{$_POST['miesiacirok_odlotu']}' ORDER BY `id_lot` ASC");
  35.  
  36. while($row = mysql_fetch_assoc($result)) {
  37. echo '<tr>
  38. <td>'.$row['skad'].'</td>
  39. <td>'.$row['dokad'].'</td>
  40. <td>'.$row['dzien_odlotu'].'</td>
  41. <td>'.$row['miesiacirok_odlotu'].'</td>
  42. <td>'.$row['godzina'].'</td>
  43. <td>'.$row['czas_lotu'].'</td>
  44. <td>'.$row['cena'].'</td>
  45. </tr>';
  46. }
  47. } else {
  48. // jeśli nie ma w ogóle to wyświetlamy komunikat
  49. echo '<tr>
  50. <td colspan="7" style="text-align:center">Niestety nie znaleziono takich lotów.</td>
  51. </tr>';
  52. }
  53. echo '</table>';
  54. } else {
  55. $_POST['skad'] = '';
  56. $_POST['dokad'] = '';
  57. $_POST['dzien_odlotu'] = '';
  58. $_POST['miesiacirok_odlotu'] = '';
  59. $_POST['dorosli'] = '';
  60. $_POST['dzieci'] = '';
  61. $_POST['niemowleta'] = '';
  62. }
  63. db_close();
  64. ?>


Dziękuję za odpowiedzi.
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.