Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP] Zapisywanie w bazie
Arvedui
post
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
Post #2





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
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
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
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
Post #5





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
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
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
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
Post #8





Grupa: Zarejestrowani
Postów: 6 381
Pomógł: 1116
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
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
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ć (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
Arvedui
post
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ć (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/sad.gif)
Go to the top of the page
+Quote Post
kapslokk
post
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
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 29.09.2025 - 16:45