Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP][MYSQL]Zapis do bazy danych z listy wyboru - dalszy ciąg, temat aktualny
Czapla
post
Post #1





Grupa: Zarejestrowani
Postów: 130
Pomógł: 3
Dołączył: 10.12.2007
Skąd: Bielsko-Biała

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


Cześć

Założmy że mamy dwie tabele

przy_film

  1. CREATE TABLE IF NOT EXISTS `przy_film` (
  2. `id_film` int(11) NOT NULL AUTO_INCREMENT,
  3. `tytul` varchar(80) character SET utf8 collate utf8_polish_ci NOT NULL,
  4. PRIMARY KEY (`id_film`)
  5. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=203 ;


prz_gatunek

  1. CREATE TABLE IF NOT EXISTS `przy_gatunek` (
  2. `id_gatunek` int(11) NOT NULL AUTO_INCREMENT,
  3. `gatunek` varchar(30) character SET utf8 collate utf8_polish_ci NOT NULL,
  4. PRIMARY KEY (`id_gatunek`)
  5. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;


przy_film_has_przy_gatunek

  1. CREATE TABLE IF NOT EXISTS `przy_film_has_przy_gatunek` (
  2. `id_film` int(11) NOT NULL,
  3. `id_gatunek` int(11) NOT NULL,
  4. PRIMARY KEY (`id_film`,`id_gatunek`)
  5. ) ENGINE=MyISAM DEFAULT CHARSET=utf8



Każdemu filmowi przyporządkowany jest dokladnie jeden gatunek - jeden gatunek może być przyporządkowany wielu filmom - RELACJA 1:n

dla tabeli przy_film_has_przy_gatunek rekordy wyglądaj następująco

id_film/id_gatunku
1, 4
2, 4
3, 1
4, 2
5, 3

O ile w wypadku wyświetlania w formularzu rozwijanej listy z gatunkami wszystko jest OK to nie potrafie uporać się z zapisem do bazy.

Mała Legenda:

$aDBC - ustanawia połączenie do bazy
$SQL - zmienna przechowuje zapytanie SQL
FieldByName(); - pobiera rekordy z bazy
ExecSQL($SQL); - wykonuje zapytanie do bazy SQL
Next(); - zwraca kolejne rekordy

zapytanie SQL zostalo przerobione z zupełnie innego przykladu, a zmienne dostosowane do moich potrzeb...

Formularz wynik pliku php

  1. <tr>
  2. <td>Gatunek</td>
  3. <td>
  4. <select name="gatunek">
  5. <option value="4">aaa</option>
  6. <option value="2">fabularny</option>
  7. <option value="3">horror</option>
  8. <option value="1">komedia</option>
  9. </select>
  10. </td>
  11. </tr>



plik php tworzący formularz

[php]Gatunek
    

Ten post edytował Czapla 27.06.2008, 09:17:07
Powód edycji: dodałem tag (cysiaczek)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Czapla
post
Post #2





Grupa: Zarejestrowani
Postów: 130
Pomógł: 3
Dołączył: 10.12.2007
Skąd: Bielsko-Biała

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


Przerobiłem troche ten skrypt i pozbyłem się tabeli przy_film_has_przy_gatunek wrzuciłem do tabeli przy_film klucz obcy z tabeli przy_gatunek. Być może jeszcze zapytanie jest źle skonstruowane ponieważ skrypt teraz wogujle nie działa (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) wciąż pracuje nad tym (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) .

ZAPYTANIA DO TABEL

przy_film

  1. CREATE TABLE IF NOT EXISTS `przy_film` (
  2. `id_film` int(11) NOT NULL AUTO_INCREMENT,
  3. `id_gatunek` int(11) NOT NULL,
  4. `tytul` varchar(30) collate utf8_polish_ci NOT NULL,
  5. PRIMARY KEY (`id_film`),
  6. KEY `id_gatunek` (`id_gatunek`)
  7. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_polish_ci COMMENT='przechowuje dane filmów' AUTO_INCREMENT=1 ;


przy_gatunek

  1. CREATE TABLE IF NOT EXISTS `przy_gatunek` (
  2. `id_gatunek` int(11) NOT NULL AUTO_INCREMENT,
  3. `gatunek` varchar(30) character SET utf8 collate utf8_polish_ci NOT NULL,
  4. PRIMARY KEY (`id_gatunek`)
  5. ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;


NOWE ZAPYTANIE DO LĄCZENIA TABEL WYGLĄDA TAK (proszę o sprawdzenie czy jest poprawne):

  1. SELECT * FROM przy_film LEFT JOIN przy_gatunek ON przy_gatunek.id=przy_film.id_gatunek AND przy_film.id_gatunek = ".$ID_GATUNEK ."


Skrypt zapisujący do bazy danych

  1. <?php
  2. //(..)
  3. $SQL = "delete from przy_film where id_gatunek=". $ID_GATUNEK;
  4. $aDBC->ExecSQL ($SQL);
  5. $SQL = "SELECT * FROM przy_film LEFT JOIN przy_gatunek ON przy_gatunek.id=przy_film.id_gatunek 
    AND przy_film.id_gatunek = "
    .$ID_GATUNEK ." ";
  6. $SQL .= " order by gatunek";
  7. $aDBC ->ExecSQL ($SQL);
  8.  
  9. do{
  10. $SQL = "insert into przy_film (id_gatunek) values (";
  11. //$SQL .= $aDBC->FieldByName ("id");
  12. $SQL .= $ID_GATUNEK;
  13. $SQL .= ")";
  14. $aDBC->ExecSQL ($SQL);
  15. }while ($aDBC->Next());
  16. ?>


Skrypt tworzący formularz

  1. <?php
  2. //(..)
  3. $SQL = "SELECT id_gatunek FROM przy_film LEFT JOIN przy_gatunek ON przy_gatunek.id=
    przy_film.id_gatunek AND przy_film.id_gatunek = "
    . $ID_GATUNEK ." ";
  4. //$SQL = "SELECT * FROM przy_gatunek";
  5. $SQL .= " order by gatunek";
  6. $aDBC ->ExecSQL ($SQL);
  7. do{
  8.  $lista .= '<option value="'.$aDBC->FieldByName ("id_gatunek") .'">'.$aDBC->FieldByName ("gatunek") .'</option>';
  9. }while ($aDBC->Next());
  10. echo '<select name="gatunek">'.$lista.'</select>';
  11. ?>


Cytat
Ale pole które? W bazie (a.k.a. kolumna), inny select, czy może masz na myśli wartość selecta, a może po prostu jednego select, bo po kodzie można wywnioskować, że pól wyboru jest trochę więcej.


Tak pól wyboru było więcej ponieważ tamto zapytanie było złożone ale już je przerobiłem.
[quote]
Napisz jaśniej, co chcesz mieć wstawione do bazy, a co zapisuje obecnie (konkretniej!).
[,/quote]
Chce zapisywać do tabeli przy_film, id_gatunek, wartość selecta id_gatunek z tabeli przy_gatunek, następnie wyświetlać go po tym właśnie id w polu edycji w selectie jako gatunek [ rekord w tabeli przy_gatunek ] oraz w przeglądzie.


Edit a to zapytanie jest źle, po wrzuceniu do phpMyAdmin wypisuje mi że występuje duplikat id_gatunku w dwóch tabelach

Ktoś może mi udzielić odpowiedzi co mam nie tak?

EDIT: Naniesione poprawki

Ten post edytował Czapla 18.06.2008, 12:16:55
Go to the top of the page
+Quote Post

Posty w temacie
- Czapla   [PHP][MYSQL]Zapis do bazy danych z listy wyboru - dalszy ciąg   12.06.2008, 13:26:16
- - MMX3   Gatunek trzymany jest tu: [PHP] pobierz, plaintext...   12.06.2008, 13:59:56
- - Czapla   EDIT: PATRZ POST 1   13.06.2008, 07:04:33
- - JoShiMa   wyświetl sobie ten formularz w przeglądarce zobacz...   13.06.2008, 10:52:06
- - Czapla   EDIT: PATRZ POST 1   13.06.2008, 11:41:01
- - JoShiMa   Nie rozumiem tego: [PHP] pobierz, plaintext <?p...   13.06.2008, 11:56:37
- - Czapla   bump, problem wciąż aktualny V ok pop...   15.06.2008, 14:41:53
- - matx132   jedyne co tu widze i nie rozumiem to to:) $P...   15.06.2008, 15:33:15
- - Czapla   W dalszym ciągu czekam na pomoc, napisa...   16.06.2008, 10:50:30
- - erix   CytatW rezultacie skrypt zapisze tylko pierwsze po...   17.06.2008, 19:15:47
- - Czapla   Przerobiłem troche ten skrypt i pozbyłem...   18.06.2008, 06:23:41
- - erix   A nie masz przypadkiem jakiegoś babola w tym miejs...   18.06.2008, 11:49:33
- - Czapla   racja zarymowałem tą pierwszą linijkę byłbym wdz...   18.06.2008, 12:15:32
- - erix   Przyjrzyj się polom, jakie deklarujesz w INSERT i ...   18.06.2008, 18:47:47
- - Czapla   teraz to ja nie czaje o.O co jest źle? sk...   18.06.2008, 20:25:09
- - erix   No właśnie. A w tamtym Twoim jest: nazwaKolumny1 =...   18.06.2008, 23:13:24
- - eKuba   masz 3 kolumny |NOT NULL auto_increment | NOT NU...   19.06.2008, 02:06:01
- - Czapla   Tak? [PHP] pobierz, plaintext <?php$SQL = ...   19.06.2008, 06:35:34
- - erix   Cały czas ktoś próbuje. ;] CytatWyświetlanie mi w...   19.06.2008, 13:35:48
- - Czapla   To jeszcze raz: mamy dwie tabele: przy_film z ko...   20.06.2008, 07:22:15
- - erix   Nie odpowiedziałeś mi na jedno. CytatNie rozumiem...   20.06.2008, 13:12:43
- - Czapla   Ok wałkujemy dalej ten temat będe m...   27.06.2008, 08:23:25
- - -Czapla-   BUMP   29.06.2008, 15:10:14


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: 16.09.2025 - 04:58