artur2233
23.12.2012, 11:59:14
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
23.12.2012, 12:08:56
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:
if ( $row['lot_strona'] == 0)
{
echo 'lot w jedną stronę'; }
else
{
echo 'lot w dwie strony.'; }
W ten sposób możesz sobie i ceny pomnożyć przez 2 i co tam tylko potrzebujesz.
artur2233
23.12.2012, 12:16:55
Dzięki, całkiem spoko rozwiązanie.
A jak skonstruować zapytanie dla wyszukiwania lotów w obie strony?
Michael2318
23.12.2012, 12:31:11
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
23.12.2012, 19:01:12
Witam ponownie, mam taki koddo wyszukiwania lotów w jedna i w dwie strony, jak wyżej był polecany.
<?php
if ( $row['lot_strona'] == 1)
{
include 'lot1.php';
}
else
{
include 'lot2.php';
}
?>
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:
<td><input type="radio" name="travel_type" id="tt1" onclick="change_sector_2_fields(0,false)" checked></td> <td><input type="radio" name="travel_type" id="tt2" onclick="change_sector_2_fields(1,false)"></td>
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.
<?php
if(isset($_POST['skad']) && isset ($_POST['dokad']) && isset ($_POST['dzien_odlotu']) && isset ($_POST['miesiacirok_odlotu']) && isset ($_POST['dorosli'])) {
// filtrowanie danych...
$_POST['skad'] = clear($_POST['skad']);
$_POST['dokad'] = clear($_POST['dokad']);
$_POST['dzien_odlotu'] = clear($_POST['dzien_odlotu']);
$_POST['miesiacirok_odlotu'] = clear($_POST['miesiacirok_odlotu']);
$_POST['dorosli'] = clear($_POST['dorosli']);
$_POST['dzieci'] = clear($_POST['dzieci']);
$_POST['niemowleta'] = clear($_POST['niemowleta']);
// początek tabeli wyświetlającej wyszukane loty
echo '<h2>Lista lotów</h2> <table border="1" width="500px">
<tr>
<th>Skąd</th>
<th>Dokąd</th>
<th>Dzień odlotu</th>
<th>Miesiąc i rok odlotu</th>
<th>Godzina</th>
<th>Czas lotu</th>
<th>Cena</th>
</tr>';
// sprawdzanie wszystkie loty
$result = mysql_query("SELECT Count(id_lot) FROM `loty`"); $count_loty = $row[0];
// jeśli jest chociaż 1 lot to wyświetlanie
if($count_loty > 0) {
$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");
<td>'.$row['skad'].'</td>
<td>'.$row['dokad'].'</td>
<td>'.$row['dzien_odlotu'].'</td>
<td>'.$row['miesiacirok_odlotu'].'</td>
<td>'.$row['godzina'].'</td>
<td>'.$row['czas_lotu'].'</td>
<td>'.$row['cena'].'</td>
</tr>';
}
} else {
// jeśli nie ma w ogóle to wyświetlamy komunikat
<td colspan="7" style="text-align:center">Niestety nie znaleziono takich lotów.</td>
</tr>';
}
} else {
$_POST['skad'] = '';
$_POST['dokad'] = '';
$_POST['dzien_odlotu'] = '';
$_POST['miesiacirok_odlotu'] = '';
$_POST['dorosli'] = '';
$_POST['dzieci'] = '';
$_POST['niemowleta'] = '';
}
db_close();
?>
Dziękuję za odpowiedzi.