Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][HTML][JavaScript]Kasowanie kilku wiadomości ? ( checkboxy) jak ?
Forum PHP.pl > Forum > Przedszkole
seba22
Witam,

Mam bardzo poważny problem,

Mam sobie takie wpisy

Wpis aaaaaa
Wpis bbbbbb
Wpis cccccccc
Wpis eeeeee


Chciał bym koło nich zrobić checkboxy

Żeby wyglądało mniej więcej tak:


Wpis aaaaaa [ ]
Wpis bbbbbb [x]
Wpis cccccccc [ ]
Wpis eeeeee [x]



No i teraz, chce żeby system przyjął komendę skasowania ich wszystkich...

Nie mam pojęcia jak się za to zabrać, jak można skasować kilka na raz ?

Jak to zrobić, są na to jakieś javascriptowe metody typu że zaznaczone wartości wpisze mi do jednej, oddzielajac np przecinkiem -> name kasuj value = 2,4

A ja dam potem explode, sprawdzę resztę parametrów, i je wywalę...

Czy jakoś inaczej się to robi...


-> Chodzi mi o wyjaśnienie na razie sposobu, bo narazie nie wiem w czym kombinować, czy w lewo czy w prawo...
piotrooo89
w google jest tego mnóstwo!

ja bym przekazał do value checbox'a id z bazy i później to do jakiejś tablicy zapisał i internował po tablicy wraz z usuwaniem.
seba22
Reasumując, generuje przez PHP checkboxy, i nadaje im nazwy: kasuj[zmienna] ( zmienna, liczby od 1 do 10 )

No i potem, w skrypcie php robię pętle, while i odbieram przez powiedzmy isset kasuj[zmienna] jezeli zmienna istnieje, to przypisuje sobie do tablicy, wartosc $kasuj[1]= $POST_ bla bla i wartosc z value checkboxa, ktory zawiera dany ID materiału do skasowania ?


Dobrze to podsumowałem ?

Jeżeli tak, to biorę się za wykonanie ?
piotrooo89
no ja bym zrobił coś w ten deseń... name dałbym tak jak mówisz: kasuj + jakaś liczba, natomiast do value dałbym ID z bazy. i później zapisuje to wszystko do tablicy jako wartości. i iteruje po tablicy z tymi ID i wywalam po kolei to jest moja wizja. smile.gif
seba22
Podoba mi się, i już wykonuje.

Napotkałem na problem.

Wygenerowałem tabelę
======================
=---------==-----=--------=[ ]=
=---------==-----=--------=[ ]=
=---------==-----=--------=[ ]=
======================

[ ] -> to checboxy
= -> obramowania tabeli
-- -> tresc tabeli ( tekst)

Moje pytanie, brzmi, w jaki sposób, zrobić z kolumny 3 ciej formularz...
?

Mam całą tabelę włożyć w <form > < tabela > </tabela> </form>


Wiem, to głupie pytanie, ale sami widzicie, mam więcej problemów z HTML niż z właściwym kodzeniem :/
piotrooo89
ja bym to w formularz wrzucił albo bawił się w js z eventem-onclick.
bim2
Patrzcie na takie rozwiązanie smile.gif

<input type="checkbox" value="1" name="delete[]" />
<input type="checkbox" value="2" name="delete[]" />
<input type="checkbox" value="3" name="delete[]" />

value to id wiadomości. smile.gif

Na dole skryptu robimy zwykły submit i w php:
  1. <?php
  2. foreach($_POST['delete'] AS $v)
  3. {
  4. mysql_query('DELETE FROM messages WHERE id = '.$v);
  5. }
  6. ?>


smile.gif

Co do problemu z html, to juz na osobny temat i dział. smile.gif
seba22
Mam takie coś:

  1. <?php
  2. for ($i=1; $i<11; $i++)
  3. {
  4.  
  5. if (zabezpiecz($_POST["kasuj".$i])!="")
  6. {
  7. echo("id do skasowania");
  8. echo(zabezpiecz($_POST["kasuj".$i]));
  9. }
  10. }
  11. ?>


Listuje mi poprawnie:

( output )
  1. <?php
  2. id do skasowania45id do skasowania39id do skasowania17
  3. ?>



