Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

višestruki checkbox na formi

[es] :: PHP :: višestruki checkbox na formi

[ Pregleda: 1720 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

trojka
Dusan Trajkovic
Beograd

Član broj: 154050
Poruke: 36
212.200.34.*



Profil

icon višestruki checkbox na formi22.12.2009. u 09:33 - pre 175 meseci
Pozdrav drugari,
pomozite ako možete.
Ideja je sledeća: imam tri tabele (korisnik, mesto_rada i korisnik_mesto_rada). Treća tabela je zamišljena kao posrednik izmedju ove dve jer mi je potrebna veza više-prema-više.
korisnik-id_korisnik, ime, prezime
mesto_rada-id_mestorada, naziv
korisnik_mesto_rada-id_kormesto, id_korisnik, id_mestorada

Na formi sam odradio dinamički ispis checkboxova koji predstavljaju mesto rada
Code:
<?php   do { 
    ?>
             
            <tr>
              <td width="5%"><input type="checkbox" name="mestorada[]" value="<?php echo $row_rsMestoRada['id_mestorada']?>"></td>
              <td width="95%"><?php echo $row_rsMestoRada['Naziv'];?></td>
            </tr>
        
                
                <?php
                    
                } while ($row_rsMestoRada= mysql_fetch_assoc($rsMestoRada));
                         
                             $rows = mysql_num_rows($rsMestoRada);
                              if($rows > 0) {
                                              mysql_data_seek($rsMestoRada, 0);
                                                  $row_rsMestoRada = mysql_fetch_assoc($rsMestoRada);
                                              }
                ?>


Sada je na korisniku da čekira ona mesta rada na kojima radi i da primarne ključeve tih mesta rada iz tabele mesto_rada upiše u medjutabelu korisnik_mesto_rada, istovremeno da se u istu tabelu upiše i primarni kljuc korisnika, koji bi bio normalno isti za više vrednosti primarnih ključeva mesta rada, ukoliko je čekirao više mesta rada.
Medjutabela bi na kraju trebala da izgleda otprilike ovako:
id_kormesto | id_korisnik | id_mestorada
1 1 2
2 1 4
3 1 5
4 2 1
........
Unos id_korisnika sam probao na sledeći način
Code:
        $sql="UPDATE kor_mesto_rada SET kor_mesto_rada.id_korisnik='$row_rsKorisnik['id_korisnik']'";
        if (!mysql_query($sql)) 
                { 
                    echo "Nastala je greška pri izvodenju upita za unos primarnog kljuca korisnika" . mysql_query(); 
                }


Dok sam unos čekiranih primarnih ključeva mesta rada pokušao da unesem pod istim submit dugmetom:
Code:

        if (is_array($_POST["mestorada"]) and count ($_POST["mestorada"]) > 0 ){
                                //echo "Mesta gde radite su su :";
                                foreach ($_POST["mestorada"] as $mesto){
                                $sql="UPDATE tbl_kor_mesto_rada SET tbl_kor_mesto_rada.id_mestorada='". $_POST["mesto"] ."'";
        if (!mysql_query($sql)) 
                                { 
                    echo "Nastala je greška pri izvodenju upita za unos mesta rada" . mysql_query(); 
                                }
                                }
                                                                    
                                                                    } else {
                                                                    echo "Jeste sigurni da nigde ne radite";
                                                                    }

Recite mi gde grešim i da li mi je ideja uopšte dobra?
HVALA
 
Odgovor na temu

batika

Član broj: 72401
Poruke: 67
*.sbb.rs.



Profil

icon Re: višestruki checkbox na formi22.12.2009. u 10:53 - pre 175 meseci
Pozdrav evo ovako.

Ovo sto ti radi nije u redu.

Radis UPDATE, i ovaj update ce imati efekta na sve redove u tabelama.

Dakle radi ovako.

- ne vidim gde ti je id_korisnika (pretpostavljam u sesiji)

No, prvo uradi DELETE FROM korisnik_meto_rada WHERE id_korisnik = ID KORISNIKA

Zatim radis:

INSERT INTO korisnik_mesto_rada (id_korisnik, id_mesto) VALUES (ID KORISNIKA, ID MESTA 1), (ID KORISNIKA, ID MESTA 2)...

Mozes i kroz petlju da vrtis i da radis jedan po jedan upis u bazu, a mozes i ovako da prvo napravis upit, i upises ga.
 
Odgovor na temu

Nikola Poša
Backend (PHP) developer
Beograd

Član broj: 173839
Poruke: 1616
*.adsl-a-3.sezampro.rs.



+33 Profil

icon Re: višestruki checkbox na formi22.12.2009. u 10:56 - pre 175 meseci
Budući da su to checkbox-ovi, a tabelu si organizovao tako da se u tu vezivnu tabelu pojedinačno upisuju kombinacije korisnika i mesta, to ne možeš da rešiš sa UPDATE-om, već moraš i da brišeš neke redove, npr. kad korisnik odčekira neko mesto rada...

Jedno rešenje bi bilo da stalno, pri svakom submit-u te forme vršiš i brisanje svih redova vezanih za korisnika koji bira mesta rada, a onda samo da INSERT-uješ sve te kombinacije korisnik_id - mesto_rada_id. A pošto tu izvršavaš više upita u jednom "dahu", dobro je da toj tabeli postaviš neke transaction-safe Storage Engine, najčešće je to InnoDB, kako bi sve te upite "okružio" startovanjem i commit-ovanjem transakcije, odnosno rollback-om u slučaju neizvršavanja bilo kog od tih upita. Takođe, pošto tu radiš brisanje, dobro je da između ta dva segmenta (DELETE upita i svih tih INSERT upita) odradiš i reset-ovanje AUTO INCREMENT-a (ALTER TABLE tablename AUTO_INCREMENT = 1), pošto će on pri svom tom brisanju i upisivanju nenormalno da se povećava.

edit: Preteče me phpandjelko...
 
Odgovor na temu

trojka
Dusan Trajkovic
Beograd

Član broj: 154050
Poruke: 36
212.200.34.*



Profil

icon Re: višestruki checkbox na formi22.12.2009. u 12:18 - pre 175 meseci
tako je, id_korisnika vučem u sesiji.
Otprilike sam shvatio šta mi preporučujete, sada ću probati da nešto zbudžim,
držite mi palčeve
 
Odgovor na temu

agvozden
Aleksandar Gvozden
founder
Info-G
Beograd

Član broj: 37813
Poruke: 1123
*.b92.net.

Sajt: www.gvozden.info


+68 Profil

icon Re: višestruki checkbox na formi22.12.2009. u 13:33 - pre 175 meseci
Ja sam protivnik takvog nacina rada da se sve obrise, a onda upisu samo potrebni podaci (i meni je ranije tako bilo zgodno).
Mislim da se na ovaj nacin 'kasapi' baza, povecavaju kljucevi...

Sta ukoliko ni jedan podatak nije promenjen? Obisace se svi zapisi, pa ponovo vratiti u bazu??

Moj predlog je da prvo iscitas zapise u niz, a onda jedan po jedan INSERT-ujes, UPDATE-ujes ili brises.

Na malim tabelama ovo nema efekata, ali ukoliko ti to postane navika imaces problema sa velikim bazama, pogotovo ako postoje i neke relacije...
 
Odgovor na temu

dakipro
Dalibor Jovic
Web Developer
Bergen, Norway

Moderator
Član broj: 31848
Poruke: 1792
109.106.227.*

Sajt: norway.dakipro.com


+190 Profil

icon Re: višestruki checkbox na formi22.12.2009. u 13:44 - pre 175 meseci
Mislim da je na prvom mestu baza mozda pogresno projektovana, nema potrebe za ta tri polja

korisnik_mesto_rada-id_kormesto, id_korisnik, id_mestorada

pre bi trebalo da bude samo

korisnik_mesto_rada- id_korisnik, id_mestorada
gde bi oba polja bila Primary, tako da nemas nepotrebnih kljuceva.
A ovde mora da se radi brisajne starih podataka, ali je to ispravan pristup onda, ne povecava kljuceve, ne cima bazu nepotrebno jer su oba polja po kojima se radi kljucevi.
Barem su mene ovako ucili, a mozda i nisam ni dobro shvatio problem sa pocetka posta jer ne pise jasno pitanja, koji je problem uopste
 
Odgovor na temu

trojka
Dusan Trajkovic
Beograd

Član broj: 154050
Poruke: 36
212.200.34.*



Profil

icon Re: višestruki checkbox na formi22.12.2009. u 14:38 - pre 175 meseci
Ljudi uspeo sam, srećan sam kao malo dete.
Odradio sam sa brisanjem, za sada nek bude tako ali uzeću u obzir tvoj savet agvozden.
Hvala vam puno, zlata ste vredni.
Evo koda možda će nekom i poslužiti
Code:

            $sql="DELETE FROM tbl_kor_mesto_rada WHERE id_korisnik='$name'";//$name je promenljiva gde čuvam id korisnika
                if (!mysql_query($sql)) 
                            { 
                                echo "Nastala je greška pri izvodenju brisanju postojecih unosa korisnika" . mysql_query(); 
                            }
              
            foreach($_POST['mestorada'] as $mestorada => $value) {   //mestorada je naziv checkboxa
            $sql="INSERT INTO tbl_kor_mesto_rada (id_korisnik,id_mestorada) VALUES ('$name','$value')"; //upis odgovarajućih povezanih vrednosti id_korisnik i id_mesto rada u medju tabelu
                if (!mysql_query($sql)) 
                            { 
                                echo "Nastala je greška pri unosu mesta rada u medjutabelu" . mysql_query(); 
                            }
            }

HVALA PUNO
 
Odgovor na temu

trojka
Dusan Trajkovic
Beograd

Član broj: 154050
Poruke: 36
212.200.34.*



Profil

icon Re: višestruki checkbox na formi22.12.2009. u 14:43 - pre 175 meseci
Poslušao sam tvoj savet dakipro, uklonio sam id_kormesto iz medjutabele, tako da sada u toj tabeli imam samo ta dva potrebna strana ključa, i sve radi kako treba, samo što sada nemam bespotreban ključ id_kormesto koji bi se stvarno uvećavao do neslućenih vrednosti :)
Hvala
 
Odgovor na temu

dakipro
Dalibor Jovic
Web Developer
Bergen, Norway

Moderator
Član broj: 31848
Poruke: 1792
109.106.227.*

Sajt: norway.dakipro.com


+190 Profil

icon Re: višestruki checkbox na formi22.12.2009. u 15:02 - pre 175 meseci
Super, nadam se samo da su ti oba polja selektovana kao jedinstveni Primary
 
Odgovor na temu

trojka
Dusan Trajkovic
Beograd

Član broj: 154050
Poruke: 36
212.200.34.*



Profil

icon Re: višestruki checkbox na formi22.12.2009. u 15:12 - pre 175 meseci
Citat:
dakipro: Super, nadam se samo da su ti oba polja selektovana kao jedinstveni Primary



Sad sam i to izmenio :)))))
 
Odgovor na temu

[es] :: PHP :: višestruki checkbox na formi

[ Pregleda: 1720 | Odgovora: 9 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.