Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP/MySQL] Problem ze zgraniem danych
PawelBah
post
Post #1





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 1.02.2010

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


Witam,

Opis problemu:

Schemat bazy na potrzeby rozwiązania problemu:

Tabela: filmy:
- film_id
- tytul
- ...

Tabel: aktorzy:
- aktor_id
- nazwisko

Tabela: rezyserowie:
- rezyser_id
- nazwisko

Tabela: film:
- film_id
- aktor_id
- rezyser_id

Krok 1:
Pojawia się formularz w którym wybieramy ilu aktorów i ilu reżyserów chcemy dodać ->

Krok 2:
Po wysłaniu formularza pierwszego strona się odświeża i zostaje wygenerowany formularz z:

- tytułem
- gatunkiem
...
+
- polami aktor w liczbie odpowiadającej tej z kroku pierwszego.
- polami reżyser w liczbie odpowiadającej tej z kroku pierwszego.

Problem pojawia się podczas dodawania filmu do bazy danych, mianowicie:

- najpierw dodajemy dane do tabeli filmy - prosty INSERT z danymi z formularza.
- później dodajemy dane do tabeli aktorzy - nieco trudniejsze rozwiązanie, gdyż nie wiemy(na sztywno) ilu ich jest, ale z pomocą przychodzą nam pętle. Identycznie postępujemy z tabela rezyserowie.

Pytanie: jak dodać dane do tabeli film?

1. Zapytaniem:
  1. SELECT film_id FROM filmy ORDER BY film_id DESC LIMIT
1 - pobierzemy film_id ostatnio dodanego filmu?

Jak pobrać ostatnio dodanych aktorów i reżyserów? I wstawić ich do tabeli film razem z odpowiadającą im wartością film_id?

-----------------------
Pytania na później:

- Jak rozwiązać sytuacje gdy aktor/reżyser o podanym nazwisku jest już w bazie?
- Odnoszę wrażenie jakbym robił to jakoś naokoło, może istnieje jakiś prostszy sposób dodania filmu do bazy przy założeniach:

- aktorzy w bazie nie mogą się powtarzać.
- reżyserowie nie mogą się powtarzać.
- tabela filmy nie może zawierać 50 pól aktor/reżyser z czego 40 na wszelki wypadek (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
yoltz
post
Post #2





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 28.02.2008

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


nie do konca kumam ale łatwiej bedzie zapisac dane do tabeli i z pętli wyciągnąć po nazwisku id masz pewnosc ze w miedzy czasie nikt ci nie doda jakiegos rekordu,

poz tym zamiast
  1. SELECT film_id FROM filmy ORDER BY film_id DESC LIMIT
  2. SELECT max(film_id) as id FROM filmy
jezeli chodzi o sprawdzanie czy rekord jest w bazie to gdzie widzisz problem?

select id from aktorzy where nazwisko="$_GET['nazwisko']"
if($r->id)
echo 'takie nazwisko juz jest w bazie';
Go to the top of the page
+Quote Post
thek
post
Post #3





Grupa: Moderatorzy
Postów: 4 362
Pomógł: 714
Dołączył: 12.02.2009
Skąd: Jak się położę tak leżę :D




A po co tak się motać? Skoro najpierw dodajesz film to chyba logiczne, że TO TEN rekord będzie Cię interesował. Zrób więc zaraz po INSERT last_insert_id() i zapamiętaj go w zmiennej jakiejś. Użyjesz go potem w zapytaniach gdzie masz użyć owego id (IMG:style_emoticons/default/smile.gif)
Sprawdzanie to proste zapytanie do bazy. Najprościej byłoby kombinować na jeden z 2 sposobów:
1) Sprawdzasz dopiero PODCZAS dodawania czy owi aktorzy/reżyserzy są już w bazie i jeśli tak to przechwytujesz ich id, a brakujących dodajesz
2) Formularz konstruujesz jako AJAX i autocomplete robisz (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
PawelBah
post
Post #4





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 1.02.2010

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


Odświeżam temat:

Pytanie brzmi: jak nie dublować aktorów w bazie danych w tabeli aktorzy.

System działa tak:

1. Użytkownik wybiera ilu aktorów chce wstawić.
2. Skrypt generuje dana liczbę pól(p. 1).
3. Użytkownik wysyła formularz. Wszystkie inputy są filtrowane i wstawiane do tablicy aktorzy[].
4. Jeśli wszystko przebiegło prawidłowo wykonywany jest poniższy kod:

  1. for($i=0;$i<count($aktorzy);$i++){
  2. $z="INSERT INTO aktorzy (nazwisko) VALUES('".$aktorzy[$i]."')";
  3. $r=@mysqli_query($bd, $z);
  4. }
  5. for($i=0;$i<count($aktorzy);$i++){
  6. $z = "SELECT aktor_id FROM aktorzy WHERE nazwisko = '".$aktorzy[$i]."'";
  7. $r = @mysqli_query($bd, $z);
  8. $row = mysqli_fetch_array($r, MYSQLI_ASSOC);
  9. $aktorzy_id[] = $row['aktor_id'];
  10. }
  11. for($i=0;$i<count($aktorzy);$i++){
  12. $z = "INSERT INTO film_aktor (film_id, aktor_id, rola) VALUES (
  13. ".$film_id.",
  14. ".$aktorzy_id[$i].",
  15. '".$role[$i]."'
  16. )";
  17. $r = @mysqli_query($bd, $z);
  18. }
  19. }



Przed wstawieniem należałoby wykonać w pętli zapytanie SELECT które by sprawdziło i pobrało ID aktorów którzy są już w bazie.

Problem:
W tablicy aktorzy[] może być np. 10 nazwisko różnych aktorów z czego np. tylko 3 mogą już istnieć w bazie danych. Jak wyeliminować te 3 nazwiska z tej tablicy i dodatkowo uzupełnić ich ID'kami tabele film_aktor łącznie z nowa rolą która również pobieramy z formularza? Poniżej zamieszczam jeszcze formularz.

  1. <form method="POST">
  2. <fieldset>
  3. <legend>Aktorzy</legend>
  4. <?php
  5. for($i=1;$i<=$l_a;$i++){
  6. ?>
  7. <div class="lformularz">
  8. <label for="aktor<?php echo $i; ?>"><?php echo $i; ?>. Aktor </label>
  9. <input class="text" type="text" name="aktor<?php echo $i; ?>" id="aktor<?php echo $i; ?>" />
  10.  
  11. </div>
  12. <div class="rformularz">
  13. <label for="rola<?php echo $i; ?>">Rola </label>
  14. <input class="text" type="text" name="rola<?php echo $i; ?>" id="rola<?php echo $i; ?>" />
  15. </div>
  16. <?php
  17. }
  18. ?>
  19. </fieldset>
  20. </form>
  21.  


Ten post edytował PawelBah 13.02.2010, 18:34:42
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 - 14:54