Pisze na zadanie skrypt któy ma rezerwować sale wykładowe. sam plik rezerwacji wygląda tak:
<?php require 'config.php'; if ($_POST['send'] == 1) { http://www.php.net/echo '<p>Sala:</p>'; http://www.php.net/echo $_POST['sala']; $sala=$_POST['sala']; http://www.php.net/echo '<p>Imię i nazwisko:</p>'; http://www.php.net/echo $_POST['Nazwa']; $nazwa=$_POST['Nazwa']; http://www.php.net/echo '<p>Data:</p>'; http://www.php.net/echo $_POST['data']; $data=$_POST['data']; http://www.php.net/echo '<p>Godzina:</p>'; http://www.php.net/echo $_POST['godz']; $godz=$_POST['godz']; http://www.php.net/mysql_query("INSERT INTO reser (id , sala, nazw, dat, godz) VALUES('$id', '$sala' , '$nazwa' , '$data' , '$godz')") or http://www.php.net/die ('<p class="error">Wystąpił błąd w zapytaniu i nie udało się zarejestrować użytkownika.</p>'); http://www.php.net/echo '<p class="success"> Sala została zarejestrowana. <br /><a href="index.php">Wróć do strony Głównej</a></p>'; http://www.php.net/echo (http://www.php.net/mysql_fetch_array("SELECT sala, godz FROM 'reser' WHERE dat = '$data'") or http://www.php.net/die ('<p class="error">Nie udao sie odczytać z bazy danych</p>')); } ?>
Załóż sobie na bazie klucz unique na te pola. Wtedy rekordy nie będą mogły się powtarzać. Rozszerzenie mysql jest przestarzałe, dodatkowo kod jest podatny na włam.
problem w tym że nie mogą być unikalne
każda sala może być rezerwowana wiele razy, w 1 dzień może być kilka rezerwacji i nawet ta sama godzina przy innych salach może być
tylko 3 aspekty razem nie mogą wystąpić
To załóż unique na wszystkie 3 pola.
Ale zdajesz sobie sprawę że taki klucz zakładasz na grupę pól które mają być unikalne?
A jeśli godzina nie jest stała tylko zakresem można np napisać wyzwalacz before insert or update który pobierze godzinę dla sali i wyświetli błąd gdy jest zajęta.
dokładnie tak jak pisze viking
jeśl idam unique na wszystkie 3
to sale 111 będę mógł zarezerwować tylko raz
tak samo np godz 8.00
nie będę już mógł dodać kolejnego rekordu z tą godziną salą itp, a przecież nie o to chodzi
Jesli masz unique na grupe 3 pol, to zebys nie mogl drugi raz dodac rekordu musisz wpisac we wszystkich 3 polach takie same dane jakie istnieja czyli:
Jesli masz w bazie
Dzien: 1; Godzina 2; Sala 3;
To mozesz dodac Dzien 1; Godzina 2; Sala 4; itd.
Ale nie mozesz Dzien 1; godzina 2; sala 3;
@kapslokk - czyli wystarczy zmienić w bazie, bez ingerencji w kod?
@viking - eh nie wiem jak to wyjaśnić prościej w formularzu wybieram sale date i godzinę
dajmy na to mam 3 sale 1,2 i 3 i mogę ję rezerwować codziennie co godzinę xxx ale: jeśli w bazie sala 1 jest już zarezerwowana na dziś na godzine 12 to żeby nie dało się tej samej sali w tym momencie zarezerwować ale np na godz 13, 14 już tak
ALTER TABLE tabela ADD UNIQUE `unique_na_3_pola` (`pole1`, `pole2`, `pole3`);
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)