Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][HTML][MYSQL]usuwanie rekordów z bazy danych przez ID Checkboxa
Forum PHP.pl > Forum > Przedszkole
bielos
plik pdanefirma.php (przeglądaj dane firmy)
  1. <?php
  2. $baza = mysql_connect ('localhost', 'użytkownik', 'halso') or die("Połączenie z bazą nie powiodło się.\");
  3. mysql_select_db("abadresy") or die ("Nie ma bazy danych");
  4.  
  5.  $result = mysql_query("SELECT * FROM firma");
  6.  while ($row = mysql_fetch_array($result, MYSQL_NUM)) 
  7.  {
  8. printf ("  
  9. $row[1]
  10. $row[2]
  11. $row[3]
  12. $row[4]
  13. "); 
  14. }
  15. mysql_close ($baza);
  16. ?>


I teraz chcę aby po kliknięciu na przyckisk "usuń zaznaczone" do pliku usunfirme.php zostały przekazane ID wszystkich zaznaczonych checkboxów a następnie skasowane z bazy wszystkie wpisy do których przypożądkowany był dany checkbox.

Jak to zrobić??
Piniek
Proszę o poprawę BBCODE.
sniezny_wilk
1. Musisz mieć checkboxy wrzucone w formularz, wybierając mehod na POST najlepiej,
2. Nazwa checkboxa musi być zakończona [] czyli np name="cos[]", oraz zawierać wartość czyli np value="2" (tu wstawisz swoje ID)
3. Dane odczytujesz w pętli ze zmiennej $_POST, czyli np $_POST['cos'] - będzie tablicą zawierające dane z checboxów.
4. Dodać obsługę usuwania w MySQL
5. Gotowe smile.gif

To najłatwiejsze kroki, z konstrukcją skryptu powinieneś sobie poradzić, bo zagadnienia do niego są dobrze opisane na necie.
bielos
Ale moim ID z bazy jest $row[0].
Więc mam za pomocą $_POST zaciągnąć $row[0]questionmark.gif
JoShiMa
Te dane $row[0] zbierasz do jakiejś tablicy podczas przeczesywania rekordów, powiedzmy do tablicy $ID[]. Potem wrzucasz je do dajesz do checkboxa w następujący sposób:

  1. <?php
  2. echo '<input type="checkbox" name="ID[0]" value="'.$ID[0].'" />';
  3. echo '<input type="checkbox" name="ID[1]" value="'.$ID[1].'" />';
  4. echo '<input type="checkbox" name="ID[2]" value="'.$ID[2].'" />';
  5. ?>


Najlepiej w pętli tyle razy ile potrzeba

Metodą post przekazujesz z formularza zmienną $_POST['ID'], która jest tablicą i do jej elementów dobierasz się w następujący sposób:
$_POST['ID'][0], $_POST['ID'][1] itd... Oczywiście metodą post powinny być przekazane tylko te klucze, które zaznaczysz w checkboxach. czyli jeśli odhaczysz tylko tam gdzie jest $ID[2], to będziesz maiał tylko $_POST['ID'][2] a $_POST['ID'][0], $_POST['ID'][1] i pozostałe nie będą istniały. Nie wiem, czy się jasno wyrażam. Dlatego, żeby sprawdzić jakie ID były zaznaczone w formularzu, trzeba przelecieć po kluczach tablicy $_POST['ID'][] i zobaczyć które klucze istnieją lub które nie są NULLami.
bielos
Wykonywana jest pętla while:

[php]
  1. while ($row = mysql_fetch_array($result, MYSQL_NUM))
  2. {
  3. $idfirma = array("$row[0]");
  4. printf ("
  5. <div>
  6. <tr>
  7. <td>$row[1]</td>
  8. <td>$row[2]</td>
  9. <td>$row[3]</td>
  10. <td>$row[4]</td>
  11. </div>
  12. <br>
  13. ");
  14. }
  15. ?>[/php]

Petla będzie wykonywana X razy (zaleźy ile mam już wpisów w bazie.)
Robi mi to tabelkę (tabelkę HTML-ową, taką jak w EXELU) mającą X kolumn i 4 wiersze. (odpowiednio $row[1]-[4] odpowiadają za inne wpisy w bazie np. row[1] to Imię) i wyświtla ją (tą exelową tabelkę) na ekran.
Zostało mi $row[0] które odpowiada za ID wpisu w bazie.
Robię tabęlę (tabela PHP) tylko dla ID z bazy (nie wiem czy dobrze zdefiniowaną)
Teraz chcę zrobić pętlę która tak samo jak ta pętla while dodaje do utworzonej tabeli (tej exelowej) dodatkowy wiersz "zaznacz" i X checkboxów zaleźnie ile mam wpisów w bazie.
I teraz nie wiem jak ma wyglądać pętla robiąca mi X checkboxów a każdy checkbox ma mieć inne "value" (pobrane z tablicy $idfirma)

Oczywiście wszystko jest wzięte w <table> i <form action="usunfirme.php" method="post">

Później muszę w pliku usunfirme.php zrobić pętle która odczyta mi value checkboxów (czyli ID wpisów z bazy które chcę usunąć)
I usunie z bazy te wpisy.
JoShiMa
Hmmm.... Nie wiem, czy dobrze zrozumiałam. Jak już w while utworzysz tabelkę z numerami ID niech ona się nazywa $idfirma

i pętla jest banalna:

  1. <?php
  2. $ilosc_ID = count($idfirma);
  3. $wiersz = '';
  4. for($i=0;$i<$ilosc_ID;$i++){
  5. $wiersz .= '<td><input type="checkbox" name="ID['.$i.']" value="'.$idfirma[$i].'" /></td>'; 
  6. }
  7. if($wiersz){
  8. $wiersz = "<tr>$wiersz</tr>";
  9. }
  10. ?>


Efektem jest wiersz z tyloma komórkami ile firm się wczytało a w każdej komórce checkbox. O to chodziło? Wiersz możesz dołożyć do poprzednich i wyświetlić wewnątrz tagów <table></table>
bielos
Dlaczego jak chcę teraz pętlą wyświetlić moją tablicę "firmaid" wyświetla mi tylko napis "Array"??
(tak poprostu chciałem sobie wyświetlić zawatość tablicy)

  1. $ilosc_ID = count($idfirma);
  2. $wiersz = ' ';
  3. for($i=0;$i<$ilosc_ID;$i++)
  4. {
  5. echo "$idfirma[$i]";
  6. $wiersz .= '<td><input type="checkbox" name="ID['.$i.']" value="'.$idfirma[$i].'" /></td>';
  7. }
  8. if($wiersz)
  9. {
  10. $wiersz = "<tr>$wiersz</tr>\";
  11. }
  12. ?>




A jak zamieniłem na

  1. <?php
  2. echo ".$idfirma[$i].";
  3. ?>

To wyświetliło mi tylko jedno ID chociaż mam więcej wpisów w bazie.
JoShiMa
Widocznie źle skonstruowałeś tę tablisę i jest to tablica wielowymiarowa, czyli jej i-ty element jest tablicą. Wyświetl to sobie za pomoca funkcji var_dump. Zobaczysz strukturę zmiennej.
bielos
wyświetla mi tylko:
Cytat
string(2) "11"
(11 to ID jednego z wpisów do bazy)

ewentualnie:
Cytat
string(5) "Array"


jak używam:
  1. <?php
  2. print_r("$idfirma[$i]");
  3. ?>


Wynikiem też jest 11

Nie wiem dlaczego zawsze wyśiwtla mi 11 chociaż wcześniejszy wpis do bazy ma ID 9
JoShiMa
Ja też nie wiem i nie dowiem się póki nie pokażesz kawałka kodu, w którym konstruujesz tę tabelę. snitch.gif
bielos
  1. <form action="usunfirme.php" method="post">
  2. <?
  3.  
  4. $baza = mysql_connect ('localhost', '', ') or die ("Połączenie z bazą nie powiodło się.");
  5. mysql_select_db("abadresy") or die ("Nie ma bazy danych");
  6. $result = mysql_query("SELECT * FROM firma");
  7. while ($row = mysql_fetch_array($result, MYSQL_NUM))
  8. {
  9. $idfirma = array("$row[0]"); //tu robię tabelę $idfirma
  10. printf ("
  11. <div>
  12. <tr>
  13. <td>$row[1]</td>
  14. <td>$row[2]</td>
  15. <td>$row[3]</td>
  16. <td>$row[4]</td>
  17.  
  18.  
  19.  
  20. ");
  21. }
  22.  
  23. $ilosc_ID = count($idfirma);
  24. $wiersz = '';
  25. for($i=0;$i<$ilosc_ID;$i++)
  26. {
  27. $wiersz .= '<td><input type="checkbox" name="ID['.$i.']" value="'.$idfirma[$i].'" /></td>';
  28. }
  29. if($wiersz)
  30. {
  31. $wiersz = "<tr>$wiersz</tr>";
  32. }
  33. mysql_close ($baza);
  34. ?>
  35. </table>
  36. <input type=submit value="usuń zaznaczone" />
  37. </form>
  38. </div>
  39. </div>
JoShiMa
No to za każdym przebiegiem pętli konstruujesz tabelę odnowa zamazując poprzednią wartość. Dlatego masz tylko jedną
Zamiast tego:
  1. <?php
  2. $idfirma = array("$row[0]"); //tu robię tabelę $idfirma
  3. ?>


Zrób tak:

  1. <?php
  2. $idfirma[] = $row[0];
  3. ?>

W ten sposób za każdym przebiegiem petli dodasz do tabeli kolejne pole i po skończonej pętli będziesz miał w niej to co trzeba.
bielos
Może to głupie,ale nie wyświetla mi się checkbox (wiadomo,nie ma printf ani echo).
jak do:
  1. $wiersz .= '<td><input type="checkbox" name="ID['.$i.']" value="'.$idfirma[$i].'" /></td>';

dodam printf lub echo to mi wyskakuje błąd.

  1. <?php $ilosc_ID = count($idfirma);
  2. $wiersz = '';
  3. for($i=0;$i<$ilosc_ID;$i++){
  4. $wiersz .= '<td><input type="checkbox" name="ID['.$i.']" value="'.$idfirma[$i].'" /></td>';
  5. }
  6. if($wiersz){
  7. $wiersz = "<tr>$wiersz</tr>";
  8. }
  9. ?>


O dodaniu do:
  1. <?php
  2. while ($row = mysql_fetch_array($result, MYSQL_NUM)) 
  3. {
  4.  
  5. $idfirma[] = $row[0];
  6.  
  7. printf (&#092;"
  8.  
  9.  
  10. $row[1]
  11. $row[2]
  12. $row[3]
  13. $row[4]
  14.  
  15.  
  16.  
  17. &#092;");
  18. }
  19. ?>

nie ma mowy,bo to bez sensu...
Jak to rozwiązać??
JoShiMa
  1. <?php
  2. if($wiersz){
  3. $wiersz = "<tr>$wiersz</tr>";
  4. echo $wiersz;
  5. }
  6. ?>


To naprawdę nie takie trudne. Wystarczy zrozumieć jak to działa.
bielos
Thx za pomoc.

Jedynym problemem jaki teraz mam:


jest to,że chcę mieć chceckboxy w "zaznacz".
Nie wiem dlaczego się tak rozsypały.

Jeszcze raz kod wrzucę:
  1. while ($row = mysql_fetch_array($result, MYSQL_NUM))
  2. {
  3.  
  4. $idfirma[] = $row[0];
  5.  
  6. printf ("
  7. <div>
  8. <tr>
  9. <td>$row[1]</td>
  10. <td>$row[2]</td>
  11. <td>$row[3]</td>
  12. <td>$row[4]</td>
  13.  
  14.  
  15.  
  16. ");
  17. }
  18.  
  19. $ilosc_ID = count($idfirma);
  20. $wiersz = '';
  21. for($i=0;$i<$ilosc_ID;$i++)
  22. {
  23. $wiersz .= '<td><input type="checkbox" name="ID['.$i.']" value="'.$idfirma[$i].'" /></td>';
  24. }
  25. if($wiersz)
  26. {
  27. $wiersz = "<tr>$wiersz</tr>";
  28. echo $wiersz;
  29. echo "<br>";
  30.  
  31. }
  32. mysql_close ($baza);
  33. ?>
JoShiMa
A mówiłeś, że w ostatnim wierszu... Kurcze Ty naprawdę tego nie kumasz?

  1. <?php
  2. while ($row = mysql_fetch_array($result, MYSQL_NUM))
  3. {
  4.  
  5.  
  6. printf ("
  7. <div>
  8. <tr>
  9. <td>$row[1]</td>
  10. <td>$row[2]</td>
  11. <td>$row[3]</td>
  12. <td>$row[4]</td>
  13. <td><input type="checkbox" name="ID['.$i.']" value="'.$row[0].'" /></td>
  14. </tr>
  15.  
  16. ");
  17. }
  18. ?>


I cała reszta kodu, który skopiowałeś leci do kosza.
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.