miszarus
19.01.2010, 18:53:55
Witam oto moje dwa pliki. Nie wiem czemu, ale nie dodaje mi rekordów do bazy.....szok jakiś :/
Ma być to prosta rezerwacja, ale nie wiem dlaczego nie zapisuje tych danych w bazie.
Połączenie jest na pewno dobrze.......
Bardzo proszę o pomoc...
<?php
require_once('conn.php');
$id_pokoje=$_POST['id_pokoje'];
$id_users=$konto;
$id_uslugi=$_POST['id_uslugi'];
$pobyt_od=$_POST['pobyt_od'];
$pobyt_do=$_POST['pobyt_do'];
$id_faktura=$_POST['id_faktura'];
$zapytanie="
INSERT INTO `miszarus_hotel`.`rezerwacja`
(`id_rezerwacji`, `id_pokoje`, `id_users`, `pobyt_od`, `pobyt_do`, `id_uslugi`, `id_faktura`)
VALUES (NULL, \'".$id_pokoje."\', \'".$id_users."\', \'".$pobyt_od."\', \'".$pobyt_do."\', \'".$id_uslugi."\', \'".$czyfaktura."\' )
";
/*
$wynik = @mysql_query($zapytanie)or die(mysql_error());;
if ($result){ //jezeli nie wystąpiły żadne blędy
$message .= 'Twoje dane zostały dodane do bazy';
}else{
$message .= 'Wystąpił błąd. Przepraszamy za utrudnienia<br />';
}
*/
}
?>
<form action="rezerwacjadobazy.php" method="post">
Wybierz pokój:<br><br>
<select name="id_pokoje">
<option value="1">Apartament Smoka</option>
<option value="2">Apartameny Szefa</option>
<option value="3">Apartament Michala</option>
<option value="4">Pokój jednoosobowy(101)</option>
<option value="5">Pokój jednoosobowy(102)</option>
<option value="6">Pokój jednoosobowy(103)</option>
<option value="7">Pokój dwuosobowy(201)</option>
<option value="8">Pokój dwuosobowy (202)</option>
<option value="9">Pokój dwuosobowy(203)</option>
<option value="10">Pokój trzyosobowy(301)</option>
<option value="11">Pokój trzyosobowy(302)</option>
<option value="12">Pokój trzyosobowy(303)</option>
</select>
<br>
<br>
</br>
Proszę o podanie daty w formacie: RRRR-MM-DD (np. 2010-01-17)<br>
Pobyt od: <input type="text" name="pobyt_od" maxlength="10" /><br>
Pobyt do: <input type="text" name="pobyt_do" maxlength="10" /><br><br><br>
Wybierz usługi dodatkowe:<br>
<input type="checkbox" name="id_uslugi" value="1" /> niadanie<br>
<input type="checkbox" name="id_uslugi" value="2" /> kolacja<br>
<input type="checkbox" name="id_uslugi" value="3" /> szampan
<br><br><br><br>
<input type="checkbox" name="id_faktura" value="1" /> Zaznacz opcję jeżeli ma być wystawiona faktura VAT:<br><br><br>
<input type="submit" value="ZAREZERWUJ" />
</form>
daj po zapisie do bazy mysql_error() i sprawdz co ci zwraca
miszarus
19.01.2010, 19:05:47
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '\'1\', \'\', \'2022-02-11\', \'9211-21-21\', \'2\', \'\' )' at line 3
evolucja
19.01.2010, 19:11:06
może tak?
$zapytanie="
INSERT INTO `miszarus_hotel`.`rezerwacja`
(`id_rezerwacji`, `id_pokoje`, `id_users`, `pobyt_od`, `pobyt_do`, `id_uslugi`, `id_faktura`)
VALUES (NULL, '".$id_pokoje."', '".$id_users."', '".$pobyt_od."', '".$pobyt_do."', '".$id_uslugi."', '".$czyfaktura."' )
";
miszarus
19.01.2010, 19:36:40
Jak tak, to tak:
Parse error: syntax error, unexpected T_STRING in /home/miszarus/domains/megahotel.unl.pl/public_html/rezerwacjadobazy.php on line 14
Kur.... wlaczę z tym już 3dzień, i nie mogę wygrać.
Jestem już w pełnej desperacji

