Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php/Sql] zaznaczanie rekordow checkboxami
Forum PHP.pl > Forum > Przedszkole
fredman
chodzi mi o cos takiego jak jest naprzyklad na poczcie ze zaznaczamy checkboxa i potem na dole mamy guzik usun i sie kasuje. Chce cos takiego wykozystac do kasowania wpisow w bazie dancyh. Mama juz strone ktroa pobiera dane z bazy i wyswietla mi rekordy. Teraz chial bym dodac walsnie te czekboksy i ten guzik no i jakas funkcja usuwania rzecz jasna. php jest w iekszosci dla mnie raczje zagadka i tak w cimno cos działąm opierajac sie na innych rzeczach wiec nie bardzo wiem jak to zrobic ale domyslem sie ze to chyba jest dosc standardowa opcja z z tymi czekboksami i guzikiem ktory cos tam robi z nimi. moze jest jakies mniej wiecej gotowe rozwiazanie, jakis tutorial czu cos takiego?
kossa
w formularzu checkbox'y tworzysz tak:
  1. <input type='checkbox" name='box[]' value='id_do_skasowania'>

itd.

potem za pomocą php
  1. <?php
  2. $boxy=$_POST["box"];
  3. for ($i=0;$i<=count($boxy);$i++)
  4. {
  5.  
  6. //wyciagasz kolejne zaznaczone id i robisz z nimi co chcesz
  7.  
  8. $id=$boxy[$i];
  9. mysql_query("delete from tabela where id=$id");
  10. }
  11. ?>

to tak na szybko z reki - moga byc literowki itp.

Łukasz
fredman
a jak jeszcze ten guzik zrobic?
BORG
  1. <form action="..." method="POST">
  2. <input type='checkbox" name='box[]' value='id_do_skasowania'>
  3. <input type="submit" value="akceptuj">
  4. </form>


Tak sie dodaje przycisk jesli o to ci chodzi winksmiley.jpg
fredman
Dzieki wam! wszytko smiga jak trzeba ladnie sie kasuje! smile.gif tylko jedno jaeszcze kosmetyczne pytanie: Jak zrobic zeby po nacisniciu tego kuzika "akceptuj" strona sie od razu odswiezala tak zeby bylo widac rezultat wprowadzonych zmian bez koniecznosci ręcznego odświezania?
spectron
Witam wszystkich.

Mam taki sam problem. Skrypt z checkboxami mam, wszystko ladnie usuwa tak jak chce, ale... zeby doszlo do usuniecia rekordow musze dwa razy kliknac w przycisk. Jak sprawdzalem zawartosc tablicy $_POST to po pierwszym kliknieci juz sa wpisanie w niej nazwy checkboxow, wiec dlaczego dobpiero po drugim kliknieciu wykonuje sie skrypt?
nospor
Cytat
wiec dlaczego dobpiero po drugim kliknieciu wykonuje sie skrypt?
pewnie dlatego, ze dzis jest zachmurzone niebo .... smile.gif
podaj kod to pogadamy, byc moze tam jest problem
BORG
Kod
<script>
location.reload();
</script>

To jest skrypt na odswiezanie.
spectron
nospor kod jest taki jak powyzej... sprawdzalem tez inne skryptyi bylo to samo, dopiero przy drugim klikniecu wykonuje sie to co jest w petli, czyli usuwanie wybranych rekordow z bazy. ale tego z javascript nie probowalem winksmiley.jpg
nospor
a moze ty dopiero efekt widzisz po drugim kliknieciu bo to jest refresh strony. po pierwszym kliknieciu luknij do bazki i zobacz czy ci skasowalo
spectron
tego akurat nie robilem winksmiley.jpg






rzeczywiscie, z bazy wszytko mi usuwa winksmiley.jpg dzieki za pomoc smile.gif