Zastanawiam się, co zrobić, bo pętla jest do 10 elementów... a ja bym chciał żeby była do tylu elementów, ile facet prześle...

Co proponujecie ?

Wpisać tam pętle while do np 99999999999 i dodać ISSET[numerbierzacy], i jezeli sie okzę że kolejny element badany, nie istnieje !, to wychodzimy z pętli ?
bim2
Podałem Ci moj pomysł, który nie ogranicza się do konkretnej liczby wiadomości :]
piotrooo89
zlicz ile masz el w tablicy: count

//EDIT
pomysł który podał ~bim2 jest chyba wydajniejszy winksmiley.jpg

//EDIT2
~seba22 echo to nie funkcja nie musisz dawać w nawiasy...
bim2
Zrób tak jak ja mówię.
Zamiast name="kasuj1" name="kasuj2"
daj name="kasuj[]" wszędzie. I później w skrypcie:
  1. <?php
  2. foreach($_POST['kasuj'] as $v)
  3. {
  4.  
  5. if (zabezpiecz($v)!="")
  6. {
  7. echo("id do skasowania");
  8. echo(zabezpiecz($v));
  9. }
  10. }
  11. ?>
seba22
Teraz rozumiem twoją idee, przedtem jej nie kumałem bo forech to było go tablicy.

Zrozumiałem dopiero gdy zobaczyłem że w formularzu name ma mieć kasuj[id], teraz faktycznie, ma to prawo być brane, jako tablica.



Jesteś, wielki smile.gif

Zaimplementowane, i działa przepięknie ! smile.gif

Masz ode mnie wielki uścisk smile.gif

-----------

-----------

-----------

Mam jeszcze jedno pytanie, jak sprawdzić czy ktoś nie wysłał pustej wartości ?

Tzn kliknął submita nie zaznaczając niczego ?

Wystarczy że dam isseta dla elementu nr [1] ?

Bo nie wiem, jak działa checkbox, jak jest NIE zaznaczony, to przegladarka wyśle pustą wartość, czy nie wyśle nic.
Bo jak nie wyśle nic, to isset mi tu nie pomoże, bo musial bym sprawdzić wszystkie elementy tablicy...

Bo teraz wykłada się na


  1. <?php
  2. Warning: Invalid argument supplied for foreach() in
  3. ?>
bim2
  1. <?php
  2. if(isset($_POST['kasuj']))
  3. {
  4.  
  5. }
  6. ?>
skowron-line
Cytat(bim2 @ 27.12.2008, 12:22:05 ) *
  1. <?php
  2. foreach($_POST['kasuj'] as $v)
  3. {
  4.  
  5. if (zabezpiecz($v)!="")
  6. {
  7. echo("id do skasowania");
  8. echo(zabezpiecz($v));
  9. }
  10. }
  11. ?>
@bim a nie lepiej zrobić JOIN
http://pl.php.net/manual/pl/function.join.php
  1. <?php
  2. if( count( $_POST[ 'kasuj' ] ) > 0 )
  3. $zapytanie = 'DELETE FROM tabela WHERE id IN ( '. join( $_POST[ 'kasuj' ] ) .' )';
  4. ?>
bim2
Tak, jeśli tylko kasujesz smile.gif Nie wiem co user dokładnie chce usunać, bo pod pojęciem wiadomości kryje się wiele znaczeń :] Dla mnie i dla ciebie oczywisty jest IN(), ale dla usera pozwoliłem sobie wytłumaczyć tak jakby prościej żeby zrozumiał. ;P
seba22
Cytat(skowron-line @ 28.12.2008, 11:33:24 ) *
@bim a nie lepiej zrobić JOIN
http://pl.php.net/manual/pl/function.join.php
  1. <?php
  2. if( count( $_POST[ 'kasuj' ] ) > 0 )
  3. $zapytanie = 'DELETE FROM tabela WHERE id IN ( '. join( $_POST[ 'kasuj' ] ) .' )';
  4. ?>



To nie takie proste, zapominacie, że trzeba sprawdzić czy mamy uprawnienia, i jeszcze troche zabawy..


Odnośnie zaznaczonego, wpadłem na prosty pomysł winksmiley.jpg


