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
lamcpp
post
Post #2





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

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


Joshima:
poszedłem za Twoimi słowami i zastosowałem kaskadowe usuwanie robiąc tak:
alter table tlumaczenie add constraint foreign key(id_slowo_pl) REFERENCES slowo_pl(id) ON DELETE CASCADE;
alter table tlumaczenie add constraint foreign key(id_slowo_ang) REFERENCES slowo_ang(id) ON DELETE CASCADE;

czyli dokładnie to co napisał w ostatnim poście Cojack.
Tyle ze wadą takiego rozwiązania jest to, że usuwa mi tylko słówko polskie oraz tłumaczenie, a więc rekordy z dwoch tabel powiązane ze sobą, nie usuwa natomiast słowka angielskiego, które to również powinno zostać usunięte.

Dodatkowo nowe spojrzenie naświetlił thek, że odpowiedniki słówek mają różne znaczenia i tu tez problem jak to zakodować, żeby usunęło się własciwe tłumaczenie,
oraz jak zmienić moj kod(ponizej) aby usuwało się nie tylko słówko polskie i powiązanie ( z tabeli tłumaczenie) ale tez słowko angielskie które jest z nim powiązane)

Obecny kod:
  1. <?php
  2. if($_POST['submit'])
  3. {
  4. require_once('baza.php');
  5. $slowko_pl = $_POST['slowko_pl'];
  6. $query = "delete FROM slowo_pl WHERE nazwa='$slowko_pl'";
  7. $objekt -> query($query);
  8. echo "Usunięto słówko<br />";
  9. }
  10. ?>
  11.  
  12. <form action="usun_slowko.php" method="post">
  13. Podaj słówko do usnięcia(w j. polskim):<input type="text" name="slowko_pl" /><br />
  14. <input type="submit" name="submit" value="Usuń" /><br />
  15. </form>


Jedyne co mi przychodzi do głowy aby jednocześnie usunęło się słowko angielskie to dodać w formularzu pole, by użytkownik wpisał też słowko w języku angielskim a w kodzie dodać jeszcze jedno DELETE by usunąć to słowko. Wada jest taka, że przecież użytkownik nie zawsze zna słówko i jego odpowiednik w j. angielskim a więc rozwiązanie to nie jest dobre...

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: 14.10.2025 - 16:04