Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]zapis formularza z kilkoma zaznaczonymi opcjami
gagatek
post
Post #1





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 18.02.2008

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


mam funkcje która pobiera z bazy danych gatunki i tworzy formularz wyboru
  1. function pobierzG(){
  2. $gatunek=mysql_query("SELECT * FROM gatunek order by GATUNEK asc");
  3. while($wiersz= mysql_fetch_assoc($gatunek)){
  4.  
  5.  
  6. echo ' <input type="checkbox" name="gatunek" value="'.$wiersz['ID'].'"; ">'.$wiersz['GATUNEK'].'';


następnie mam formularz w którym podaje sie tytul filmu itp, oraz gatunki tego filmu( jak wiadomo film może być w kilku gatunkach na raz)
  1. <form method="post" action="dodaj.php">
  2. <table>
  3. <tr class="tlo-b"><td>Tytul oryginalny:</td>
  4. <td><input type="text" name="tytul_oryginalny" /></td></tr>
  5. ...
  6. <tr class="tlo-b"><td>Gatunek:</td>
  7. <td><form name="gatunek">
  8. <? pobierzG(); ?>
  9. </form>
  10. </td></tr>
  11. <tr><td colspan="2" align="center"><input type="submit" value="Dodaj" /></td></tr>
  12. </table></form>
  13.  


a tutaj mam zapytanie zapisujące do tabeli film_gatunek, gatunek filmu. I wszystko działa, tylko mam taki problem że jak zaznaczę w tym formularzu z gatunkami więcej niż jeden gatunek, to zapisuje mi się i tak tylko jeden, a chciałbym żeby do jednego filmu można było przypisać kilka gatunków, nie mam pojęcia jak to zrobić... prosił bym o Waszą pomoc.
  1. $id_filmu = mysql_fetch_array($zapytanie_id);
  2. mysql_query("INSERT INTO `film_gatunek` (ID_FILM, ID_GATUNEK) VALUES ('$id_filmu[0]', '$gatunek')") OR die("Błąd");


Ten post edytował gagatek 13.12.2011, 12:29:30
Go to the top of the page
+Quote Post
Sephirus
post
Post #2





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


  1. function pobierzG(){
  2. $gatunek=mysql_query("SELECT * FROM gatunek order by GATUNEK asc");
  3. while($wiersz= mysql_fetch_assoc($gatunek)){
  4.  
  5.  
  6. echo ' <input type="checkbox" name="gatunek[]" value="'.$wiersz['ID'].'"; ">'.$wiersz['GATUNEK'].''; // tutaj dodaj [] do "gatunek"


uzyskasz w ten sposób tablicę "gatunków", którą możesz wykorzystać np tak:

  1. $id_filmu = mysql_fetch_array($zapytanie_id);
  2. foreach($gatunek AS $g) mysql_query("INSERT INTO `film_gatunek` (ID_FILM, ID_GATUNEK) VALUES ('$id_filmu[0]', '$g')") OR die("Błąd");


HTH! (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
gagatek
post
Post #3





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 18.02.2008

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


wielkie dzięki, działa!!:)
mam jeszcze 2 pytania, nie chcę otwierać nowego tematu. Chciałem się jeszcze dowiedzieć jak mam zrobić teraz tak jakby na odwrót czyli mam edycje filmów, do inputów wprowadzane są tytuły itp pobrane z bazy z filmam i w celu edycji i teraz chciałbym żeby w tym formularzu z gatunkami zostały zaznaczone checkboxy z gatunkami tego wybranego filmu, czyli, żeby gatunki zostały pobrane z bazy i odpowiednio zostały zaznaczone checkboxy. Nie wiem czy zrozumiale to napisałem, bo wydaje mi się że troche namieszalem:)
  1. <form method="post" action="">
  2. <? pobierzG(); ?>
  3. </form>


i drugie, chcę zrobić update tych gatunków w edycji. Ale mam problem z zapytaniem, zrobiłem takie:
  1. foreach($gatunek AS $g) mysql_query("UPDATE `film_gatunek` SET ID_FILM='$ID', ID_GATUNEK='$g' where ID_FILM='$ID'") OR die("Błąd");

  1. ale nie działa poprawnie bo jak mam w tabeli film_gatunek np:
  2. ID_FILM ID_GATUNEK
  3. 1 3
  4. 1 4
  5. 1 5

i chcę zmienić żeby ten film miał tylko gatunek o np ID=9 to wynikiem tego jest
  1. ID_FILM ID_GATUNEK
  2. 1 9
  3. 1 9
  4. 1 9

nie wiem jak zrobić żeby w takim wypadku to się nie powtarzało...
i tak samo jak chcę zmienić ID gatunku z 3 4 5 np na 6 7 8 za pomocą tego zapytania u góry to w tabeli pojawia mi się taki wynik
  1. ID_FILM ID_GATUNEK
  2. 1 8
  3. 1 8
  4. 1 8


Nie wiem, czemu pobiera i zapisuje tylko ostatnią wartość w petli..
Prosił bym o pomoc w rozwiązaniu bo już się pogubiłem...

Ten post edytował gagatek 15.12.2011, 13:49:40
Go to the top of the page
+Quote Post
Sephirus
post
Post #4





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


Musisz przekazać swojej funkcji pobierzG gatunki jakie ma twój wpis:

  1. function pobierzG($gatunki){
  2. $gatunek=mysql_query("SELECT * FROM gatunek order by GATUNEK asc");
  3. while($wiersz= mysql_fetch_assoc($gatunek)){
  4.  
  5.  
  6. echo ' <input type="checkbox" name="gatunek[]" value="'.$wiersz['ID'].'" '.(isset($gatunki[$wiersz['ID']])) ? 'checked="checked" : '').'>'.$wiersz['GATUNEK'].''; // tutaj sprawdzasz i zaznaczasz


Do funkcji pobierzG musisz przekazać tablicę id'ków gatunków pobraną z bazy w postaci [1,2,3,4,5,6] - same id'ki (IMG:style_emoticons/default/wink.gif)

Co do drugiego pytania to rób inaczej - przy edycji usuń wszystkie powiązania FILM-GATUNEK z tej tabelki a potem dodaj je na nowo INSERTEM (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
gagatek
post
Post #5





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 18.02.2008

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


Cytat(Sephirus @ 15.12.2011, 16:27:35 ) *
Musisz przekazać swojej funkcji pobierzG gatunki jakie ma twój wpis:

  1. function pobierzG($gatunki){
  2. $gatunek=mysql_query("SELECT * FROM gatunek order by GATUNEK asc");
  3. while($wiersz= mysql_fetch_assoc($gatunek)){
  4.  
  5.  
  6. echo ' <input type="checkbox" name="gatunek[]" value="'.$wiersz['ID'].'" '.(isset($gatunki[$wiersz['ID']])) ? 'checked="checked" : '').'>'.$wiersz['GATUNEK'].''; // tutaj sprawdzasz i zaznaczasz


Do funkcji pobierzG musisz przekazać tablicę id'ków gatunków pobraną z bazy w postaci [1,2,3,4,5,6] - same id'ki (IMG:style_emoticons/default/wink.gif)

Co do drugiego pytania to rób inaczej - przy edycji usuń wszystkie powiązania FILM-GATUNEK z tej tabelki a potem dodaj je na nowo INSERTEM (IMG:style_emoticons/default/wink.gif)


mam jeszcze taką prośbę, po wrzuceniu:
  1. echo ' <input type="checkbox" name="gatunek[]" value="'.$wiersz['ID'].'" '.(isset($gatunki[$wiersz['ID']])) ? 'checked="checked" : '').'>'.$wiersz['GATUNEK'].'';

pojawia mi się

  1. Parse error: syntax error, unexpected T_CONSTANT_ENCAPSED_STRING in C:\xampp\htdocs\xxx\administrator\function.php on line 271

zmieniam, kombinuje i nie mogę się za chiny dopatrzeć błędu... Na pewno jest za dużo o jeden ). Ale to i tak nic nie zmienia;/

zrobilem tak
  1. echo ' <input type="checkbox" name="gatunek[]" value="'.$wiersz['ID'].'" '.(isset($gatunki[$wiersz['ID']])) ? 'checked="checked" ' .'>'.$wiersz['GATUNEK'].'';


i pojawia mi sie teraz tak:
  1. Parse error: syntax error, unexpected ';' in C:\xampp\htdocs\xxx\administrator\function.php on line 271


Ten post edytował gagatek 15.12.2011, 17:47:39
Go to the top of the page
+Quote Post
gorden
post
Post #6





Grupa: Zarejestrowani
Postów: 486
Pomógł: 101
Dołączył: 27.06.2010

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


już po pokolorowaniu składni widać, gdzie błąd.
'checked="checked"
brakuje zamknięcia apostrofu. i po co na końcu to .'' ?
Go to the top of the page
+Quote Post
gagatek
post
Post #7





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 18.02.2008

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


sorry ale naprawdę już zgłupiałem i nie moge znaleźć tego błędu...
Go to the top of the page
+Quote Post
gorden
post
Post #8





Grupa: Zarejestrowani
Postów: 486
Pomógł: 101
Dołączył: 27.06.2010

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


nie chodziło mi o te '' w warunku tylko na końcu echo. spróbuj:
  1. echo '<input type="checkbox" name="gatunek[]" value="'.$wiersz['ID'].'" '.(isset($gatunki[$wiersz['ID']]) ? 'checked="checked"' : '').'>'.$wiersz['GATUNEK'];
Go to the top of the page
+Quote Post
gagatek
post
Post #9





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 18.02.2008

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


już to echo jest ok i nie ma żadnych błędów:)
tylko jeszcze nie do końca wiem jak zrobić z tą tablicą z id
Cytat(Sephirus @ 15.12.2011, 16:27:35 ) *
Musisz przekazać swojej funkcji pobierzG gatunki jakie ma twój wpis:

  1. function pobierzG($gatunki){
  2. $gatunek=mysql_query("SELECT * FROM gatunek order by GATUNEK asc");
  3. while($wiersz= mysql_fetch_assoc($gatunek)){
  4.  
  5.  
  6. echo ' <input type="checkbox" name="gatunek[]" value="'.$wiersz['ID'].'" '.(isset($gatunki[$wiersz['ID']])) ? 'checked="checked" : '').'>'.$wiersz['GATUNEK'].''; // tutaj sprawdzasz i zaznaczasz


Do funkcji pobierzG musisz przekazać tablicę id'ków gatunków pobraną z bazy w postaci [1,2,3,4,5,6] - same id'ki (IMG:style_emoticons/default/wink.gif)


to wiem że w tym miejscu gdzie teraz wpisałem "xxx" to przekazuję do funkcji cokolwiek, ale nie do końca wiem w jaki sposób mam wyciągnąć i przesłać te ID...
  1. <td><form name="gatunek">
  2. <? pobierzGa($xxxxxxx); ?>
  3. </td></tr>


Ten post edytował gagatek 15.12.2011, 22:39:40
Go to the top of the page
+Quote Post
Sephirus
post
Post #10





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


pobierz powiązania filmu z gatunkiem:
  1. $q = mysql_query("SELECT * FROM `film_gatunek` WHERE ID_FILM = '$filmId'");
  2. $idki_gatunkow = array();
  3.  
  4. while($r = mysql_fetch_array($q,MYSQL_ASSOC)) $idki_gatunkow[$r['ID_GATUNEK']] = 1;
  5.  
  6. pobierzG($idki_gatunkow);


(IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
gagatek
post
Post #11





Grupa: Zarejestrowani
Postów: 44
Pomógł: 0
Dołączył: 18.02.2008

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


teraz już rozumiem!:)dzięki!:)
ale mam jeszcze jeden problem, chodź nie przypuszczałem że się tak zdarzy. Tak jak miałem tabele pośrednia film_gatunek, mam też film_jezyk. Chciałem zrobić identycznie jak z tymi gatunkami i mam tak:
  1. function pobierzJ(){
  2. $jezyk=mysql_query("SELECT * FROM jezyk order by JEZYK asc");
  3. while($wiersz= mysql_fetch_assoc($jezyk)){
  4.  
  5.  
  6. echo ' <input type="checkbox" name="jezyk[]" value="'.$wiersz['ID'].'"; ">'.$wiersz['JEZYK'].'';
  7.  
  8. }
  9. }


  1. <td><form name="jezyk">
  2. <? pobierzJ(); ?>
  3. </form>
  4. </td></tr>


  1. foreach($jezyk AS $j) mysql_query("INSERT INTO `film_jezyk` (ID_FILM, ID_JEZYK) VALUES ('$id_filmu[0]', '$j')") or die("Błądjjjj");

wydaje się jaby było wszytko dobrze, ale pojawia mi się ostrzeżenie, które właśnie tyczy się tej linijki z foreach, z tego co wyczytałem to że do tej zmiennej nie zostały zapisane wartości, ale nie wiem dlaczego, bo wydaje mi się że jest dobrze...
  1. Warning: Invalid argument supplied for foreach() in C:\xampp\htdocs\xxx\administrator\dodaj.php on line 28
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: 23.08.2025 - 10:59