17. januar 2002 - 14:44Der er
26 kommentarer og 1 løsning
Find tal i en streng
Hej Jeg har en talstreng der eks. ser sådan ud: 1,2,4,6,7,9,10,12,13,15 (kommer fra database) sådan en streng er tilknyttet hver bruger. Hvert tal indikere hvilken menulink de har adgang til.
Hvordan søger jeg i denne streng. Jeg afkrydser de checkboxe som ønsker søgt på. Feks. hvem har adgang til feks. 2,3,5.
Skal virksomheder stå stærkere mod angreb og kunne udvikle sig, skal sikkerhed, drift og forretning tænkes sammen. Det er tanken bag Jysk IT’s ambition om at skabe en “sikker fremtid” for kunderne.
Den har jeg også bikset lidt med, både med positiv og negativ forsøg. Alle menuer har jo en unik nøgle fra 1 og opefter. Men når jeg vil vide hvem der har adgang til 1 så får jeg også de brugere som har adgang til 10,11,12,13...osv. altså der hvor 1 indgår. Ikke særlig smart. Er der en anden måde det kan gøres på?
aaen >> les hans spørsmål...\"Hvordan søger jeg i denne streng. Jeg afkrydser de checkboxe som ønsker søgt på. Feks. hvem har adgang til feks. 2,3,5\"...vil du så benytte denne fremgangsmåten for alle brukere ?? så blir det et langsomt script :-|
UHA !!! når jeg ser på det du har skrevet og tenker litt på det, så er det rimelig vanskelig å få det til å fungere. hvorfor benytter du ikke mulighetene i databasen ved å bygge relasjonelle tabeller ??
for at det skal fungere ordentlig med søk i en tekststreng, så er du nødt til å lage strengen som ligger i databasen om til fx:
,1,2,4,6,7,9,10,12,13,15,
grunnen til det er at du ikke kan benytte wildcards i din SQL for å utføre søkningen, da disse vil returnere rekker som ikke er relevante
Så har jeg fået løst den store gåde. Der hvor det går galt er jo at de en-ciffrede tal (1-9) ikke kan bruges. Søger den på et 1-tal så får jeg også 10,11,12,13 osv. Det har både nute og jeg været inde på. Nu har jeg ikke så mange menupunkter, men bruger man nr. fra 10 og op til 99 så er problemet faktisk løst. Selvfølgelig en lidt dårlig løsning, for problemet er ikke helt løst, men virker korrekt når man kun har nr. fra 10-99. Nute: Hvis du vil svare - så kan jeg få delt lidt point ud. Tusind tak for den hjælp i har givet mig.
Normalt så vil en slippe for dette problem ved å skrive sine databaser \'korrekt\', men normalt vil en også alltid finne en vei utenom (selv om det ofte blir en laaang vei)
Nute: Selvfølgelig skal databasen være korrekt. Det som jeg har gjort er, at alle menupunkter er i en tabel for sig med sit eget unikke nr. For hver bruger der er, er der et felt som fortæller hvilke menupunkter som vedkommende har adgang til. Dette felt skrives som en lang streng eks.: 1,4,6,8,9,10,14,23 Vil den kunne laves på en anden måde som er mere korrekt eller?
den korrekte måte er å lage en tabell (relasjonstabell) som mapper/linker en bruker til et menupunkt. Denne tabell vil typisk inneholde 3 kolonner:
ID brugerID menuID
deretter har du fx din bruker tabell:
ID bruger masseAnnet
og din menytabell
ID menuPunkt
din relasjonstabell brukes på den måten at den inneholder mange rekker for en bruker. hver rekke representerer så hvert menypunkt. La oss si at bruker nummer 3 har adgang til menupunkt 1, 3, 5, 7 og 9. Så vil din relasjonstabell se sånn ut:
ID brugerID menuID 1__10_______1 2__10_______3 3__10_______4 4__10_______5 5__10_______7 6__10_______9
legg merke til at ID er bare en unik identifikator som egentlig ikke brukes til noe.
ja, jeg forstår udemærket ideen i det, men hvis du feks. har 100 bruger kan jeg godt forstille mig at det bliver en kæmpe database. Det må da have indvirkning på svartiden? I dit eksempel kan jeg godt se, at jeg ikke vil få nogen problemer overhovedet med mit ID-nr. på menuen. Så det må jeg få lavet om så det funker korrekt. Nu er det at jeg har et spørgsmål til som jeg håber du kan svare på nute - jeg lægger gerne flere point oven i. Jeg skal have søgningen lagt ind i en pageing. Jeg bruger det pageingeksempel som er på Activedeveloper.dk og det har jeg lidt probs med. Jeg kan sagtens få de brugere ud som har menuerne, men lige at få pageing til at køre som den skal har jeg lidt svært til. Har du en ide til hvordan jeg skal sætte det sammen?
det er tyngre for serveren å la ASP utføre søket enn om SQL joiner noen tabeller og utfører søket for deg. Uansett er dette metoden som *alle* store (relasjonelle) databaser er bygget opp rundt, så det skal du ikke tenke på.
jeg regner med at din paging ikke sender parametre over til \'neste\'/\'forrige\' side ?! det er du nødt til å gjøre...
hvis du kan legge koden i en txt fil og legge den på en server et sted og smide linket her, så er det godt. så slipper man å poste en hel masse kode som fyller opp databasen på xperten i tillegg til at man ikke behøver å scrolle seg ihjel ;)
Jeg har desværre ikke noget sted at lægge den ud. Så jeg er desværre nødt til at smide koden ind her. Håber ikke det gør noget.
<HTML> <HEAD> <TITLE></TITLE> </HEAD> <BODY> <% intPage = Request(\"page\") If isNumeric(intPage) = False Or intPage < 1 Then intPage = 1 End If
Set rs = Server.CreateObject(\"ADODB.RecordSet\")
menuID = request(\"access\")
\'Her findes de brugere der har de menupunkter der søges på For each item in request(\"Access\") a = a & item & \",\" Next tal = left(a,2)
strSQL = \"SELECT * FROM MENUID WHERE (menuID=\" & tal & \")\" For each item in request(\"Access\") strSQL = strSQL & \" OR (menuID=\" & item & \")\" Next \'Slut på søgning af brugere
If Not (rs.BOF Or rs.EOF) Then rs.PageSize = 3 rs.AbsolutePage = intPage intRecCount = rs.PageSize intPageCount = rs.PageCount Response.Write \"<p><b>Side \" & intPage & \" af \" & intPageCount & \"</b></p>\" Do While Not rs.EOF And intRecCount > 0 Set rsFind = Server.CreateObject(\"ADODB.RecordSet\") rsFind.open \"SELECT * FROM BRUGER WHERE brugerID=\" & rs(\"brugerID\") & \";\", strDSN, 1
\'Her starter Forrige og Næste knapperne Response.write \"<table><tr><td width=400 valign=left>\" Response.Write \"Gå til side \" For intNum = 1 To intPageCount Response.Write \"<a href=sog_computer.asp?page=\" & intNum & \">\" & intNum & \"</a> \" Next Response.write \"</td></tr></table>\"
Response.Write \"<table><tr><td width=60 valign=left>\" If Clng(intPage) > 1 Then Response.Write \"<a href=sog_computer.asp?page=\" & intPage - 1 & \"&menuID=\" & request(\"access\") & \"><img src=image/knap_tilbage.gif border=0 height=15 width=55></a>\" End If
\'Her starter Forrige og Næste knapperne Response.write \"<table><tr><td width=400 valign=left>\" Response.Write \"Gå til side \" For intNum = 1 To intPageCount Response.Write \"<a href=sog_computer.asp?page=\" & intNum & \">\" & intNum & \"</a> \" Next Response.write \"</td></tr></table>\"
Response.Write \"<table><tr><td width=60 valign=left>\" If Clng(intPage) > 1 Then Response.Write \"<a href=sog_computer.asp?page=\" & intPage - 1 & \"&menuID=\" & request(\"access\") & \"><img src=image/knap_tilbage.gif border=0 height=15 width=55></a>\" End If
Når jeg trykker på næste tager den kun det første tal med som er i request(\"access\") efterfuldt af et komma. Hvordan får jeg den til at requeste alle talene uden komma?
Det er lidt pudsigt problem. Jeg kan simpelthen ikke få den til at vise flere flere tal en et tal og et komma bagefter. Har prøvet dit eksempel og det virker fint.
Synes godt om
Ny brugerNybegynder
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.