A jak to mawiał moj kolega który jest programistą, proste sposoby są najlepsze.
  1. <?php
  2. if (isset($_POST['kasuj'])) {
  3. //Jest
  4. }
  5. else
  6. {
  7. //
  8.  
  9. exit('Pajacu, zaznacz wiadomość...');
  10.  
  11. }
  12. ?>
martinstw
A gdyby ktoś chciał wybierać poprzez zaznaczenie checkboxami wiersze (żeby były podświetlane) a później klikać w przycisk Usuń? Żeby efekt był taki jak np na skrzynkach pocztowych, że zaznacza się kilka wierszy, potem klika w usuń i usuwane są zaznaczone wiersze, a strona ma taki sam wygląd, tylko, że bez tych wierszy.

Dodatkowo, żeby można było wybierać zaznaczone wiersze i na zasadzie podobnej do Usuwania, żeby wybrane wiersze z cała stroną zapisywać na innej stronie?
bim2
Javascript -> event onclick -> style.background

smile.gif
artur_dziocha
da rade:)
  1. <?php
  2. echo "<form>";
  3. while($row = mysql_fetch_array($cosWBazie)){
  4. echo "<input type='checkbox' name='".$row['id']."' name='checkbox[]'>
  5. }
  6. echo "</form>";
  7.  
  8. po wysłaniu
  9. foreach($_POST['checkbox'] as $value) {
  10. $zapDEL = mysql_query("DELETE FROM  ... WHERE id = $value");
  11. }
  12. ?>
seba22
Ma ktoś pomysł z jakiej racji taki kod nie działa:


  1. <script type="text/javascript">
  2. function makeCheck(thisForm)
  3. {
  4. for (i = 0; i < thisForm.option.length; i++)
  5. {
  6. thisForm.option[i].checked=true
  7. }
  8. }
  9.  
  10. function makeUncheck(thisForm)
  11. {
  12. for (i = 0; i < thisForm.option.length; i++)
  13. {
  14. thisForm.option[i].checked=false
  15. }
  16. }
  17. </head>
  18.  
  19. <form name="Formularz">
  20. <input type="button" value="Zaznacz" onclick="makeCheck(this.form)">
  21. <input type="button" value="Odznacz" onclick="makeUncheck(this.form)">
  22. <br />
  23. <input type="checkbox" name="option[1]">Pozycja 1<br />
  24. <input type="checkbox" name="option[2]">Pozycja 2<br />
  25. <input type="checkbox" name="option[3]">Pozycja 3<br />
  26. <input type="checkbox" name="option[4]">Pozycja 4<br />
  27. </form>
  28.  
  29. </body>
  30. </html>


Chce żeby zaznaczył mi wszystkie wiadomości...

Nie wiem jak przerobic to na opcję kiedy name ma zmienny argument w nawiasie kwadratowym :/
option[id]
bim2
thisForm.option chyba zwróci Ci tablicę smile.gif
Spróbuj for(i in option) { option[i]; } :]
seba22
Dzięki, odrwałem na necie skrypt, i wystarczyło przepisać 1 słowo ;P z Name na ID winksmiley.jpg


  1. <script type="text/javascript">
  2.  
  3. function SetAllCheckBoxes(FormName, Fieldid, CheckValue)
  4. {
  5. if(!document.forms[FormName])
  6. return;
  7. var objCheckBoxes = document.forms[FormName].elements[Fieldid];
  8. if(!objCheckBoxes)
  9. return;
  10. var countCheckBoxes = objCheckBoxes.length;
  11. if(!countCheckBoxes)
  12. objCheckBoxes.checked = CheckValue;
  13. else
  14. // set the check value for all check boxes
  15. for(var i = 0; i < countCheckBoxes; i++)
  16. objCheckBoxes[i].checked = CheckValue;
  17. }
  18.  



  1. <input type="button" onclick="SetAllCheckBoxes('poletko', 'kasujw', true);" value="Zaznacz wszystkie">
  2. <input type="button" onclick="SetAllCheckBoxes('poletko', 'kasujw', false);" value="Odznacz wszystkie">

Parametry
1) nazwa formularza
2) ID POLA
3) aktywne / nie aktywne

Nie przeszkadza w PHP itp itd, bo operuje na parametrze ID exclamation.gif a nie na NAME które wykorzystywane jest w php....
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.