Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL] Tabela + usuwanie
Forum PHP.pl > Forum > PHP
interp124
Witam, szukałem na wielu stronach, na tej także ale nie mogę rozwiązać swojego problemu. ohno-smiley.gif

Daje wam sam wygląd tabeli
  1. <?php
  2. echo "<table>";
  3. echo "<form>";
  4. echo "<tr>";
  5. echo "<td>Nazwa przedmiotu</td>";
  6. /*echo "<td>Przycisk usuń</td>";*/
  7. echo "</tr>";
  8. /*pętla*/ {
  9. echo "<tr>";
  10. echo "<td>row['subject_name']</td>";
  11. /*echo "<td>checkbox</td>";*/
  12. echo "<tr>";
  13. }
  14. echo "</form>";
  15. echo "</table>";
  16. ?>


Chciałbym, aby po zaznaczeniu checkbox-ów i kliknięciu przycisku usuń, zostały usunięte wiersze odpowiadające włączonym checkboxom.

Klika danych z mojej bazy:
Nazwa tabeli: subjects
subject_id INT NOT NULL AUTO_INCREMENT
subject_name TEXT NOT NULL

wstydnis.gif

//Rozwiązane jakby ktoś potrzebował
  1. <?php
  2. require('connect.php');
  3. mysql_select_db("tempus", $connect);
  4. $br = "<br>";
  5. if($_POST['usun'] AND $_POST['check']) {
  6. $sql5 = 'DELETE FROM `subjects` WHERE subject_id in('.implode(',',$_POST['check']).')';
  7. mysql_query($sql5) or die('BŁĄD:'.mysql_error());
  8. }
  9. $wynik = mysql_query("SELECT * FROM `subjects`") or die('Błąd zapytania');
  10. $br = "<br>";
  11. if(mysql_num_rows($wynik) > 0) {
  12. echo "<form method=post>";
  13. echo "<table>";
  14. echo "<tr>";
  15. echo "</tr>";
  16. while($row = mysql_fetch_assoc($wynik)) {
  17. echo "<tr>";
  18. $nazwa_przedmiotu = $row['subject_name'];
  19. $identyfikator_przedmiotu = $row['subject_id'];
  20. echo "<td>$nazwa_przedmiotu</td>";
  21. echo "<td><input type='checkbox' name='check[]' value='$identyfikator_przedmiotu'></td>";
  22. echo "</tr>";
  23. }
  24. echo "<tr><td><input type='submit' name='usun' value='Usuń'></td></tr>";
  25. echo "</table>";
  26. echo "</form>";
  27. }
  28. ?>
Fifi209
Zapomniałeś napisać gdzie masz problem, jasnowidzami nie jesteśmy.
johny_s
no to dzialy pomyliles smile.gif
nospor
W petli generujesz swoje checkboxy. Jak value dla takiego checkboxa zapodajesz ID rekordu. Jako NAME checkbox nadajesz nazwę tablicową czyli nazwa[]

W ten sposób po zaznaczeniu checkboxów postem zostanie wysłana tablica zaznaczonych checkboxów pod indeksem nazwa
print_r($_POST['nazwa']);

Kasowanie jest banalnie proste:
$sql = 'delete from tabela where ID in ('.implode(',',$_POST['nazwa']).')';

Musisz oczywiście sprawdzać, czy cokolwiek zostało wybrane. Jak nic nie wybierzesz, to $_POST['nazwa'] nie istnieje.
O standardowych zabezpieczeniach przed sqlinjection już nie będę pisał.
nospor
A teraz zastosuj się do podanych wszystkich tu wkazówek
Temat: Jak poprawnie zada pytanie
nospor
Bardziej chodziło mi o ten fragment
if($_POST['check']) {
$sql5 = 'DELETE FROM `subjects` WHERE subjects_id in('.implode(',',$_POST['check']).')';
mysql_query($sql5);
}
Masz sprawdzic co idzie postem i czy nie masz błędu zapytania. O błędach zapytania w linku też było napisane
nospor
var_dump($_POST['check']);
print_r($_POST['check']);
echo $_POST['check'];

Nadgorliwość gorsza od faszyzmu.... w linku było magiczne słowo LUB.
var_dump wystarczy.
Ale po wysłaniu formularza tak masz? Masz to zrobić po wysłaniu formularza. Przed wysłaniem to raczeh logiczne ze w post nie masz danych
nospor
Po wysłaniu to raczej nie możliwe. Chyba ze masz forma w formie... masz?
Zrób po wysłaniu var_dump($_POST); na początku skryptu i napisz co wyświetla

Cytat
I tak, aby usunąć jakiś wpis muszę 2x wysłać formularz
Wybacz, bredzisz....
poprostu najpierw usuwaj, a potem wyświetlaj.
To chyba logiczne, ze skoro najpierw wyświetlasz, potem usuwasz, to po wyświetleniu masz listę nieaktualną, skoro najpierw wyswietlasz a potem usuwasz. Lista sie sama w magiczny sposób nie zaktualizuje po skasowaniu, skoro już ją wcześniej pobrałeś bez usuwania.
phpion
Cytat(nospor @ 30.09.2011, 10:16:10 ) *
poprostu najpierw usuwaj, a potem wyświetlaj.

Ty najpierw wyświetlasz, a potem usuwasz.
nospor
Ty nawet nie przeczytałeś co ci napisałem :/


Robisz tak:
wyswietlasz
usuwasz
dziwisz się, że po usunięciu wyswietlają się razem z usuniętymi

Masz robić tak:
usuwac
wyswietlac
i sie nie dziwic
nospor
.....

Ten kod:
if($_POST['usun'] AND $_POST['check']) {
$sql5 = 'DELETE FROM `subjects` WHERE subject_id in('.implode(',',$_POST['check']).')';
mysql_query($sql5) or die('BŁĄD:'.mysql_error());
}
Masz teraz za wyświetlaniem

Masz go przenieść nad wyświetlanie. Czy to takie trudne?
phpion
Przenieś kod usuwający nad kod wyświetlający - ot cała filozofia.
nospor
$wynik = mysql_query("SELECT * FROM `subjects`") or die('Błąd zapytania');
To nadal jest przed usuwaniem!!
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.