[ fimalbonegaculo @ 29.05.2002. 08:28 ] @
Imam mysql tabelu koju php-om prikažem a pored svakog sloga (record, row) prikažem jedan checkbox i kada korisnik obilježi koje redove da briše php bi trebao da napravi mysql upit koji će to da odradi. MySQL tabela sadrži id polje koje bi mogao da stavim u neki array zajedno sa rednim brojem checkboxa ili nešto slično... Da li postoji neko drugačije (elegantnije rješenje)?

fA7a
[ leka @ 29.05.2002. 21:28 ] @
Sta ce ti elegantnije resenje od resenja koje vec imas?
[ Divine @ 30.05.2002. 18:48 ] @
Ovo rjesenje se svodi na to tvoje (ali sam postovao u edukativne svrhe :)):
Kada listate redove iz mysql tabele postavljate i chekbox pored svakog reda. Posto svaki chekbox mora imati razlicito ime, ta imena stavite u array:
Code:

<input type="checkbox" name="brisi[$row['t_id']]" value="yes">

Tako da bi ako imate tri reda u tabeli sa t_id (index) poljima 1, 3, 9 kod izgledao ovako:
Code:

red...<input type="checkbox" name="brisi[1]" value="yes">
red...<input type="checkbox" name="brisi[3]" value="yes">
red...<input type="checkbox" name="brisi[9]" value="yes">

I na stranici koja procesira formular (u ovom slucaju POST metodom) stoji sledeci kod:
Code:

foreach($HTTP_POST_VARS['brisi'] as $key => $result) {
    if ($result == 'yes') {
        mysql_query("DELETE FROM table WHERE t_id = " . $key) or die(mysql_error());
        /* table je tabela, t_id je index polje */
    }
}


Napomena: Ukoliko vam nije jasno ovo sa array-ima pokusajte da koristite sledecu komandu:
Code:

echo('<pre>'); /* otvara html element koji koristi fixed-width font */
print_r($HTTP_POST_VARS['brisi']); /* human-readable informacije o array-u :) */
echo('</pre'); /* zatvara <pre> tag */


Pozdrav,
Milos
[ stanoje @ 03.06.2002. 18:12 ] @
Code:

foreach($HTTP_POST_VARS['brisi'] as $key => $result) {
    if ($result == 'yes') {
        mysql_query("DELETE FROM table WHERE t_id = " . $key) or die(mysql_error());
        /* table je tabela, t_id je index polje */
    }
}


dobro, samo jos zlicica vegete u smislu :
napraviti zarez_separated listu t_id1,t_id2 :
$strDeleteIDs="1,5,122,333"
od dobijenih idova(sabiraj zareze uvek u petlji i na kraju seci jedan)
pa onda zakuvati u jednom loncu:

DELETE FROM table WHERE t_id IN ($strDeleteIDs)
[ Divine @ 03.06.2002. 19:19 ] @
Citat:
stanoje:
Code:

DELETE FROM table WHERE t_id IN ($strDeleteIDs)



Sad cu morati da prepravljam stare skripte, jer vjeruj mi, ovo nisam znao. Hvala puno
[ dwarf @ 03.06.2002. 20:01 ] @
Ili drzi sve ID-eve u jednom nizu pa kasnije samo reci

Code:

$ids = implode(",",$keys);
$sql = "DELETE FROM tabela WHERE ID IN (".$ids.")";



Isto resenje, samo izbegavas petlju i stvar je mnogo cistija. Inace, moguce je i checkboxove jednostavno "naciniti" nizom (nzaoves ih sa "[]" na kraju) a za vrednosti postaviti ID trenutnog sloga.
[ stanoje @ 04.06.2002. 16:44 ] @
Citat:
dwarf:
Ili drzi sve ID-eve u jednom nizu pa kasnije samo reci

Code:

$ids = implode(",",$keys);
$sql = "DELETE FROM tabela WHERE ID IN (".$ids.")";



Isto resenje, samo izbegavas petlju i stvar je mnogo cistija. Inace, moguce je i checkboxove jednostavno "naciniti" nizom (nzaoves ih sa "[]" na kraju) a za vrednosti postaviti ID trenutnog sloga.


Ima tu jos par par problema tipa da se omoguce korisniku
dugmici tipa SelectAll SelectNone ili InvertSelection, a bez da se
matretira server za takve glupave operacije.
To vec dolazi u domen JavaScripta(tj izlazi iz domena ovog foruma),
ZNAM neki ga iskljucuju, ali ipak u tom slucaju postoji fora da li cete imenovati
checkboxove kao
1)cbIDS[$i] ili
2)cbIDS_$i jer jedno olaksava
zivot u PHP-u, a drugo u JavaScriptu.
Ako se neko zaleti na document.all Microsoft IE akciju neka zna
da isti po tom principu broji 2 cekboxa u dokumentu kao 2,
dok jedan cbox broji kao nula pa mora da se dodaje jedan cbox sa
ID-jem cisto da bi g**no radilo kako valja.
[ dwarf @ 05.06.2002. 08:15 ] @
Hm...ja sam to uvek resavao tako sto sam isao preko formulara pa zatim preko njegove elements kolekcije...Nesto tipa:

Code:

var coll = document.form1.elements;
for (var i=0;i<coll.length;i++){
    if (coll[i].type == "checkbox"){
        coll[i].checked = (coll[i].checked) ? false : true;
    }
}


Ili nesto slicno, nisam dugo to radio a ne mogu sada da nadjem kako sam to tacno sredjivao, ali tu je negde. I to radi u svim browserima i nema problema uopste sa imenima. Elem, jedini problem nastaje ako postoji vise checkboxova u formularu osim onih koji sluze za brisanje.
[ Gojko Vujovic @ 05.06.2002. 15:16 ] @
Ja vec rekoh da je [ i ] specijalna funkcija na ovom forumu, pravi italic font i ne mozete koristiti "i" za index arraya u svojim programima.

Promeni to u "n" ili sta vec..
[ Jelcha @ 08.12.2005. 23:35 ] @
Evo i jedan lep tutorial:

http://www.pbkill.com/index.php?page=showtutorial.php&id=26#