Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP][SQL] dodawanie do bazy danych rekordów za pomocą formularza, relacja wiele do wielu
drawsko
post 28.03.2008, 14:55:30
Post #1





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 28.03.2008

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


witam smile.gif

mam problem, przedstawie go na prostym przykładzie:

klasyczny przykład 3 tabele:
- autor
- książka
- autor_książka (relacja wiele do wielu)

Jak się wygląda w praktyce wypełnianie tabeli autor_książka... wiem, że można przekazać wartości przy pomocy formularza (id_autor i id_książka), które elegancko złączą mi autora(ów) z książką(ami). Ale w tym cała rzecz że ten proces musi być banalnie prosty dla uzytkownika końcowego dla którego przybotowuję taką "aplikację"...(wszystko opierać się będzie na PHP i MYSQL)

wszelkie podpowiedzi, pomysły i przykłady mile widziane smile.gif

proszę o pomoc albo jakieś linki, dużo googlwałe ale nie znalazłem odpowiedzi...

pozdrawiam smile.gif i miłego weekendu

Ten post edytował drawsko 28.03.2008, 14:57:37
Go to the top of the page
+Quote Post
crackcomm
post 28.03.2008, 15:00:02
Post #2





Grupa: Zarejestrowani
Postów: 184
Pomógł: 6
Dołączył: 23.02.2008
Skąd: Katowice

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


nie do końca rozumiem co chcesz osiągnąć możę to :
(Baza)
Kod
Ksiazka         Autor             Autor_ksiazka
--
Sekrety xxx  Ms. Edward     Sekrety xxx_Ms. Edward

tak to zrozumialem


--------------------
Sygnaturka comes here.
Go to the top of the page
+Quote Post
woj_tas
post 28.03.2008, 15:21:15
Post #3





Grupa: Zarejestrowani
Postów: 230
Pomógł: 36
Dołączył: 31.03.2006
Skąd: Zielona Góra

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


Cytat(drawsko @ 28.03.2008, 14:55:30 ) *
Ale w tym cała rzecz że ten proces musi być banalnie prosty dla uzytkownika końcowego dla którego przybotowuję taką "aplikację"...(wszystko opierać się będzie na PHP i MYSQL)


No ale w czym problem?

Dodając nową pozycję ksiązkową wyświetlasz formularz z tytułem, opisem itp oraz checkboxy z autorami (bo autor nie koniecznie musi byc jeden). Tak samo dla autorów (pole imie, nazwisko, opis itp, oraz checkboxy z mozliwością wybrania książki).


--------------------
Go to the top of the page
+Quote Post
drawsko
post 28.03.2008, 17:34:56
Post #4





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 28.03.2008

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


fajny sposób smile.gif
ale mnie interesuje jak to się odbywa od kuchni smile.gif

podam parę założeń (moja baza jest bardziej rozbudowana i nie ma sensu jej tu wrzucać):

*tabela autor jest niezmienna i jest wypełniona, użytkownik dodaje wpisy do tabeli książki (jest pusta) i pozostaje tabela autor_ksiazka
*(przy założeniu, że każdy autor może napisać wiele książek i każda książka może być napisana przez wielu autorów- tą część realizuje tabela autor_książka)

przyjmujemy, że

autor {
id_autor (PK)
nazw
imie
}

kaiążka {
id_ksiazka (PK)
tytul
opis
}

autor_ksiazka {
id_autor
id_ksiazka
}

tu pojawia sie pytanie jak wypełnić bazę danych rekordami przy pomocy formularzy smile.gif bardzo by mi się przydła jakiś przykład szczególnie do części autor_książka smile.gif taki kawałek kodu mile widziany smile.gif a w szczególości link do przykładu

Ten post edytował drawsko 28.03.2008, 18:03:33
Go to the top of the page
+Quote Post
maciek12_91
post 28.03.2008, 19:29:09
Post #5





Grupa: Zarejestrowani
Postów: 3
Pomógł: 0
Dołączył: 21.12.2007
Skąd: Radom

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


po wybraniu bazy funkcja mysql_sselect_db() towrzymy korzystajac z mysql_query() tabele:
Kod
CREATE  TABLE 'autor` ( `id` INT(3)  NOT  NULL  AUTO_INCREMENT ,
  `tytul` VARCHAR(255)  NOT  NULL ,
  `opis` TEXT NOT  NULL ,
  PRIMARY  KEY ('id`))

CREATE  TABLE 'ksiazka` (
`id` INT(3)  NOT  NULL  AUTO_INCREMENT ,
  `tytul` VARCHAR(255)  NOT  NULL ,
  `opis` TEXT NOT  NULL ,
  PRIMARY  KEY (`id`))