Teraz wywala błąd taki:
Wystšpił błšd. Przepraszamy za utrudnienia (czyli ten co sam ustawiłem)
a kod jest taki
<?php
require_once('conn.php');
$id_pokoje=$_POST['id_pokoje'];
$id_users=$konto;
$id_uslugi=$_POST['id_uslugi'];
$pobyt_od=$_POST['pobyt_od'];
$pobyt_do=$_POST['pobyt_do'];
$id_faktura=$_POST['id_faktura'];
$zapytanie="
INSERT INTO `miszarus_hotel`.`rezerwacja`
(`id_rezerwacji`, `id_pokoje`, `id_users`, `pobyt_od`, `pobyt_do`, `id_uslugi`, `id_faktura`)
VALUES (NULL, '".$id_pokoje."', '".$id_users."', '".$pobyt_od."', '".$pobyt_do."', '".$id_uslugi."', '".$id_faktura."' )
";
if ($result){ //jezeli nie wystąpiły żadne blędy
$message .= 'Twoje dane zostały dodane do bazy';
}else{
$message .= 'Wystąpił błąd. Przepraszamy za utrudnienia<br />';
}
}
?>
HIHI,
dodaje rekordy ale wyświetla "wystąpil bląd".
jak się tego pozbyć

aha, i co zrobić aby pobierał dane o zalogowanym użytkowniku?
evolucja
19.01.2010, 19:46:35
Ta instrukcja zawsze będzie prawdziwa, bo nie ma w kodzie nigdzie zmiennej $result

Nie chodziło ci czasami o $wynik?
A dane pobierasz normalnie, np. po nicku usera.
$zapytanie = mysql_query("SELECT * FROM 'users' WHERE `username` = \"$nick\"");
itd...
Kshyhoo
19.01.2010, 19:48:02
Żeby wrzucał zalogowanego usera, zaloguj go wpierw, wrzuć np. do sesji i potem $_SESSION['login'] do bazy.
miszarus
19.01.2010, 19:57:36
Wielkie, dzięki.
ale z tym if ($result) do dowaliłem.
Dzięki serdeczne

