Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP i MySQL] Usuwanie z DB rekordów wybranych przez checkbox
Forum PHP.pl > Forum > PHP
elwierka
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
NuLL
Kod
DELETE FROM tabele WHERE wybor IN (1,2,3,4,....)

Wyciagasz id, filtrujesz, kleisz implodem i z glowy smile.gif
nospor
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. }
elwierka
dziękuję smile.gif nie wiedziałam, że to takie proste....a ja tyle kombinowałam ... dzięki jeszcze raz smile.gif

Super, działa, o to mi chodziło smile.gif

no dobrze, to w takim razie kontynuuję dalej....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ć sad.gif

Pomożecie? smile.gif
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.