Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Masowe usuwanie rekordów z bazy danych.
Forum PHP.pl > Forum > PHP
Robster
Witam

Generuję na stronie tabelę, w której znajdują się rekordy jednej z tabel. Każdemu wierszowi tabeli przypisuję checkbox i chciałbym by po zaznaczeniu checkbox'ów i wciśnięciu buttona formularza zaznaczone wiersze zostały usunięte z bazy. Czytałem, ze należy to zrobić przypisując checbox'om nazwę tablicową, a jako wartość wpisać ID danego rekordu z tablicy.
Tak też zrobiłem, niestety nie potrafię wyciągnąć wartości z tej tablicy :/ Byłbym wdzięczny za rozpisanie jakiegoś prostego kodu lub link do przykładu takiego zastosowania checkbox'ów. Ewentualnie innego rozwiązania problemu masowego usuwania rekordów.

Pozdrawiam
d3ut3r
Skoro masz już tablicę zaznaczonych wartości to dalej będzie już prosto:

  1. $tablica=(array)$_POST['checkboxy'];
  2. foreach ($tablica as $element){
  3. $sql="DELETE FROM twoja_tabela WHERE id=".(int)$element;
  4. //wykonanie zapytania ze zmiennej $sql
  5. }
  6. echo "Rekordy usunięte";


Zakładam, że checkboxy mają w value id rekordu. Skrypt również zakłada, że id jest liczbą całkowitą (stąd rzutowanie na int, które zabezpiecza przed sql injection).
kokers
jeśli masz checkboxy i name="jakasnazwa[]" to po wysłaniu formularza zrób
  1. print_r($_POST['jakasnazwwa');

zobaczysz jak wygląda ta tablica, jakie ma indeksy, jakie ma wartości i wtedy się przekonasz czy te wartości rzeczywiście zostały przekazane i jak.
Robster
Dzięki piękne panowie smile.gif Dobrze kombinowałem, ale wiedzy brakowało. Niestety tak to jest, kiedy człowiek zamiast zacząć od podstaw i porządna książkę przeczytać, uczy się tylko tego co mu w danej chwili jest potrzebne.

Reputka na + i udanego dnia życzę smile.gif
nospor
Wersja d3ut3r ma jedną wadę:
dla 10 checkboxów, wykona sie 10 zapytań.
dla 100 checkboxów, wykona sie 100 zapytań.

A można to wszystko zrobić jednym zapytaniem
  1. $tablica=(array)$_POST['checkboxy'];
  2. foreach ($tablica as $k => $v){
  3. $tablica[$k] = (int)$v; //zabezpieczamy sie przed "kuku" ze strony niedobrego użytkownika
  4. }
  5. $sql='DELETE FROM twoja_tabela WHERE id in ('.implode(',',$tablica).')';
  6. //wykonanie zapytania ze zmiennej $sql
  7. }
d3ut3r
Fakt moja wersja nie jest optymalna, wersja nospora zawsze wykona tylko jedno zapytanie.
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.