jesli chodzi o ten skrypt do odswierzania to nie dziala, tzn dziala ale nie tek jakbym chacial winksmiley.jpg gdy go umieszczam na stronie to ciagle odswierza, a ze uzywam POST to ciagle wyskakuje komunikat " nie mozna odswierzyc strony bez ponownego wyslanie informacji..." tongue.gif
=kokos=
Jeśli chodzi o odświeżenie stronki skorzystaj z
header
ob_start
ob_end_flush
A w razie kłopotów zajrzyj do działu Najczęstsze błędy.
aniol
Cytat(kossa @ 4.01.2007, 23:01:41 ) *
w formularzu checkbox'y tworzysz tak:
  1. <input type='checkbox" name='box[]' value='id_do_skasowania'>

itd.


Przykład dla mnie jak znalazł, akurat bardzo mi się przydał ale mam jeszcze troche
problemów ze składnią i proszę o wyjaśnienie jak to dział name='box[]' Właściwie co ta zmienna zawiera ?

Ja wyświetlam rekordy w taki sposób, że wmieszłem troche html'a w php i teraz
nie wiem jak wpisać to name='box[]' żeby mi błędy nie wyskakiwały.
Chdzi mi o te backslashe bo jakoś utknąłem z tą składną.

Oto mój przykład:
<?
.....
print "<td><input type=\"checkbox\" name=XXXXXX " value=".$pole['id']."></td>.........
?>

Pominąłem nieistone fragmenty kodu.
TAMLYN
Jeżeli $box[] jest pusta to numerowanie w kolejnej linii uzupełnia się rosnąco tongue.gif

Czyli tak jakbyś wpisał:
Kod
name=$box[0]
name=$box[1]
name=$box[2]
name=$box[3]

itd.

Co do tego kodu...

Kod
<?php
print "<td><input type=\"checkbox\" name=\"XXXXXX\"  value=\"$pole['id']\"></td>";
?>


Ew.
Piszesz normalnie w HTML'u tyle, że tam, gdzie masz zmienna robisz coś takiego ;P

Kod
<td><input type="checkbox" name="XXXXXX"  value="<?=$pole['id']?>"></td>


Też powinno zadziałać winksmiley.jpg
fredman
@spectron, czy znalazłeś sposów ba to odświezanie? bo wlasnie za pierwszym klikim wykonuje sie usuniecie ale strona sie nie odświeża do piero drugi klikniecie to robi... wiesz juz jak to zrobic zeby od razu sie odswiezala strona? bo ja dalej nie ma rozwiązania...
Cienki1980
Może po prostu masz w kodzie najpierw wyświetlanie wierszy, a dopiero potem kod od usuwania zaznaczonych wierszy z bazy questionmark.gif

W takim przypadku tak właśnie będzie się dziać.
fredman
kurcze, o tym zupelnie bym nie pomyslal. Przestawilm kolejnosc i teraz działa jak trzeba. DZIEKI!
erafaelmi
Nie wiem czy ktoś spotkał się z takim błędem Notice: Undefined offset: 2 ... line 14

Dotyczy lini $id=$boxy[$i]; Prawidłowo usuwa rekordy tylko może należy gdzieś wyłączyć ten błąd.
Działa to na PHP 5.

  1. <?php
  2. $boxy=$_POST["box"];
  3. for ($i=0;$i<=count($boxy);$i++)
  4. {
  5.  
  6. $id=$boxy[$i];
  7. echo $boxy[$i];
  8. mysql_query("delete from photo where id_photo = '$id'");
  9. }
  10. ?>
