Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]zapis formularza z kilkoma zaznaczonymi opcjami
Forum PHP.pl > Forum > Przedszkole
gagatek
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");
Sephirus
  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! wink.gif
gagatek
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...
Sephirus
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 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 wink.gif
gagatek
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 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 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
gorden
już po pokolorowaniu składni widać, gdzie błąd.
'checked="checked"
brakuje zamknięcia apostrofu. i po co na końcu to .'' ?
gagatek
sorry ale naprawdę już zgłupiałem i nie moge znaleźć tego błędu...
gorden
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'];
gagatek
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 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>
Sephirus
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);


wink.gif
gagatek
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
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.