Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php][mysql]Jak zakodować to w php?
lamcpp
post
Post #1





Grupa: Zarejestrowani
Postów: 372
Pomógł: 2
Dołączył: 10.05.2009

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


Witam, próbuje zakodować funkcjonalność usuwania słówek z bazy danych.

Baza danych ma 3 tabele (problemem jest tu to że trzecia tabela to powiązanie pomiędzy dwoma poprzednimi tabelami i ją trzeba najpierw usunąć)

Oto tabele:
  1. CREATE TABLE tlumaczenie(
  2. id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  3. id_slowo_ang INT NOT NULL,
  4. id_slowo_pl INT NOT NULL,
  5. FOREIGN KEY(id_slowo_ang) REFERENCES slowo_ang(id),
  6. FOREIGN KEY(id_slowo_pl) REFERENCES slowo_pl(id)
  7. )ENGINE=InnoDB;
  8.  
  9. CREATE TABLE slowo_pl(
  10. id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  11. nazwa VARCHAR(40)
  12. )ENGINE=InnoDB;
  13.  
  14. CREATE TABLE slowo_ang(
  15. id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
  16. wymowa VARCHAR(40),
  17. nazwa VARCHAR(40)
  18. )ENGINE=InnoDB;


i teraz żeby usunąć slowo_pl musze najpierw znaleźć id tego słowa w tabeli "tlumaczenie" usunąć rekord z tym id, a następnie znaleźć w tabeli slowo_pl to słowo i usunąć, próbuje wykonać to za pomocą następującego kodu (niestety nie wystepuje zaden błąd ale słowo nie usuwa się z bazy):
  1. <?php
  2. if($_POST['submit'])
  3. {
  4. require_once("baza.php");
  5. $slowko_ang = $_POST['slowko_ang'];
  6. $slowko_pl = $_POST['slowko_pl'];
  7. $query = "DELETE FROM tlumaczenie WHERE id_slowo_pl=(SELECT id FROM slowo_pl WHERE nazwa='$_slowko_pl')";
  8. $objekt -> query($query);
  9.  
  10. $query = "DELETE FROM slowo_pl WHERE nazwa='$slowko_pl'";
  11. $objekt -> query($query);
  12. echo "Słówko zostało usunięte.<br />";
  13. }
  14. ?>
  15.  
  16.  
  17. <h1>Usuń słówko</h1>
  18. <form action="usun_slowko.php" method="post">
  19. Wpisz słowko do usunięcia:<br />
  20. w języku polskim: <input type="text" name="slowko_pl" /><br />
  21. <input type="submit" name="submit" value="usuń"><br />
  22. </form>



czy ktoś mógłby doradzić jak to zrobić, albo chociaż co tu skopałem, ze nie działa tak jak trzeba?

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
thek
post
Post #2





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




@JoShiMa: nie ma tak łatwo. Użycie ON DELETE CASCADE w tym przypadku to podcinanie gałęzi na jakiej się siedzi. Przy tłumaczeniach masz bowiem złączenia także inne niż 1-do-1 bo występują słowa mające wiele znaczeń, czasem w zależności od kontekstu. Prosty przykład: szczyt. W zależności od tego czy chodzi o szczyt góry, konferencję czy też coś innego, masz różne odpowiedniki w angielskim. Kaskadowa kasacja pozbawiła by Cię szybko wieloznaczności. W przypadku słownika musi usuwając klucz sprawdzać, czy do obu ze słów istnieją powiązania z innymi słowami. Dopiero ich brak pozwala na usunięcie słowa z bazy. Czasem może się okazać, że usunięcie tłumaczenia kończy się tylko na tym, innym razem pozwoli na usunięcie tłumaczenia i obu wyrazów, a czasem tylko jednego z nich. Nie można w takiej sytuacji zdać się tylko na bazę.
Go to the top of the page
+Quote Post

Posty w temacie


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: 6.10.2025 - 23:23