Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Usuwanie notatek administracyjnych - metoda $_GET
Forum PHP.pl > Forum > Przedszkole
Kerth
Witam,
zrobiłem system notatek administracyjnych w moim panelu administracyjnym. Z dodawaniem notatek wszystko jest w porządku. Gorzej jest z ich usuwaniem. Mam taki kod:
  1. $pobierzNotatka = $db->prepare("SELECT `id`, `nick`, `notatka`, `data` FROM `notatki_admin`");
  2.  
  3. if(!$pobierzNotatka->execute()){
  4. throw new Exception("Błąd zapytania z NOTATKAMI ADMINISTRATORÓW.");
  5. }
  6.  
  7. foreach($pobierzNotatka as $row_not_admin)
  8. {
  9. echo "</br>Nick: \t";
  10. echo('<span class = "red">');
  11. echo ''.$row_not_admin['nick'].'</br>' ;
  12. echo('</span>');
  13.  
  14. echo "Data: \t";
  15. echo('<span class = "red">');
  16. echo ''.$row_not_admin['data'].'</br>';
  17. echo('</span>');
  18.  
  19. echo "Notatka: \t";
  20. echo('<span class = "red">');
  21. echo ''.$row_not_admin['notatka'].'</br>';
  22. echo('</span>');
  23.  
  24. echo '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<a href="notatki.php?id='.$row_not_admin['id'].'">[X]</a></br>';
  25. if(isset($_GET["id"]))
  26. {
  27. $id = str_replace("\'","\\\'",$_GET["id"]);
  28. $usunNotatka = $db->prepare("DELETE FROM `notatki_admin` WHERE `id` = :id");
  29. $usunNotatka->bindValue(":id", $id, PDO::PARAM_INT);
  30. }
  31. }


Gdy kliknę na [X] w linku poprawnie pobiera id notatki. Niestety na tym się kończy. Notatka się nie usuwa. Co zrobić? Jakieś pomysły/rady?
Damonsson
  1. if(isset($_GET["id"]))
  2. {
  3. $usunNotatka = $db->prepare("DELETE FROM `notatki_admin` WHERE `id` = :id");
  4. $usunNotatka->bindValue(":id", $id, PDO::PARAM_INT);
  5. $usunNotatka->execute();
  6. }
Kerth
Niestety nie działa. Po próbowałem i mam coś takiego:

  1. $pobierzNotatka = $db->prepare("SELECT `id`, `nick`, `notatka`, `data` FROM `notatki_admin`");
  2.  
  3. if(!$pobierzNotatka->execute()){
  4. throw new Exception("Błąd zapytania z NOTATKAMI ADMINISTRATORÓW.");
  5. }
  6.  
  7. foreach($pobierzNotatka as $row_not_admin)
  8. {
  9. echo "</br>Nick: \t";
  10. echo('<span class = "red">');
  11. echo ''.$row_not_admin['nick'].'</br>' ;
  12. echo('</span>');
  13.  
  14. echo "Data: \t";
  15. echo('<span class = "red">');
  16. echo ''.$row_not_admin['data'].'</br>';
  17. echo('</span>');
  18.  
  19. echo "Notatka: \t";
  20. echo('<span class = "red">');
  21. echo ''.$row_not_admin['notatka'].'</br>';
  22. echo('</span>');
  23.  
  24. echo '- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -<a href="notatki.php?id='.$row_not_admin['id'].'">[X]</a></br>';
  25. if(isset($_GET["id"]))
  26. {
  27. $usunNotatka = $db->prepare("DELETE FROM `notatki_admin` WHERE `id` = :id");
  28. $usunNotatka->bindValue(":id", $row_not_admin['id'], PDO::PARAM_INT);
  29. $usunNotatka->execute();
  30. }
  31. }


lecz ten kod usuwa wszystkie notatki. I jakby tego było mało link nie reaguje na 1 kliknięcie zadziała dopiero po drugim(i wszystko usuwa). Nie wiem czemu. Co jest nie tak?
Damonsson
Zgubiłem jedną linijkę biggrin.gif

Poza tym włącz sobie wyświetlanie błędów, powinno Ci od razu wyskoczyć, że nie masz $id zdefiniowanego.

  1. if(isset($_GET["id"]))
  2. {
  3. $id = $_GET["id"]; // str_replace jest niepotrzebne jak bindujesz dane
  4. $usunNotatka = $db->prepare("DELETE FROM `notatki_admin` WHERE `id` = :id");
  5. $usunNotatka->bindValue(":id", $id, PDO::PARAM_INT); // tu też był błąd. Po co to dodałeś? "$row_not_admin['id']" ?
  6. $usunNotatka->execute();
  7. }