CREATE  TABLE 'autor_ksiazka` (`id_autor` INT(3)  NOT  NULL , `id_ksiazka` INT(3)  NOT  NULL ,
  PRIMARY  KEY (`id_autor'))


mamy 3 tabele pozostaje tylko wydobyc z bazy te informacje i korzystac dowoli

Ten post edytował maciek12_91 28.03.2008, 19:30:41
Go to the top of the page
+Quote Post
drawsko
post 28.03.2008, 20:11:55
Post #6





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 28.03.2008

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


jak się twory bazę to wiem smile.gif i jak się dodaje do jednej tabeli za pomocą formularza też wiem smile.gif
Ale jak do tabel relacyjnych za pomocą formularza to już problem dla mnie, a o relacji wiele do wielu ... Hmmm nie wie wiem...
Go to the top of the page
+Quote Post
ShadowD
post 28.03.2008, 20:22:42
Post #7





Grupa: Zarejestrowani
Postów: 1 333
Pomógł: 137
Dołączył: 25.03.2008
Skąd: jesteś??

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


Może trochę z tematu wyjdę ale sadzę że czytasz książkę pt "php i mysql"... ;p

Napisz wyraźniej o co chodzi smile.gif bo nadal nie rozumiem...

Chodzi ci np o to że z formularza imię, nazwisko np możesz zapisać w 1 kolumnie imię w drugiej nazwisko a w trzeciej imię i nazwisko na raz?? ;p

Ps chyba trochę nie zrozumiałem...


--------------------
Mój blog - o wszystkim i niczym ale zazwyczaj związane z informatyką! ;-)
Githube

Usługi spawalnicze i monterskie | Park linowy Lublin i Okunince
Go to the top of the page
+Quote Post
AxZx
post 28.03.2008, 20:29:35
Post #8





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

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


no wogole nie zrozumiales

to ja sprobuje wytlumaczyc:)

do bazy chcemy dodac kolejna ksiazke. ksiazka moze miec wielu autorow i moze byc przypisana do wielu kategorii.
jak zrobic formularz i jak obrobic dane w kontrolerze i modelu zeby dodawanie nowej ksiazki bylo latwe i przyjemne?

w widoku w formularzu przydaloby sie zrobic liste z autorami i liste z kategoriami. tylko przydalby sie przycisk dodaj kolejnego autora (kopiowanie selecta w JS)
po skopiowaniu selecta wybieramy z tych dwoch selectow autorow. gdybysmy jednak chcieli usunac autora przydalaby sie ikonka usuwajaca zbednego selecta.


--------------------
aplikacje internetowe | Symfony
Go to the top of the page
+Quote Post
drawsko
post 28.03.2008, 21:39:36
Post #9





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 28.03.2008

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


AxZx brawo smile.gif
Ktoś złapał o co mi biega:)
Co ciekawe przeszukiwalem fora, googlowalem i nigdzie nie mogę znaleść przykładu, opisu...
przykładów gdy dodajemy do jednej tabeli jest mnóstwo, choć wydaje mi się że relacje wiele do wielu jest to częsty przypadek:(

A dla nie buszujących w książkach Może być nawet przypadek:
Malarz, Obraz, Malarz_Obraz smile.gif malarz może namalować wiele obrazów i jeden obraz może być namalowany przez wielu malarzy...
Go to the top of the page
+Quote Post
AxZx
post 28.03.2008, 21:48:00
Post #10





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

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


jeden obraz przez wielu malarzy ?smile.gif a komu sie przypisuje autorstwo obrazu?smile.gif
ksiazka i kategorie to chyba zrozumialy przyklad i bardziej realny.


--------------------
aplikacje internetowe | Symfony
Go to the top of the page
+Quote Post
woj_tas
post 28.03.2008, 22:35:58
Post #11





Grupa: Zarejestrowani
Postów: 230
Pomógł: 36
Dołączył: 31.03.2006
Skąd: Zielona Góra

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


Cytat(drawsko @ 28.03.2008, 21:39:36 ) *
Co ciekawe przeszukiwalem fora, googlowalem i nigdzie nie mogę znaleść przykładu, opisu...
przykładów gdy dodajemy do jednej tabeli jest mnóstwo, choć wydaje mi się że relacje wiele do wielu jest to częsty przypadek:(


Czy ty wogóle potrafisz napisać proste zapytanie w mysql?

Zakładamy że tabela z autorami jest wypełniona (w cześci, w całości, nieważne. Są jakieś dane i tyle)

Tworzymy formularz:
1. Input typu tekstowego na tytuł książki
2. Textarea na opis książki
3. Inputy typu checkobx na wybranie autorów wpisywanej pozycji (typu chcekbox ponieważ zakładamy ze książka moze mieć wielu autorów)
4. Input typu submit.

Piszemy skrypcik który "przechwyci" wysłane dane:

1. Pobieramy tytuł i opis:
np:
  1. <?php
  2. $tytul = htmlspecialchars($_POST['tytul']);
  3. $opis = htmlspecialchars($_POST['opis']);
  4. ?>


i autorów:
np:
  1. <?php
  2. $autorzy = (array)$_POST['autorzy'];
  3. ?>


Piszemy dwa zapytania:
1. Pierwsze do wrzucenia danych o książce:

  1. INSERT INTO ksiazka(tytul, opis) VALUES('$tytul', '$opis')


2. Drugie do wrzucenia autorów

  1. <?php
  2. $id_ksiazki = mysql_insert_id(); //pobieramy id przed chwilą dodanej książki
  3.  
  4. foreach($autorzy as $autor){
  5.  
  6. q("insert into autor_ksiazka(id_autora, id_ksiazki) values($autor, $id_ksiazki)");
  7.  
  8. }
  9. ?>

EDIT: literówka

Ten post edytował woj_tas 29.03.2008, 12:47:04


--------------------
Go to the top of the page
+Quote Post
AxZx
post 28.03.2008, 22:41:33
Post #12





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

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


no to takie proste rozwiazanie moze byc:)

a co jezeli bedzie 100000 autorow?
z lista rozwijana tez moze byc problem ze znalezieniem konkretnych autorow, ale przynajmniej mniej miejsca beda zajmowac na stronie:)

a jak z edycja pozniej takiej ksiazki?
tez checkboxy?
a pozniej co? usuwanie wszystkich pozycji z tabeli ksiazka_autor a pozniej ta sama metoda dodanie zaznaczonych autorow?


--------------------
aplikacje internetowe | Symfony
Go to the top of the page
+Quote Post
woj_tas
post 28.03.2008, 23:17:33
Post #13





Grupa: Zarejestrowani
Postów: 230
Pomógł: 36
Dołączył: 31.03.2006
Skąd: Zielona Góra

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


Cytat(AxZx @ 28.03.2008, 22:41:33 ) *
a co jezeli bedzie 100000 autorow?
z lista rozwijana tez moze byc problem ze znalezieniem konkretnych autorow, ale przynajmniej mniej miejsca beda zajmowac na stronie:)

Masz racje, selecty będą zajmować mniej miejsca.

Cytat(AxZx @ 28.03.2008, 22:41:33 ) *
a pozniej co? usuwanie wszystkich pozycji z tabeli ksiazka_autor a pozniej ta sama metoda dodanie zaznaczonych autorow?


Tak, sktruktura tabeli będzie taka sama, nawet jeżeli zastosujesz selecty.


--------------------
Go to the top of the page
+Quote Post
AxZx
post 28.03.2008, 23:20:50
Post #14





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

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


ehhhhhhhh.
to jeszcze raz
edycja ksiazki - usuwasz wszystkie wpisy z tabeli laczacej z idksiazki ktora wlasnie edytujesz a nastepnie dodajesz nowe pozycje czy moze kombinujesz jakos ze sprawdzaniem ktore pozycje juz sa w bazie i dodajesz tylko te ktorych nie ma?


--------------------
aplikacje internetowe | Symfony
Go to the top of the page
+Quote Post
woj_tas
post 28.03.2008, 23:26:37
Post #15





Grupa: Zarejestrowani
Postów: 230
Pomógł: 36
Dołączył: 31.03.2006
Skąd: Zielona Góra

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


Cytat(AxZx @ 28.03.2008, 23:20:50 ) *
ehhhhhhhh.
to jeszcze raz
edycja ksiazki - usuwasz wszystkie wpisy z tabeli laczacej z idksiazki ktora wlasnie edytujesz a nastepnie dodajesz nowe pozycje czy moze kombinujesz jakos ze sprawdzaniem ktore pozycje juz sa w bazie i dodajesz tylko te ktorych nie ma?


Usuwasz i wpisujesz.
Inaczej nie odznaczysz a jedynie dodasz nowych autorów.


--------------------
Go to the top of the page
+Quote Post
AxZx
post 28.03.2008, 23:28:11
Post #16





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

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


i jeszcze z tymi selectami by trzeba popracowac i w zasadzie opis jak zrobic dodawanie do tabel wiele do wielu bedzie gotowy smile.gif


--------------------
aplikacje internetowe | Symfony
Go to the top of the page
+Quote Post
drawsko
post 29.03.2008, 10:49:52
Post #17





Grupa: Zarejestrowani
Postów: 15
Pomógł: 0
Dołączył: 28.03.2008

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


woj_tas właśnie czegos takiego szukałem...

htmlspecialcharts - bardzo ciekawe i przydatne, nieznałem smile.gif
mysql_insert_id() - to rozwiązuje wiele problemów smile.gif

może uznacie to za rzecz niemożliwą ale nie mam internetu w domu, wiec jak bede moał sjakieś przoblemy to mogą napływać falowo sad.gif
hmm ... Zielona Góra hmm ... chyba tam mieszkam smile.gif
Go to the top of the page
+Quote Post
AxZx
post 29.03.2008, 14:56:34
Post #18





Grupa: Zarejestrowani
Postów: 1 385
Pomógł: 55
Dołączył: 1.03.2005
Skąd: śląsk

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


mi raczej o inny poziom zaawansowania chodzilo
np. http://lab.arc90.com/tools/jquery_multiselect/


--------------------
aplikacje internetowe | Symfony
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: 13.08.2025 - 22:56