DevProTalk

DevProTalk (http://www.devprotalk.com/index.php)
-   Sva početnička pitanja (http://www.devprotalk.com/forumdisplay.php?f=40)
-   -   Logički problem - prikaz privatno/javno (http://www.devprotalk.com/showthread.php?t=9085)

blackshtef 01. 09. 2010. 02:09

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:

vidak 01. 09. 2010. 03:00

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';

vidak 01. 09. 2010. 03:14

... 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 :)

blackshtef 02. 09. 2010. 00:40

thx, probat ću tako :)

vidak 02. 09. 2010. 01:27

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 :)

vidak 02. 09. 2010. 01:45

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 18:42.

Powered by vBulletin® Verzija 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright © DevProTalk. All Rights Reserved.

Mišljenja, saveti, izjave, ponude ili druge informacije ili sadržaji nastali na Sajtu su vlasništvo onoga ko ih je kreirao, a ne DevProTalk.com, tako da ne morate da se oslanjate na njih.
Autori poruka su jedini odgovorni za ovakve sadržaje. DevProTalk.com ne garantuje tačnost, kompletnost ili upotrebnu vrednost informacija, stavova, saveta ili datih izjava. Ne postoje uslovi pod kojima bi mi bili odgovorni za štetu ili gubitak koji je posledica bilo čijeg oslanjanja na nepouzdane informacije, ili bilo kakve informacije nastale kroz komunikaciju između registrovanih članova.
Web sajt može sadržavati linkove na druge web sajtove na Internetu ili neke druge sadržaje. Ne kontrolišemo niti podržavamo te druge web sajtove, niti smo pregledali bilo kakve sadržaje na takvim sajtovima. Mi nećemo biti odgovorni za legalnost, tačnost ili prikladnost bilo kog sadržaja, oglasa, proizvoda, usluga ili informacije lociranim na ili distribuiranih kroz druge web sajtove, niti za bilo kakvu štetu nastalu kao posledica takvih informacija. DevProTalk.com drži i čuva druga prava vlasništva na web sajtu. Web sajt sadrže materijale zaštićene copyright-om, zaštitne znakove i druge informacije o pravu vlasništva ili softver. Članovi mogu poslatu informacije zaštićene pravima vlasništva njihovih nosilaca i ona ostaju zaštićena bez obzira da li su oni koji prenose te informacije to naveli ili ne. Osim informacija koje su u javnom vlasništvu ili za koje dobijete dozvolu, nemate pravo da kopirate, modifikujete ili na bilo koji način menjate, objavljujete, prenosite, distribuirate, izvršavate, prikazujete ili prodajte bilo koju informaciju zaštićenu pravima vlasništva. Slanjem informacija ili sadržaja na bilo koji deo DevProTalk.com, Vi automatski dozvoljavate i predstavljate garanciju da imate pravo da dozvolite DevProTalk.com ili članovima DevProTalk.com bespovratnu, kontinualnu, neograničenu, globalnu dozvolu da koriste, kopiraju, izvršavaju, prikazuju i distribuiraju takve informacije i sadržaje i da iz takvih sadžaja koriste bilo koji deo u bilo koje svrhe, kao i pravo i dozvolu da koriste gore navedene sadržaje. Svi zaštitni znakovi (trademarks), logotipi, oznake usluga, firme ili imena proizvoda koji se pominju na ovom web sajtu su vlasništvo kojim raspolažu njihovi vlasnici.