to aby pobierał mi id_usera muszę zrobić sesje i żeby z nich pobierał id_usera?
dobrze rozumiem??
Kshyhoo
19.01.2010, 20:02:23
No gdzieś musisz "trzymać" zalogowanego, możesz w sesji... Np.:
if ($_SESSION["zalogowany"]=="tak") {
if ($_SESSION['login']) {
... i tu kodzik do bazy
evolucja
19.01.2010, 20:04:06
Przy logowaniu wrzucasz $id_usera do sesji lub ciastka, a potem na innych stronach z niego korzystasz. Chodź kod który podałem wyżej również mógłbyś wykorzystać, z tym, że generowało by to dodatkowe zapytania...
Np, gdy nick usera trzymasz w ciastkach, id pobierasz w ten sposób:
$zapytanie = mysql_query("SELECT * FROM 'users' WHERE `username` = \"$_COOKIES['nick']\""); $id = $wynik['user_id'];
miszarus
19.01.2010, 20:07:21
OK, myślę że sobie poradzę, ale mam kolejne pytanie...mianowicie.
Chodzi mi o datę pobytu od-do.
Chodzi mi o to, aby nie można było dokonać rezerwacji danego pokoju, jeżeli ktoś w tym czasie ma go zarezerwowanego?
Kshyhoo
19.01.2010, 20:22:35
To jest proste. Dodajesz do tabeli kolumnę, w której trzymasz stan pokoju, który sprawdzasz. Jeżeli jest 1 to zajęty, jeżeli =0, to można wynająć...
SELECT * FROM pokoje WHERE stan=1
miszarus
19.01.2010, 20:28:05
Ale jeśli ktoś zarezerwuje pokój o 12 godzinie na datę 12.01.2009-20.01.2009 a ktoś dwie minuty później na datę 21.01.2009-23.01.2009 to jaka będzie wtedy wartość w tabeli?? jak będzie ustalana??
evolucja
19.01.2010, 20:29:58
To nie takie proste. Źle pomyślałeś po prostu, zapomniałeś o fakcie takim, iż pokój rezerwowany jest w różnych przedziałach czasowych.. Tzn. w tabeli może być kilka rezerwacji tego samego pokoju, ale o różnych datach.
W takim razie musisz pobrać wszystkie wpisy, a następnie porównywać datę wynajmu każdego z nich... to już trochę cięższe będzie.
celbarowicz
19.01.2010, 20:32:45
robiłem coś podobnego wraz z nazwą id_hotelu , id_numerem pokoju ,itd .. zapisywałem do bazy datę w systemie unix, to wystarczyło po odpowiednim zapytaniu stwierdzić czy pokój jest zajęty, wszystkie wpisy z poprzedniego miesiąca po zapisaniu do archiwum były kasowane.
zobacz stronę noce.pl, to nie jest moje dzieło ale podglądałem funkcjonalność, ciekawy jest kalendarz.
miszarus
19.01.2010, 22:10:50
A więc nie będzie tak łatwo jak myślałem, ale cóż...tego się spodziewałem

Czyli muszę zrobić oddzielną tabelę, i połączyć ją z rezerwacją. W tabeli umieścić kilka rekordów.
Ale nie ma możliwości zapisania daty jakoś inaczej, żeby to było prościej??
Kshyhoo
19.01.2010, 22:15:55
Ale właśnie taka metoda jest najprostsza.
miszarus
19.01.2010, 22:35:49
Wszytko pięknie, ale jaką metodą porównywać przedział czasowy??
O to się rozchodzi....bo te same daty to pryszcz, ale jak rozwiązać przedział czasowy...
Bo sama data nic nie da....jeżeli ktoś zamówi dzień później na dzień dłużej pokój zostanie zarezerwowany, a w rzeczywistości nie będzie dostępny :/
Kurka wodna....z deszczu pod rynnę
Kshyhoo
19.01.2010, 22:53:32
Pokoje wynajmuje się zazwyczaj na doby lub godziny, więc przedziały czasowe to nie problem. Zapisujesz w bazie zawsze koniec zdarzenia, czyli koniec rezerwacji. W warunkach sprawdzasz przedziały czasowe, w których są wolne pokoje.
miszarus
20.01.2010, 11:01:05
No dobra....
mam kolejne pytanie, w jaki sposób porównywać dane??
I co umieścić w tabeli?? czy wolny pokój,?
Czy jak? "nie bardzo to widzę" :/
Może ktoś mi rozjaśni umysł
Kshyhoo
20.01.2010, 11:02:43
Przybliż problem.
miszarus
20.01.2010, 11:16:10
No więc tak.
W tej chwili dane przekazywane są do z formularza, do tabeli rezerwacja która, przedstawia się tak
id_rezerwacji int(10)
id_pokoje int(10)
id_users int(10)
pobyt_od varchar(20)
pobyt_do varchar(20)
id_uslugi int(10)
id_faktura int(50)
i tu niby wprowadzam datę....
No wiem że tak nie może być (varchar(20)), ale właśnie, czy tworzyć nową tabelę, czy da się jakoś tu zrobić, aby nie można było zarezerwować >>zarezerwowanego już pokoju na dany czas.
//Aha, i jak zrobić aby można było wybrać nie jedną ale kilka opcji usług dodatkowych??
Bo narazie w zależności od wyboru, przekazuje mi value=1/2/3 i później z tabeli rezrwacja jest relacja do usulugi_dodatkowe.
A jak zrobić aby można było wybrać kilka opcji??
jak to rozwiązać
Kshyhoo
20.01.2010, 11:39:44
Moim zdaniem, nie ma potrzeby. Dajesz w zapytaniu WHERE pobyt_do='' lub WHERE pobyt_do IS NULL...
miszarus
20.01.2010, 11:44:57
OK, a jak zrobić aby można było wybrać nie jedną ale kilka opcji usług dodatkowych??
Bo narazie w zależności od wyboru, przekazuje mi value=1/2/3 i później z tabeli rezrwacja jest relacja do usulugi_dodatkowe.
A jak zrobić aby można było wybrać kilka opcji??
jak to rozwiązaćquestionmark.gif
Kshyhoo
20.01.2010, 12:03:59
To zależy, co to za opcji i jak je będziesz uaktywniał. radio, checkbox, lista rozwijana?
miszarus
20.01.2010, 13:01:32
Nie ma znaczenia ale najlepiej chekbox
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.