Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL] Tabela + usuwanie, Proszę o pomoc
interp124
post 29.09.2011, 22:05:44
Post #1





Grupa: Zarejestrowani
Postów: 11
Pomógł: 0
Dołączył: 29.09.2011

Ostrzeżenie: (10%)
X----


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


Ten post edytował interp124 30.09.2011, 10:30:04
Go to the top of the page
+Quote Post
Fifi209
post 29.09.2011, 22:56:22
Post #2





Grupa: Zarejestrowani
Postów: 4 655
Pomógł: 556
Dołączył: 17.03.2009
Skąd: Katowice

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


Zapomniałeś napisać gdzie masz problem, jasnowidzami nie jesteśmy.


--------------------
Zainteresowania: C#, PHP, JS, SQL, AJAX, XML, C dla AVR
Chętnie pomogę, lecz zanim napiszesz: Wujek Google , Manual PHP
Go to the top of the page
+Quote Post
johny_s
post 30.09.2011, 00:55:54
Post #3





Grupa: Zarejestrowani
Postów: 594
Pomógł: 122
Dołączył: 17.07.2005
Skąd: P-na

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


no to dzialy pomyliles smile.gif
Go to the top of the page
+Quote Post
nospor
post 30.09.2011, 06:47:25
Post #4





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




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
nospor
post 30.09.2011, 07:59:18
Post #5





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




A teraz zastosuj się do podanych wszystkich tu wkazówek
Temat: Jak poprawnie zada pytanie


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
nospor
post 30.09.2011, 08:50:02
Post #6





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




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
nospor
post 30.09.2011, 09:00:43
Post #7





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




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
nospor
post 30.09.2011, 09:16:10
Post #8





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




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.


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
phpion
post 30.09.2011, 10:18:27
Post #9





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Cytat(nospor @ 30.09.2011, 10:16:10 ) *
poprostu najpierw usuwaj, a potem wyświetlaj.

Ty najpierw wyświetlasz, a potem usuwasz.
Go to the top of the page
+Quote Post
nospor
post 30.09.2011, 10:18:42
Post #10





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




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
nospor
post 30.09.2011, 10:21:07
Post #11





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




.....

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?


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
phpion
post 30.09.2011, 10:21:15
Post #12





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




Przenieś kod usuwający nad kod wyświetlający - ot cała filozofia.
Go to the top of the page
+Quote Post
nospor
post 30.09.2011, 10:25:05
Post #13





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




$wynik = mysql_query("SELECT * FROM `subjects`") or die('Błąd zapytania');
To nadal jest przed usuwaniem!!


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 12:30