Kerth
Ale czemu trzeba kliknąć 2 razy na [X] żeby usunęło?
Turson
foreach($pobierzNotatka as $row_not_admin)
Co to ma być questionmark.gif Gdzie w ogóle podział się jakich fetch()
Kerth
Ale jak ja mam użyć do tego fetch()? Przecież zwracam kilka wartości(więc dałem pętlę). Jak mam tego użyć?
Turson
W PDO powinno to być tak

  1. $pobierzNotatka = $db->prepare("SELECT `id`, `nick`, `notatka`, `data` FROM `notatki_admin`");
  2.  
  3. if(!$pobierzNotatka->execute()){
  4. throw new Exception("Błąd zapytania z NOTATKAMI ADMINISTRATORÓW.");
  5. }
  6.  
  7. $rows = $pobierzNotatka->fetchAll(PDO::FETCH_ASSOC);
  8. foreach($rows as ....){
  9.  
  10. }
Kerth
Cytat(Turson @ 14.07.2014, 15:56:21 ) *
W PDO powinno to być tak

  1. $pobierzNotatka = $db->prepare("SELECT `id`, `nick`, `notatka`, `data` FROM `notatki_admin`");
  2.  
  3. if(!$pobierzNotatka->execute()){
  4. throw new Exception("Błąd zapytania z NOTATKAMI ADMINISTRATORÓW.");
  5. }
  6.  
  7. $rows = $pobierzNotatka->fetchAll(PDO::FETCH_ASSOC);
  8. foreach($rows as ....){
  9.  
  10. }


No tak, ale powiedz co to zmienia? Działanie jest takie samo. A pomimo tego nadal trzeba 2 razy kliknąć, żeby usunąć.
Damonsson
Teoretycznie nie powinieneś mieć w ogóle tego [X] widocznego, praktycznie masz.

Daj to:

  1. if(isset($_GET["id"]))
  2. {
  3. $id = $_GET["id"]; // str_replace jest niepotrzebne jak bindujesz dane
  4. $usunNotatka = $db->prepare("DELETE FROM `notatki_admin` WHERE `id` = :id");
  5. $usunNotatka->bindValue(":id", $id, PDO::PARAM_INT); // tu też był błąd. Po co to dodałeś? "$row_not_admin['id']" ?
  6. $usunNotatka->execute();
  7. }


na początek pliku. Może teraz nie trzeba będzie klikać 2 razy.
Kerth
Cytat(Damonsson @ 14.07.2014, 18:42:14 ) *
Teoretycznie nie powinieneś mieć w ogóle tego [X] widocznego, praktycznie masz.

Daj to:

  1. if(isset($_GET["id"]))
  2. {
  3. $id = $_GET["id"]; // str_replace jest niepotrzebne jak bindujesz dane
  4. $usunNotatka = $db->prepare("DELETE FROM `notatki_admin` WHERE `id` = :id");
  5. $usunNotatka->bindValue(":id", $id, PDO::PARAM_INT); // tu też był błąd. Po co to dodałeś? "$row_not_admin['id']" ?
  6. $usunNotatka->execute();
  7. }


na początek pliku. Może teraz nie trzeba będzie klikać 2 razy.


A to coś z tym [X] jest nie tak? Nadal gdy dam na początek trzeba 2 razy kliknąć. Pierwszy raz, żeby "wczytało link do przeglądarki", drugi raz żeby usunąć. A chodzi mi o to, żeby od razu usuwało.
Turson
  1. if(isset($_GET["id"]))
  2. {
  3. $id = str_replace("\'","\\\'",$_GET["id"]);
  4. $usunNotatka = $db->prepare("DELETE FROM `notatki_admin` WHERE `id` = :id");
  5. $usunNotatka->bindValue(":id", $id, PDO::PARAM_INT);
  6. }

nie trzymaj tego w pętli...
Kerth
Cytat(Turson @ 14.07.2014, 20:17:44 ) *
  1. if(isset($_GET["id"]))
  2. {
  3. $id = str_replace("\'","\\\'",$_GET["id"]);
  4. $usunNotatka = $db->prepare("DELETE FROM `notatki_admin` WHERE `id` = :id");
  5. $usunNotatka->bindValue(":id", $id, PDO::PARAM_INT);
  6. }

nie trzymaj tego w pętli...


Nie ma to znaczenia gdzie jest, czy w pętli czy nie. I tak jest tak samo.
johny_s
a nie masz czasem tak że najpierw wyświetlasz/pobierasz dane a dopiero potem kasujesz?
Damonsson
Skoro kazałem mu dać to na początek pliku i odpisał, że nie ma to znaczenia to widocznie nie.
Kerth
Cytat(johny_s @ 14.07.2014, 20:28:05 ) *
a nie masz czasem tak że najpierw wyświetlasz/pobierasz dane a dopiero potem kasujesz?


Tak dokładnie. Najpierw wyświetlam/pobieram dane a dopiero potem kasuję.
johny_s
No a sprawdzasz w bazie czy na stronie czy się notatka usuneła?
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.