Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Jak działa checkbox? Problem...
Forum PHP.pl > Forum > Przedszkole
tr86
Mam pętle wypisującą wszystkich użytkowników z bazy w panelu administracyjnym i chciałbym, aby za pomocą zaznaczenia checkboxa i kliknięciu w button użytkownik został usunięty z bazy (tak jak to jest przy usuwaniu rekordów w phpmyadmin). Najlepiej by było, gdyby była możliwość zaznaczania i usuwania kilku rekordów jednoczeście. Jeśli przy danym użytkowniku checkbox jest zaznaczony to powinno się wykonać zapytanie np.:
DELETE FROM `uzytkownik` WHERE `uzytkownik`.`id` = 32;

Oto kod:
  1. while ($wynik = mysql_fetch_array($zapytanie, MYSQL_NUM))
  2. {
  3. echo ('<table border="1" width="90%" align="center">
  4. <tr bgcolor="#3399cc">
  5. <td style="width: 20px;">'.$lp++.'.</td>
  6. <td style="width: 150px;">'.$wynik[1].'</td>
  7. <td style="width: 70px;">'.$wynik[3].'</td>
  8. <td style="width: 100px;">'.$wynik[4].'</td>
  9. <td style="width: 60px;">
  10. <form action=""><input type="checkbox" name="usun" value="usun" /></center></td>
  11. </tr></table>
  12. ');
  13. }
  14. echo('<input type=submit value="Zapisz">
  15. </form>
  16. ');


Ktoś ma jakiś pomysł? Może lepiej użyć select? Z góry dziękuję za pomoc.
Zosiek
Checkbox i dla każdego checkbox wartość danego id. Wysyłasz do skryptu, który w pętli usuwa z bazy. (Wysłanie kilku checkboxów odczytujesz jak z tablicy).
Tu masz tego opis.
http://www.kurshtml.boo.pl/html/pole_wyboru,formularze.html (Dla zawwansoowanych)
tr86
Czyli z tego co rozumiem tak to powinno wyglądać?

  1. <input type="checkbox" name="usun" value="'.$wynik[0].'" />



gdzie: $wynik[0], to nr ID w bazie danego usera

hmm?
Zosiek
Tak ale zmień :

  1. <input type="checkbox" name="usun" value="'.$wynik[0].'" />


na

  1. <input type="checkbox" name="usun[]" value="'.$wynik[0].'" />


A odczytujesz w np. taki sposób:

  1. echo $_POST['usun'][1];

Zamiast jedynki oczywiście stawiasz zmienną pomocnicza, która jest równa ilości zaznaczonych checkboxów ( i to w pętli 0<=zmienna pomocnicza) i usuwanie userwów tongue.gif
tr86
Troche tego nie rozumiem...
Zrobiłem to tak, ale nie działa. Nie ma żadnych błędów, ale zapytanie DELETE nie wykonuje się.

  1. while ($wynik = mysql_fetch_array($zapytanie, MYSQL_NUM))
  2. {
  3. echo ('<table border="1" width="90%" align="center">
  4. <tr bgcolor="#3399cc">
  5. <td style="width: 20px;">'.$lp++.'.</td>
  6. <td style="width: 150px;">'.$wynik[1].'</td>
  7. <td style="width: 70px;">'.$wynik[3].'</td>
  8. <td style="width: 100px;">'.$wynik[4].'</td>
  9. <td style="width: 40px;"><center>
  10. <form action="admin.php?co=usun_uzytkownika" method=post>
  11. <input type="checkbox" name="usun[]" value="'.$wynik[0].'" /></center></td>
  12. </tr>
  13. ');
  14. echo('</table>');
  15. }
  16. echo('<input type=submit value="Zapisz"></form>');
  17. }
  18. }
  19.  
  20. if ($co == "usun_uzytkownika")
  21. {
  22. $connect = mysql_connect("mysql2.yoyo.pl","user","haslo")
  23. or die ("Nie można nawiązać połączenia.");
  24. or die ("Nie ma takiej bazy danych.");
  25.  
  26.  
  27. $delete_id=$_POST['usun'];
  28. $wynik = implode("', '", $delete_id);
  29. $query="DELETE * FROM uzytkownik WHERE id='$wynik'";
  30. mysql_query($query);
  31. }
Zosiek
spróbuj tak

  1. $delete_id=$_POST['usun']; // Zapisujesz wszystkie id w postaci tablicy
  2. $ilosc=count($delete_id); // zliczasz ilość id
  3. for($i=0; $i<$ilosc; $i++) // pętla aby usunąć tyle użytkowników ile było zaznaczonych
  4. {
  5. $query="DELETE * FROM uzytkownik WHERE id='".$delete_id[$i]."'"; // zapytanie, które usuwa użytkownika o danym id
  6. mysql_query($query); // wykonanie zapytania
  7. }


Pamiętaj o zamknięciu połączenia z bazą.

tr86
Bardzo mi pomogłeś mimo tego, że zapytanie nie działało, to wystarczyło usunąć * i jest już wszystko w porządku smile.gif
Dziękuje.
Zosiek
Cytat(tr86 @ 10.10.2009, 22:12:56 ) *
Bardzo mi pomogłeś mimo tego, że zapytanie nie działało, to wystarczyło usunąć * i jest już wszystko w porządku smile.gif
Dziękuje.


Jak ja mogłem nie zauważyć tego * Boże jaki błąd tongue.gif Ale zdarza się nawet najlepszym. Cała przyjemnosc po mojej stronie. Myślę, że temat do zamknięcia
sebekzosw
  1. <?php
  2. foreach($_POST["usun"] as $user) {
  3. mysql_query("DELETE FROM `uzytkownik` WHERE id='".mysql_real_escape_string($user)."'");
  4. }
  5. ?>



To jest chyba szybsze i krótsze rozwiązanie. Oczywiście, musi być tak jak mówi Zosiek:
  1. <input type="checkbox" name="usun[]" value="'.$wynik[0].'" />
santini
Witam mój problem jest podobny, wiec nie zakładam nowego tematu. Chodzi mi o to ze na stronie poprzez pętle for wypisuje sobie utwory, które są w bazie i utwory które sobie wybieram poprzez checkboxa chcę dodać do jednej płyty (wybór może być wielokrotny) niestety nie chce mi to zbytnio działać.


  1. <h2><center>Baza danych utworów</center></h2>
  2.  
  3. <?php
  4. $pl_idplyta = $_GET['idplyta'];
  5. $query = "SELECT * FROM utwor";
  6. $result = mysql_query($query) or die(mysql_error());
  7. $num_result = mysql_num_rows($result);
  8. echo "<p><center>Liczba utworów w bazie: $num_result</center></p>";
  9.  
  10. <table width = "70%" border = "1" cellpadding="2"
  11. cellspacing = "2" align = "center">
  12. <tr>
  13. <th>ID</th>
  14. <th>Wykonawca</th>
  15. <th>Tytuł</th>
  16. <th>Wersja</th>
  17. <th>Gatunek</th>
  18. <th>Czas trwania</th>
  19. <th>Dodaj do płyty</th>
  20. <tr>';
  21.  
  22. for ($i=0; $i < $num_result; $i++)
  23. {
  24. $row = mysql_fetch_array($result);
  25. $idutwor = $row["idutwor"];
  26. $wykonawca = $row["wykonawca"];
  27. $tytul_utworu = $row["tytul_utworu"];
  28. $wersja = $row["wersja"];
  29. $gatunek = $row["gatunek"];
  30. $czas_trwania = $row["czas_trwania"];
  31.  
  32.  
  33. echo '<tr>
  34. <td>'.$idutwor.'</td>
  35. <td>'.$wykonawca.'</td>
  36. <td>'.$tytul_utworu.'</td>
  37. <td>'.$wersja.'</td>
  38. <td>'.$gatunek.'</td>
  39. <td>'.$czas_trwania.'</td>
  40.  
  41.  
  42. <td><form method="post" action="index.php?op=plyta_widok&idplyta='.$pl_idplyta.'">
  43. <input type="checkbox" name="dodaj_ut[]" value="'.$idutwor[0].'"/>
  44.  
  45. </td>
  46. </tr>';
  47.  
  48. }
  49.  
  50.  
  51. echo '</table>
  52. <br>
  53. <center><input type="submit" name="submit2" value="Dodaj" /></center>
  54. </form>';
  55.  
  56.  
  57. echo '<br>';
  58.  
  59. if (isset($_POST['submit2']))
  60. {
  61. $ut_dodaj = $_POST['dodaj_ut'];
  62. $zlicz = count($ut_dodaj);
  63.  
  64. for ($j=0; $j < $zlicz; $j++)
  65. {
  66. $query = "INSERT INTO pozycja_plyty VALUES(NULL, '$idutwor[$j]', '$pl_idplyta')";
  67. $result = mysql_query($query);
  68. }
  69.  
  70.  
  71. }
  72. ?>
  73.  


Struktura tabeli pozycja_plyty:

  1. CREATE TABLE pozycja_plyty (
  2. idpozycja_plyty INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
  3. utwor_idutwor INTEGER UNSIGNED NOT NULL,
  4. plyta_idplyta INTEGER UNSIGNED NOT NULL,
  5. PRIMARY KEY(idpozycja_plyty),
  6. INDEX pozycja_plyty_FKIndex1(plyta_idplyta),
  7. INDEX pozycja_plyty_FKIndex2(utwor_idutwor),
  8. FOREIGN KEY(plyta_idplyta)
  9. REFERENCES plyta(idplyta)
  10. ON DELETE NO ACTION
  11. ON UPDATE NO ACTION,
  12. FOREIGN KEY(utwor_idutwor)
  13. REFERENCES utwor(idutwor)
  14. ON DELETE NO ACTION
  15. ON UPDATE NO ACTION
  16. );
  17.  
  18.  


EDIT:

Ok jakoś sobie poradziłem, źle wysyłałem formularz zamiast
  1. action="index.php?op=plyta_widok&idplyta='.$pl_idplyta.'"
miało być
  1. action="index.php?op=utw_dod_plyt&idplyta='.$pl_idplyta.'"

i tam parę innych jeszcze błędów znalazłem smile.gif zamiast
  1. <input type="checkbox" name="dodaj_ut[]" value="'.$idutwor[0].'"/>
miało być
  1. <input type="checkbox" name="dodaj_ut[]" value="'.$row[0].'"/>
oraz zamiast
  1. $query = "INSERT INTO pozycja_plyty VALUES(NULL, '$idutwor[$j]', '$pl_idplyta')";
to tak
  1. $query = "INSERT INTO pozycja_plyty VALUES(NULL, '$ut_dodaj[$j]', '$pl_idplyta')";


Jeżeli ktoś miałby jakieś propozycje zapraszam 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.