Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][SQL] dodawanie do bazy danych rekordów za pomocą formularza
Forum PHP.pl > Forum > Przedszkole
drawsko
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
crackcomm
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
woj_tas
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).
drawsko
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
maciek12_91
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
drawsko
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...
ShadowD
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...
AxZx
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.
drawsko
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...
AxZx
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.
woj_tas
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
AxZx
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?
woj_tas
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.
AxZx
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?
woj_tas
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.
AxZx
i jeszcze z tymi selectami by trzeba popracowac i w zasadzie opis jak zrobic dodawanie do tabel wiele do wielu bedzie gotowy smile.gif
drawsko
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
AxZx
mi raczej o inny poziom zaawansowania chodzilo
np. http://lab.arc90.com/tools/jquery_multiselect/
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.