Logički problem - prikaz privatno/javno
Prilikom registracije korisnika na dating servis, kod svakog atributa o sebi postoji checkbox koji, ako je checkiran, znači da je taj podatak privatan i vidljiv je u rezultatima pretrage samo kada registrirani gost pretražuje.
Kada pretražuje neregistrirani, ti podaci se ne pokazuju u rezultatima. E sad, ja sam to riješio tako da fino pokupim te checkboxove u array i upišem u bazu. Sad dolazi problem - kad idem pretraživati, kako odrediti koji atribut prikazati, a koji ne? Imam i provjeru za tip korisnika (logiran, nelogiran, admin...) i to je ok, s tim problema nema. Problem mi je, nekako više logički, ne znam kako bih si ga u glavi zamislio - kako da ja sad od niza brojeva 2,5,7,13 (IDevi checkboxova koji su bili označeni) znam da gostu ne smijem prikazati te atribute, a adminu smijem? Odnosno - kako povezati te brojeve s onim što bi trebali predstavljati? Off Topic: ironično, ovo mi je 100. post na DPT i ispod imena mi stoji profesionalac, štoviše, qualified :1086: |
U tabelu user dodaš polja tipa checkbox1 enum('Y'), checkbox2 enum('Y') , checkbox3 enum('Y') ...
HTML checkbox-ove povežeš sa poljima i pri insert ili update pustiš ih sve u tabelu upiše. I to svaki put. To je najjednostavnije za upis a onda moraš da praviš u programu logiku prikaza. drugi, duži način je da napraviš tabele create table dozvola(dozvola_id tinyint(1) unsigned not null primary key auto_increment, dozvola varchar(255) unique); i create table user_dozvola (user_id int unsigned not null, dozvola_id tinyint(1) unsigned not null, dozvolio enum('Y', 'N')); Iz tabele dozvola: SELECT dozvola_id, dozvola FROM dozvola Svaka dozvola u <p>Dozvola</p> , svaki checkbox dobije ime dozvola_id Tabela user_dozvola je relacija više na više ali definišeš da je unique index nad poljima(user_id, dozvola_id) pa nije moguće da user ima više puta upisanu istu dozovolu; onda INSERT INTO user_dozvola VALUES (:user_id, :dozvola_id, :dozvolio) ON DUPLICATE KEY UPDATE user_id = :user_id, dozvola_id = :dozvola_id, dozvolio = :dozvolio; Onda je lako selektovati samo ono što je user dozvolio SELECT * FROM user_dozvola WHERE dozvolio = 'Y'; |
... to jest SELECT user_id, dozvola FROM user
INNER JOIN user_dozvola USING(user_id) INNER JOIN dozvola USING (dozvola_id) WHERE user_id = :user_id AND dozvolio = 'Y' GROUP BY user_id ... tako nekako :) |
thx, probat ću tako :)
|
eeee
bilo mi interesantno pa sam sebi napravio na sajtu create table saglasnost(saglasnost_id tinyint(1) unsigned not null primary key auto_increment, saglasnost varchar(255) not null unique) engine = innodb; insert into saglasnost values (null, 'Sistemska obaveštenja'), (null, 'Novosti'), (null, 'Reklamna obaveštenja'); create table user_saglasnost(user_id int unsigned not null, saglasnost_id tinyint(1) unsigned not null, saglasan enum('on')) engine = innodb; alter table user_saglasnost add foreign key (user_id) references user(user_id) on delete cascade; alter table user_saglasnost add unique(user_id, saglasnost_id); Za unos saglasnosti za postojeće usere - 1,2,3 su saglasnost_id; insert into user_saglasnost(user_id, saglasnost_id, saglasan) select user_id, 1, 'on' from user; insert into user_saglasnost(user_id, saglasnost_id, saglasan) select user_id, 2, 'on from user; insert into user_saglasnost(user_id, saglasnost_id, saglasan) select user_id, 3, 'on' from user; Upiti nad saglasnoscu. SELECT saglasnost_id, saglasnost FROM saglasnost // dobiješ sve redove SELECT saglasnost_id, saglasan FROM user_saglasnost WHERE saglasnost_id = :saglasnost_id AND user_id = :user_id / povuces saglasnost user-a za svaku saglasnost u bazi. if($saglasan['saglasan']) return "checked"; else return null; // da vrati umesto on, checked da bi polje bilo ispisano primer checbox polja // uz template sistem <input type=checkbox name='Saglasnost_id{$SAGLASNOST_ID}' id='Saglasnost_id{$SAGLASNOST_ID}' {$SAGLASAN}> i to je to :) |
za upis u bazu
$saglasnosti = $User->getSaglasnost(); // izvučeš is tabele saglasnost foreach($saglasnosti as $saglasnost) { $saglasan = $_POST["Saglasnost_id".$saglasnost['saglasnost_id']]; // ovim dobiješ vrednost polja koje odgovara saglasnost_id $sql = "UPDATE user_saglasnost SET saglasan = :saglasan WHERE saglasnost_id = :saglasnost_id AND user_id = :user_id"; $array = array(':saglasnost_id'=>$saglasnost['saglasnost_id'], ':user_id'=>$_SESSION['User_id'], ':saglasan'=>$saglasan); db::insert($sql, $array); // ovo je nešto moje za pristup bazu... bla.. bla... bla... } za par dana ću da postavim novu verziju gde to radi a ako je hića, javi na PP da ti pošaljem link ka test sajtu. |
Vreme je GMT +2. Trenutno vreme je 15:48. |
Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.