Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP/MySQL] Problem ze zgraniem danych
Forum PHP.pl > Forum > PHP
PawelBah
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 winksmiley.jpg
yoltz
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';
thek
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 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 smile.gif
PawelBah
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.  
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.