Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] Zapisywanie w bazie
Forum PHP.pl > Forum > Przedszkole
Arvedui
Pisze na zadanie skrypt któy ma rezerwować sale wykładowe. sam plik rezerwacji wygląda tak:


  1. <?php
  2. require 'config.php';
  3. if ($_POST['send'] == 1) {
  4. echo '<p>Sala:</p>';
  5. echo $_POST['sala'];
  6. $sala=$_POST['sala'];
  7. echo '<p>Imię i nazwisko:</p>';
  8. echo $_POST['Nazwa'];
  9. $nazwa=$_POST['Nazwa'];
  10. echo '<p>Data:</p>';
  11. echo $_POST['data'];
  12. $data=$_POST['data'];
  13. echo '<p>Godzina:</p>';
  14. echo $_POST['godz'];
  15. $godz=$_POST['godz'];
  16.  
  17. mysql_query("INSERT INTO reser (id , sala, nazw, dat, godz) VALUES('$id', '$sala' , '$nazwa' , '$data' , '$godz')") or die ('<p class="error">Wystąpił błąd w zapytaniu i nie udało się zarejestrować użytkownika.</p>');
  18. echo '<p class="success"> Sala została zarejestrowana.
  19. <br /><a href="index.php">Wróć do strony Głównej</a></p>';
  20.  
  21.  
  22.  
  23. echo (mysql_fetch_array("SELECT sala, godz FROM 'reser' WHERE dat = '$data'") or die ('<p class="error">Nie udao sie odczytać z bazy danych</p>'));
  24. }
  25. ?>



jestem całkowitym żółtodziobem w tym i w jestem w stanie zrobić tylko najprostrze "skrypty"<jeśli tak mozna to nazwać>
a potrzebuję if by nie można bylo 2 raz zarezerwować sali o tej samej godzinie, tego samego dnia

Czyli: jeśli sala x o godz y dnia z jest już w bazie żeby wywalało komunikat że sala jest już zajęta.

znajdzie się jakaś dobra duszyczka która pomoże?
viking
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.
Arvedui
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ć
kapslokk
To załóż unique na wszystkie 3 pola.
viking
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.
Arvedui
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
kapslokk
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;
viking
Cytat
nie będę już mógł dodać kolejnego rekordu z tą godziną salą itp, a przecież nie o to chodzi


Cytat
Czyli: jeśli sala x o godz y dnia z jest już w bazie żeby wywalało komunikat że sala jest już zajęta.


Przemyśl jeszcze raz sprawę.
Arvedui
@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
kapslokk
Cytat
@kapslokk - czyli wystarczy zmienić w bazie, bez ingerencji w kod?

W kodzie bedzie trzeba sprawdzac czy udalo sie wykonac zapytanie, ale to juz w sumie masz.


Cytat
@viking - eh nie wiem jak to wyjaśnić prościej w formularzu wybieram sale date i godzinę

Ja mysle, ze viking doskonale rozumie o co Ci chodzi. Nawet napisał Ci co masz zrobić wink.gif
Arvedui
Cytat(kapslokk @ 28.01.2017, 12:57:12 ) *
W kodzie bedzie trzeba sprawdzac czy udalo sie wykonac zapytanie, ale to juz w sumie masz.



Ja mysle, ze viking doskonale rozumie o co Ci chodzi. Nawet napisał Ci co masz zrobić wink.gif



a jak dodać unique na te 3 pola razem?

bo jeśli to normalnie zrobię to obawiam się, że będzie działało jak id sad.gif
kapslokk
  1. ALTER TABLE tabela ADD UNIQUE `unique_na_3_pola` (`pole1`, `pole2`, `pole3`);
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.