15. juni 2001 - 00:08Der er
16 kommentarer og 1 løsning
Nemt / Hurtigt
Jeg har lavet et banding system, så bestemte folk ikke kan se min hjemmeside....
Sådan ser min default.asp ud (dette er kun banding systemmet)!!
<% Set objConn = Server.CreateObject(\"ADODB.Connection\") DSN= \"PROVIDER=MSDASQL;DRIVER={Microsoft Access Driver (*.mdb)};DBQ=\" & Server.MapPath(\"../../mdb/settings.mdb\") objConn.Open DSN ip = Request.ServerVariables(\"REMOTE_ADDR\") SQL = \"SELECT banned FROM banned WHERE banned = \'\" & ip & \"\'\" Set objRS = objConn.Execute(SQL) If objRS.EOF Then Response.Redirect(\"default.asp\") Else Response.Redirect(\"banned.asp\") End if objRS.close Set objRS = Nothing objConn.Close Set objConn = Nothing %>
som man se hvis folk ip ikke er i databasen skal den IKKE redirecte til den default.asp igen!!!
Response.Redirect(\"default.asp\")
Hvad skriver man så den ikke skal gøre noget udover at vise resten af default.asp???
<% Set objConn = Server.CreateObject(\"ADODB.Connection\") DSN= \"PROVIDER=MSDASQL;DRIVER={Microsoft Access Driver (*.mdb)};DBQ=\" & Server.MapPath(\"../../mdb/settings.mdb\") objConn.Open DSN ip = Request.ServerVariables(\"REMOTE_ADDR\") SQL = \"SELECT banned FROM banned WHERE banned = \'\" & ip & \"\'\" Set objRS = objConn.Execute(SQL) If Not objRS.EOF Then Response.Redirect(\"banned.asp\") objRS.close Set objRS = Nothing objConn.Close Set objConn = Nothing %>
eromaster:> HVAD !?! Hvad faen har du gang i ? Vi svarede nøjagtigt ens ... bortset fra at moonduck brugte 3 linier istedet for een .. Det er bedre at bruge en single-line If når man kan !!!!!
eromaster:> eftersom jeg svarede først og var HELT korrekt burde jeg have haft pointene ... men 15 latterlige point .. jeg synes bare det er en lad holdning at have ...
moonduck:> som jeg skrev, 15 latterlige point .. jeg har ikke BRUG for point er fløjtende ligeglad, men hvis det havde været 100 eller 200 ... ja så ku vi begynde at snakke .. men det er en princip sag.. som thoeger_poertner siger plejer man normalt at give den der svarer først, med det rigtige svar point.
Det er ikke altid godt ? Faktisk bruger VBScript\'s motor MERE tid på at udføre en block-IF end en single-line IF. Uoverskueligt ? Tillad mig at grine HØJLYDT!!! Prøv at se hans kode. . det bliver sku da ikke mere uoverskueligt end det er i forvejen ..
objRs.Close ? Man lukker ikke et RecordSet når ikke man har åbnet det !
strIP = Request.ServerVariables(\"REMOTE_ADDR\") Set objRS = objConn.Execute(\"SELECT banned FROM banned WHERE banned = \'\" & strIP & \"\';\") If Not objRS.EOF Then Response.Redirect \"banned.asp\"
Set objRS = Nothing objConn.Close: Set objConn = Nothing %>
sådan burde det se ud, og det mere overskueligt bliver det ikke. Hvis du istedet bruger 3 linier på en IF der KUNNE stå på een linie, og den stadig var overskueligt (dvs. ikke for mange And/Or\'s) så ser det amatør agtigt ud... det er det måske også, men der er ingen grund til at bruge mere kode end højst nødvendigt.
tdaugaard>> Du har ret i at interpretteren er langsommer end en kode spredt på flere linier.. Men at man ikke skal lukke et recordset når man har brugt
Ser objRS = objConn.Execute()
er forkert Execute metoden på connection objektet returnerer nemlig en reference til et åbent recordset. Men sålænge du bruger
Set objRS = Nothing
kan man godt stole på IIS´s garbage collector og den plejer da også at fungere fint med Recordsetobjektet.
Selvom du bare refererer til objektet skal det også lukkes!
Men som sagt din måde er også helt fjong da Set x = Nothing får garbage collectoren til at lukke objektet.
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.