nospor
nie: $i<=
a: $i<
matematyka sie klania tongue.gif
qntakt
Hmm... na swojej stronie internetowej, próbowałam zastosować wyżej wymienione usuwanie rekordów checkboxami. Jednak coś mi nie działa więc proszę o pomoc. Wszystko działa, oprócz wspomnianego kasowania danych. Domyślam się, robię gdzieś głupi błąd, ale nie mogę go znaleźć... blink.gif

  1. <h2>Aktualności<hr /></h2>
  2.  
  3. <?php $query='SELECT * FROM aktualnosci ORDER BY data_dodania DESC LIMIT 10';
  4.  $result = mysql_query ($query);
  5.  
  6.  while ($row = mysql_fetch_array($result)) 
  7.  {
  8. echo('<table width="410px"; border="0">') ;
  9.  
  10. echo('<tr><td VALIGN="TOP"><b>'.$row['tytul'].'</b></td>
  11. <td align="right">'.'<i>dodano: </i>'.date("d.m.Y",$row['data_dodania'])
  12. .'<br>'.date("H:i",$row['data_dodania']).'</td></tr>');
  13.  
  14.  
  15. echo('<tr>
  16. <td colspan="2" style="text-align:justify;">'.$row['tresc'].'</td></tr>');
  17.  
  18.  
  19.  
  20. <TD><A HREF="index.php?pokaz=aktualnosci_usun"> Usuń wpis</a></td>
  21.  
  22.  
  23. <td ALIGN="RIGHT"><b>'.$row['autor'].'</b> '.$row['id'].'
  24. <form action="..." method="POST"><input type="checkbox" name="box[]" value="id_do_skasowania">
  25. <input type="submit" value="akceptuj">
  26. </form></td></tr>');
  27.  
  28.  
  29. echo('</table><hr />');
  30.  
  31.  
  32.  
  33. $boxy=$_POST["box"];
  34. for ($i=0;$i<=count($boxy);$i++)
  35. {
  36. $id=$boxy[$i];
  37. mysql_query("delete from aktualnosci where id=$id");
  38. }
  39.  
  40.  
  41. }
  42.  
  43.  
  44. ?>
  45.  
  46. <br>
  47. [ <A HREF="index.php?pokaz=aktualnosci_dodaj"> Dodaj nowy wpis</a> ]
  48.  
  49.  
  50. </TD></TR>



Z góry dziękuję za pomoc. smile.gif
kossa
sprawdź czy do zmienncyh $_POST["box"] dochodzą prawidłowe dane bo w Twoim kodzie zamist wartości id jest tekst id_do_skasowania, może to jest przyczyną

kolejna rzecz to czy w ogóle to wykonujesz.. o tak sobie na końcu skryptu wkleiłeś ten kod

Łukasz
qntakt
eee.. to w którym miejscu powinien być ten kod?
kossa
Cytat
eee.. to w którym miejscu powinien być ten kod?



<input type="checkbox" name="box[]" value="id_do_skasowania"> tu powinno być id do skasowania a nie ten tekst id_do_skasowania

popraw swoją pętlę bo tylko bezmyślnie skopiowałeś kod, nic nie wysilając się, tak się nic nie nauczysz a jak chcesz gotowca to nie ten dział na forum

Łukasz
qntakt
Cytat(kossa @ 5.08.2007, 22:44:58 ) *
<input type="checkbox" name="box[]" value="id_do_skasowania"> tu powinno być id do skasowania a nie ten tekst id_do_skasowania

popraw swoją pętlę bo tylko bezmyślnie skopiowałeś kod, nic nie wysilając się, tak się nic nie nauczysz a jak chcesz gotowca to nie ten dział na forum

Łukasz



Przepraszam Łukasz, nie umiem poradzić sobie z usuwaniem rekordów, dlatego też pisze na forum. Jeżeli masz zamiar naśmiewać się z ludzi "to nie ten dział na forum". Uczę się dopiero języka php. Mam prawo do błędów i przeoczeń. Jeżeli nie chcesz mi pomóc, tylko oceniać, to dzięki za taką pomoc. Naprawdę!
kossa
To nie tak.

Nie ten dział - jeśli chcesz gotowca - przeczytaj uważnie albo cytuj poprawnie.

Jeśli chcesz się nauczyć to byś chociaż przeczytał i dokonał dogłebnej analizy kodu któy skopiowałeś z forum a gdzie masz błąd pokazałem Tobie w pierwszej odpowiedzi na Twoje pytania.

Teraz skoro nie chcesz gotowca a jednak chcesz się nauczyć to mogę Tobie dodać że ten fragment kodu gdzie odbierasz dane $_POST["box"] wywołuj dop. po przesłaniu formularza - zdefiniuj sobie dodatkową akcję.

Życzę powodzenia.
Łukasz
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.