Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Przedszkole _ [MySQL][PHP] Zapisywanie w bazie

Napisany przez: Arvedui 28.01.2017, 11:40:08

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. http://www.php.net/echo '<p>Sala:</p>';
  5. http://www.php.net/echo $_POST['sala'];
  6. $sala=$_POST['sala'];
  7. http://www.php.net/echo '<p>Imię i nazwisko:</p>';
  8. http://www.php.net/echo $_POST['Nazwa'];
  9. $nazwa=$_POST['Nazwa'];
  10. http://www.php.net/echo '<p>Data:</p>';
  11. http://www.php.net/echo $_POST['data'];
  12. $data=$_POST['data'];
  13. http://www.php.net/echo '<p>Godzina:</p>';
  14. http://www.php.net/echo $_POST['godz'];
  15. $godz=$_POST['godz'];
  16.  
  17. 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>');
  18. http://www.php.net/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. 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>'));
  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?

Napisany przez: viking 28.01.2017, 11:50:24

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.

Napisany przez: Arvedui 28.01.2017, 12:24:55

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ć

Napisany przez: kapslokk 28.01.2017, 12:33:15

To załóż unique na wszystkie 3 pola.

Napisany przez: viking 28.01.2017, 12:33:19

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.

Napisany przez: Arvedui 28.01.2017, 12:40:07

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

Napisany przez: kapslokk 28.01.2017, 12:46:18

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;

Napisany przez: viking 28.01.2017, 12:49:51

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ę.

Napisany przez: Arvedui 28.01.2017, 12:54:14

@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

Napisany przez: kapslokk 28.01.2017, 12:57:12

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

Napisany przez: Arvedui 28.01.2017, 13:04:53

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

Napisany przez: kapslokk 28.01.2017, 13:09:49

  1. 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)