Avatar billede sapworld Nybegynder
29. september 2004 - 18:33 Der er 7 kommentarer og
1 løsning

Begrænse login på data fra access database

Hej

Jeg har en alm. login, men der er et par sider som kun mit eget log in må give adgang til. Er der en måde at "lukke af" på.

Jeg tænker noget med at på side1.asp der ikke må ses af andre (al data hentes fra databasen), så stopper selekteringen fra databasen hvis f.eks. feltet status i access databasen ikke er lig "1"? Altså en eller anden "if status=1.... else response.redirect smut.asp?
Jeg bruger en alm. selekt på siden, som skal virke hvis Status=1:
<%
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("../../DB/database.mdb")
Conn.Open DSN
sql = "Select * from adresse Where synlig = 'ja' order by adresse.fornavn "
set rs = Conn.execute(sql)
%>


Hilsen

Kim
Avatar billede kurtpedersen Nybegynder
29. september 2004 - 18:46 #1
Set Conn = Server.CreateObject("ADODB.Connection")
DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; "
DSN = DSN & "DBQ=" & Server.MapPath("../../DB/database.mdb")
Conn.Open DSN
sql = "Select * from adresse Where synlig = 'ja' AND status = 1 order by adresse.fornavn "
set rs = Conn.execute(sql)
IF rs.BOF AND rs.EOF THEN
  response.redirect smut.asp
END IF
%>

Forudsat at status er et felt på tabellen med numerisk værdi. Er feltet en streng skriver AND status = '1' i stedet.

Hvis ingen rækker har status 1 vil din rs være tom (rs.bof og rs.eof vil være sande). Pænere ville det være at gøre opsamlingen færdig og tælle antallet af hits og dernæst redirecte hvis antallet = 0.
Avatar billede eagleeye Praktikant
29. september 2004 - 19:27 #2
Så skal du på en eller anden måde også få login inforamtionen ind i SQL sætningen.

sql = "Select * from adresse Where synlig = 'ja' AND status = 1 AND brugerid="& session("id") & " order by adresse.fornavn "
Avatar billede sapworld Nybegynder
30. september 2004 - 03:32 #3
Det er ikke så nemt. Det er ikke det jeg selekterer der skal have status='1'. Det skal være den der selektere (er logget ind), der skal have status='1'.

Der er brug for lidt mere forklaring. Jeg har en database med person informationer og password. Folk kan logge på og rette deres egne informationer. Jeg har så en "speciel" side hvor jeg som webmaster kan gå ind rette al data for alle personer. Denne side har de i princippet adgang til når de er logget ind hvis de kender URL'en. Det vil jeg gerne undgå. Så inden "webmastersiden" loades skal det tjekkes om det er mig (eller min kammerat) der er logget ind, og hvis ikke redirect to "smut.asp". Det nemmest var hvis personen havde en status i databasen der blev tjekket på.
/Kim
Avatar billede kurtpedersen Nybegynder
30. september 2004 - 07:01 #4
OK, lyder som join af 2 tabeller så - den med brugere og den med adresser:

SELECT * from Adresse A, Brugere B WHERE B.STATUS = 1 AND B.NAVN = A.FORNAVN ORDER BY A.FORNAVN

Den vil give dig alle brugere og alle adresser, hvor brugeren har status 1, og hvor navnene stemmer overens.

Har du fat i en bestemt bruger - feks ved hans id ser det således ud:

SELECT * from Adresse A, Brugere B WHERE B.STATUS = 1 AND B.NAVN = A.FORNAVN AND B.ID = " & Brugerid & " ORDER BY A.FORNAVN " hvor Brugerid indeholder nøglen på brugeren - kan som eagleeye er inde på lagres i Session("id")

Har du navnet ser det således ud :
SELECT * from Adresse A, Brugere B WHERE B.STATUS = 1 AND B.NAVN = A.FORNAVN AND B.NAVN = " & BrugerNavn & " ORDER BY A.FORNAVN "

Personligt foretrækker jeg at lave relationstabeller hvor en fremmednøgle viser at en række "ejes" af en bestemt person. Det giver ikke problemer, hvis 2 brugere hedder det samme eller hvis man ønsker at skifte loginnavnet ud.
Avatar billede sapworld Nybegynder
30. september 2004 - 17:04 #5
Hej
Det er en løsning jeg kan bruge - tak for hjælpen :)

Når du siger relationstabller, er det så det samme som queries i Access. Hvis ja, hvordan kalder man så en query?

Poster du et svar?

/Kim
Avatar billede kurtpedersen Nybegynder
30. september 2004 - 18:09 #6
Relationstabel betyder at 2 rækker fra hver sin tabel har en relation til hinanden. I dit tilfælde er der en relation mellem bruger og adresse, idet en bruger kan redigere en adresse. Det bør man implementere i sin datamodel og kan gøres på flere måder. En af måderne er at bede access om at gøre det - den bør man ikke bruge, medmindre man har helt styr på den slags.

En anden måde er at lade nøglen fra den ene tabel - eks. brugerens id - indgå som fremmednøgle i den anden tabel:

Bruger:
ID
Navn
Password
Login
osv

Adresse:
ID
FKBrugerID
Vejnavn
Postnr
osv.

Så er det let at joine 2 tabeller med at parre brugerid:

SELECT * from Adresse A, Brugere B WHERE B.STATUS = 1 AND B.ID = A.FKBRUGERID AND B.NAVN = " & BrugerNavn & " ORDER BY A.FORNAVN "

Så er der ingen bånd omkring navnefeltet - 2 brugere kan begge hedde Kim og iøvrigt skifte deres loginnavn uden problemer. Nu er dit systemt sikkert ikke så stort, at det vil give dig problemer.

En query er en forespørgsel i access. Man kan bede access om at udføre en selektering, eksempeltvist ovenstående for at teste om man får de rigtige data inden man implementerer det. Jeg bruger det ikke selv, men kan være nyttig hvis man har bugs man ikke kan finde.

Du laver en query direkte fra access : Ude til venstre er der et panel, hvor der står enten Query eller Forespørgsel (engelsk eller dansk version). Herfra kan du oprette en query. Man udvælger hvilke(n) tabel(ler) man vil se data fra og hvilke rækker og hernæst stiller man sine betingelser op - feks at status skal være lig 1. I princippet fungerer det helt som at udføre et stykke sql fra et asp-program. Du kan også lave insert, update og delete på den måde, men der foretrækker de fleste nok at klare det manuelt.
Avatar billede sapworld Nybegynder
04. oktober 2004 - 09:22 #7
Tak for hjælpen

/Kim
Avatar billede kurtpedersen Nybegynder
04. oktober 2004 - 17:16 #8
Det var så lidt :)

Takker for point

Kurt
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester