Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]jak zrobić usuwanie kilku komentarzy z bazy jednocześnie?
Forum PHP.pl > Forum > Przedszkole
lamcpp
System komentarzy na mojej stronie działa w ten sposob ze komentarz najpierw przesyłany jest do mnie do weryfikacji i ja albo go publikuję albo usuwam. Kod:
  1. <?php
  2. $wynik = mysqli_query($dbc,"SELECT * FROM komentarz WHERE pokaz=0");
  3. while($rezult = mysqli_fetch_array($wynik)){
  4. echo '<input type="checkbox" value="{$rezult[\'id\']}" />&nbsp;&nbsp;';
  5. echo $rezult['id'].'&nbsp;&nbsp;'.$rezult['tresc'].'&nbsp;&nbsp;<a href="index.php?publikuj='.$rezult['id'].'">';
  6. echo 'Publikuj</a>&nbsp;&nbsp;<a href="index.php?usun_komentarz='.$rezult['id'].'">Usuń</a><br />';
  7. }
  8. ?>
Chciałbym go przekształcić abym mógł jednocześnie usuwać np. 10 komentarzy. W tym celu dodałem linikę: echo '<input type="checkbox" value="{$rezult[\'id\']}" />&nbsp;&nbsp;';
tak by można było klikać checkboxy z artykułami, które mają być usunięte. Następnie dodałem formularz z listą rozwijalną, tak by użytkownik wybrał czy chce usunąć czy dodać komentarz do bazy.

  1. <div id="komentarz-wyk-akcje">
  2. <form action="" method="post">
  3. <select name="wyk-masowa-akcje">
  4. <option selected="selected">Wykonaj jedną z akcji:</option>
  5. <option value="dodaj">Dodaj komentarz</option>
  6. <option value="usun">Usuń komentarz</option>
  7. </select>
  8. <input type="submit" value="Zastosuj" name="Zastosuj" />
  9. </form>
  10. </div>


I teraz zastanawiam się jak to zakodować, by "po wybraniu przeze mnie jakiejś liczny np. 4 komentarzy (poprzez zaznaczenie obok nich "ptaszka" w checkboxie) by dokładnie te komentarze zostały usunięte z bazy.
Stanęło na tym, że nie wiem jak zakodować takiego IFa,
czyli: JEŚLI zaznaczyłeś komentarze i wybrałeś z listy rozwijalnej "usun" to USUŃ dokładnie te zaznaczone komentarze.
Prośba o pomoc w tej zagwozdce
modern-web
Generując formularz przypisujesz im ID to samo co w bazie, przy usuwaniu zbierasz te ID i usuwasz każdy po kolei.
Podstawy PHP znasz?
b4rt3kk
Checkboxy oprócz value muszą mieć jeszcze name. Ale to strzał w dziesiątkę by value zwracało id komentarza.

  1. echo '<input type="checkbox" name="jakas_nazwa[]" value="{$rezult['id']}" />';


Co robisz dalej? Wczytujesz w pętli wartości id, które zostały przesłane z formularza oraz w zależności od wyboru generujesz zapytanie:

  1.  
  2. foreach ($_POST['jakas_nazwa'] as $value) {
  3. if ($_POST['wyk_masowa_akcje'] == 'usun') $query = 'costam'; else if ($_POST['wyk_masowa_akcje'] == 'dodaj') $query = 'costam1';
  4. $query .= "WHERE id='";
  5. $query .= $value . "'";
  6. // wykonaj zapytanie
  7. }


To tak schematycznie i w uproszczeniu. Każdy obrót pętli to nowe zapytanie. A możesz też wygenerować jedno długie zapytanie, np z IN i wykonać je już po pętli.
modern-web
Wszystko ok, ale zapytanie może wykonać po prostu używając ... WHERE `id` = 'coś' OR `id` = 'coś' OR `id` = 'coś' ... także robienie kilku zapytań jest zbędne smile.gif
b4rt3kk
Cytat(modern-web @ 22.10.2012, 22:34:51 ) *
Wszystko ok, ale zapytanie może wykonać po prostu używając ... WHERE `id` = 'coś' AND `id` = 'coś' AND `id` = 'coś' ... także robienie kilku zapytań jest zbędne smile.gif


Że zacytuję sam siebie:

Cytat
To tak schematycznie i w uproszczeniu. Każdy obrót pętli to nowe zapytanie. A możesz też wygenerować jedno długie zapytanie, np z IN i wykonać je już po pętli.


Jeśli jest to UPDATE czy DELETE to tak, ale jeśli już INSERT to nie zrobi tego w ten sposób. Albo pojedynczo, albo się bawić w zapytanie w rodzaju INSERT INTO VALUES (val1,val1,val1...), (val2,val2,val2...).

Także to już kwestia wyboru i rodzaju zapytania. Przedstawiłem rozwiązanie najprostsze i nieco schematyczne, dla rozważenia dla autora.
Greg0
Można jeszcze użyć formuły
Kod
WHERE id IN (1,2,3,4)

Gdzie cyfry to ID komentarzy.
Dzięki czemu wystarczy zrobić implode tablicy po przecinku i wstawić string w nawiasy do jednego zapytania.
markonix
Cytat(modern-web @ 22.10.2012, 22:34:51 ) *
Wszystko ok, ale zapytanie może wykonać po prostu używając ... WHERE `id` = 'coś' AND `id` = 'coś' AND `id` = 'coś' ... także robienie kilku zapytań jest zbędne smile.gif

Jak już to OR wink.gif
modern-web
Faktycznie, mój błąd. Rozgarnięcie dziś sięga zenitu! smile.gif
Poprawiłem, a przykład podałem jako banał bo taki najłatwiej będzie mu pojąć.

Pozdrawiam.
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.