Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] Zapisywanie w bazie
Arvedui
post 28.01.2017, 11:40:08
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 27.01.2017

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
viking
post 28.01.2017, 11:50:24
Post #2





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


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.


--------------------
Go to the top of the page
+Quote Post
Arvedui
post 28.01.2017, 12:24:55
Post #3





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 27.01.2017

Ostrzeżenie: (0%)
-----


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ć
Go to the top of the page
+Quote Post
kapslokk
post 28.01.2017, 12:33:15
Post #4





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


To załóż unique na wszystkie 3 pola.
Go to the top of the page
+Quote Post
viking
post 28.01.2017, 12:33:19
Post #5





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


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.


--------------------
Go to the top of the page
+Quote Post
Arvedui
post 28.01.2017, 12:40:07
Post #6





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 27.01.2017

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
kapslokk
post 28.01.2017, 12:46:18
Post #7





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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;

Ten post edytował kapslokk 28.01.2017, 12:46:57
Go to the top of the page
+Quote Post
viking
post 28.01.2017, 12:49:51
Post #8





Grupa: Zarejestrowani
Postów: 6 365
Pomógł: 1114
Dołączył: 30.08.2006

Ostrzeżenie: (0%)
-----


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


--------------------
Go to the top of the page
+Quote Post
Arvedui
post 28.01.2017, 12:54:14
Post #9





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 27.01.2017

Ostrzeżenie: (0%)
-----


@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
Go to the top of the page
+Quote Post
kapslokk
post 28.01.2017, 12:57:12
Post #10





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
Arvedui
post 28.01.2017, 13:04:53
Post #11





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 27.01.2017

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
kapslokk
post 28.01.2017, 13:09:49
Post #12





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


  1. ALTER TABLE tabela ADD UNIQUE `unique_na_3_pola` (`pole1`, `pole2`, `pole3`);


Ten post edytował kapslokk 28.01.2017, 13:10:03
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 18.04.2024 - 17:34