Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP i MySQL] Usuwanie z DB rekordów wybranych przez checkbox
elwierka
post
Post #1





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 26.12.2007

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


Szukam w googlach, ale niewiele na ten temat mogę znaleźć. Chodzi o masowe usuwanie rekordów z tabeli w bazie danych mysql.
Powiedzmy, że mam listę kategorii wyświetlaną na stronie www (w panelu admina), każda nazwa kategorii ma unikatowy identyfikator. Przy każdej nazwie kat. znajduje się pole zaznaczenia checkbox, którego wartością jest id kategorii w bazie danych. Chcę aby można było masowo usunąć z bazy danych wszystkie zaznaczone w polach checkbox kategorie. Jakie było by najbardziej optymalne rozwiązanie tego problemu?
Czy mam zadać zapytanie: DELETE FROM tabela WHERE wybor = (wartość checkbox1) AND wybor = (wartość checkbox2)....itd.....
czy może jest jakieś inne lepsze rozwiązanie?
Wybrane wartości będą zmienne, dlatego nie powinno się określać sztywnego zapytania...może wybrane wartości checkbox przekazać do jakiejś tablicy i po prostu przekazać je do zapytania?
Nie wiem jak to zrobić...czy ktoś mógłby mnie nakierować albo przynajmniej zarzucić jakiś przykład? Fragment kodu, który by mi ten problem rozjaśnił?

Dzięki serdeczne i pozdrawiam
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
NuLL
post
Post #2





Grupa: Zarejestrowani
Postów: 2 262
Pomógł: 21
Dołączył: 3.05.2004
Skąd: Sopot, Krakow, W-wa

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


Kod
DELETE FROM tabele WHERE wybor IN (1,2,3,4,....)

Wyciagasz id, filtrujesz, kleisz implodem i z glowy (IMG:style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
nospor
post
Post #3





Grupa: Moderatorzy
Postów: 36 559
Pomógł: 6315
Dołączył: 27.12.2004




dla checkboxów nadaj nazwę tablicową, np: kat[]
jako wartosc checkboxa nadawaj id kategorii.

I teraz w php:
  1. if (!empty($_POST['kat'])){
  2. $sql = 'delete from tabela where ID in ('.implode(',',$_POST['kat']).')';
  3. }
Go to the top of the page
+Quote Post
elwierka
post
Post #4





Grupa: Zarejestrowani
Postów: 66
Pomógł: 0
Dołączył: 26.12.2007

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


dziękuję (IMG:style_emoticons/default/smile.gif) nie wiedziałam, że to takie proste....a ja tyle kombinowałam ... dzięki jeszcze raz (IMG:style_emoticons/default/smile.gif)

Super, działa, o to mi chodziło (IMG:style_emoticons/default/smile.gif)

no dobrze, to w takim razie kontynuuję dalej....(IMG:style_emoticons/default/smile.gif)

Zanim nadałam dla checkboxów zmienną tablicową o nazwie "wybrano[]", checkboxy oznaczyłam po prostu jako name="wybrano".
Stworzyłam tez oddzielny checkbox o nazwie "all". po którym zaznaczeniu miały zaznaczyć się wszystkie checkboxy na stronie, by potem za pomocą jednego przycisku móc je usunąć.

Do tego napisałam prosty skrypcik w java script:

Kod
<script type="text/javascript">
function Zaznacz(thisForm)
{
for (i = 0; i < thisForm.wybrano.length; i++)
{
thisForm.wybrano[i].checked=true
}
}

function Odznacz(thisForm)
{
for (i = 0; i < thisForm.wybrano.length; i++)
{
thisForm.wybrano[i].checked=false
}
}

function Sprawdz(thisForm)
{
if (thisForm.all.checked==true){
   Zaznacz(thisForm)
} else {
    Odznacz(thisForm)
}
}
</script>


a tutaj formularz:

  1. <table class="form" cellspacing="1" cellpadding="5">
  2. <tr><td colspan="6">
  3. <form method="post" action="./admin/gt_usun_wsz.php">
  4. <input type="submit" name="usun" class="submit" value="Usuń wybrane" /></td></tr>
  5. <tr>
  6. <td><input type="checkbox" value="true" name="all" onClick="Sprawdz(this.form)" title="Zaznacz wszystkie" /></td>
  7. <td><h3>Id grupy towarów</h3></td>
  8. <td><h3>Nazwa</h3></td>
  9. <td><h3>Przypisana do</h3></td>
  10. <td colspan="2"><h3>Akcja</h3></td>
  11. </tr>
  12.  
  13. <?php
  14. $bg = '#ffffff;';
  15.  
  16. foreach($tab_gt as $rzad){
  17. $bg = ($bg == '#ffffff'? '#f4f7f8' : '#ffffff');
  18. echo "<tr style=\"background-color:".$bg.";\">
  19. <td><input type=\"checkbox\" name=\"wybrano\" value=\"".$rzad['gt_id']."\" /></td>
  20. <td>";
  21. echo $rzad['gt_id'];
  22. echo '</td><td>';
  23. $url = "pokaz_gt.php?idgt=".($rzad['gt_id']);
  24. $tytul = $rzad['opis'];
  25. tworz_HTML_URL($url, $tytul);
  26. echo "</td><td>";
  27. $nazwa = pobierz_nazwe_podkat($rzad['podkat_id']);
  28. echo $nazwa;
  29. echo "</td><td>";
  30. $url1 = "?f=GtEdytuj&idgt=".($rzad['gt_id']);
  31. $url2 = "?f=GtUsun&idgt=".($rzad['gt_id']);
  32. tworz_HTML_URL($url1,'Edytuj');
  33. echo "</td><td>";
  34. tworz_HTML_URL($url2,'Usuń');
  35. echo "</td></tr>";
  36. }
  37. echo "</form></table>";
  38.  
  39. }


Działało tak, jak potrzeba. Funkcja js po zaznaczeniu checkboxa "all" zaznaczała wszystkie znajdjące się na stronie. Jak zmieniłam nazwy checkboxów na tablicowe, czyli z name="wybrano" na name="wybrano[]", to oczywiście już nie zaznacza checkboxów. Przyznam, że js tylko liznęłam i niestety nie wiem za bardzo jak zrobić, żeby teraz znowu działało. Chciałabym jeszcze dodatkowo dołączyć tu funkcję, która sprawdza, czy przy mimo, że zaznaczono "all" to rzeczywiście wszystkie checkboxy na stronie są zaznaczone, czy jednak jakieś odznaczono i w zależności od wyniku, albo usuwa wszystkie z bazy danych, albo tylko wybrane. Nie wiem tylko jak ten skrypt w js napisać (IMG:style_emoticons/default/sad.gif)

Pomożecie? (IMG:style_emoticons/default/smile.gif)
Powód edycji: [thek]: Na najprostsze rozwiązania zawsze najtrudniej wpaść ;) Poprogramujesz - zobaczysz sama...
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: 2.10.2025 - 20:28