12. oktober 2006 - 20:17Der er
25 kommentarer og 1 løsning
md5 igen igen igen..
Hey Eksperter ! Sorry at jeg bringe dette spørgsmål på banen igen, men jeg kan simpelthen ikke få det til at virke. Når jeg indtaster password 111111 bliver det gemt i db'en og vist på 'confirm-siden' som 111111 og ikke en lang tråd af blandede tal og bogstaver...
Jeg fandt så et eksempel på et andet spm også omkring md5 hvor ahv skulle blive til: b2089cddfd024804ad7c6164403a3a49 <- men også her gemmes og skrives blot ahv i stedet for ! hvad gør jeg forkert?
Bruger følgende kode: (kun ASP-delen) <% <!--#include file="md5.asp"-->
Okey fennec. nu var dette blot hvis det kunne bruges i sammenhæng med det andet... Hvis nu jeg vil lave det med denne linie:
strSQL = "Insert into Personer (Adgangskode) values('" & md5(Trim(Replace(Request.Form("Adgangskode"),"'","''"))) & "')"
skal jeg så også blot smide 'Replace' foran det hele? har jeg nemlig prøve og igen kodeordet 'testet' forbliver 'testet' og ikke 'cec72b93704f19d7626a9dd6005fab68'
Tror lige jeg prøver at vise hele min side. Kan nogen forklare(skrive) mig hvad jeg helt præcis skal gøre for at det indhold der tastes i feltet 'Adgangskode' kan blive hashed med MD5? for når jeg skriver 'test' forbliver det til test i databasen :(
[test.asp]
<% ' FP_ASP ASP Automatically generated by a Frontpage Component. Do not Edit.
On Error Resume Next Session("FP_OldCodePage") = Session.CodePage Session("FP_OldLCID") = Session.LCID Session.CodePage = 1252 Err.Clear
strErrorUrl = ""
If Request.ServerVariables("REQUEST_METHOD") = "POST" Then If Request.Form("VTI-GROUP") = "0" Then Err.Clear
Set fp_conn = Server.CreateObject("ADODB.Connection") FP_DumpError strErrorUrl, "Cannot create connection"
Set fp_rs = Server.CreateObject("ADODB.Recordset") FP_DumpError strErrorUrl, "Cannot create record set"
fp_conn.Open Application("TESTbase_ConnectionString") FP_DumpError strErrorUrl, "Cannot open database"
fp_rs.Open "Personer", fp_conn, 1, 3, 2 ' adOpenKeySet, adLockOptimistic, adCmdTable FP_DumpError strErrorUrl, "Cannot open record set"
fp_rs.AddNew FP_DumpError strErrorUrl, "Cannot add new record set to the database" Dim arFormFields0(9) Dim arFormDBFields0(9) Dim arFormValues0(9)
If Request.ServerVariables("REMOTE_HOST") <> "" Then FP_SaveFieldToDB fp_rs, Request.ServerVariables("REMOTE_HOST"), "Fjerncomputer" End If If Request.ServerVariables("HTTP_USER_AGENT") <> "" Then FP_SaveFieldToDB fp_rs, Request.ServerVariables("HTTP_USER_AGENT"), "Webbrowsertype" End If FP_SaveFieldToDB fp_rs, Now, "Tidsstempel"
fp_rs.Update FP_DumpError strErrorUrl, "Cannot update the database"
fp_rs.Close fp_conn.Close
FP_FormConfirmation "text/html; charset=windows-1252",_ "Form Confirmation",_ "Thank you for submitting the following information:",_ "test.asp",_ "Return to the form."
Din insert fatter jeg minus af. Er det ikke meningen at det skal indsættes på EN rækker, for nu bliver det indsat på 9 selvstændige rækker (medregnet 'adgangskode' linjen). Din kode skulle nærmere være:
nu snakker du om i selve db'en ikk? for hvis så gør det ingen forskel om det står på ni rækker som mit eller det bliver skrevet sammen som i eksemplet til mit svar i denne tråd..
Men jeg har selv prøvet at smide md5 frem og tilbage og rykke det rundt på krydes og tværs så det hjælper lige fedt :(
Så hvis du (eller en anden) kunne vise (skrive) en linie der passer ind på min side jeg nu har vist her ville det være super rart. Den stump kode:
anyone? hvis ikke har jeg et andet spm der måske så er nogle der kan hjælpe med. Hvis nu jeg opretter følgende data:
Fødselsdag: 123456 Fornavn: hans Efternavn: hansen Adresse: hansvej 12 Postnummer: 9000 By: Ålborg Telefonnummer: 87654321 Emailadresse: navn@domiane.land Password: test
Dette oprettes mandag d. 1 - torsdag d.4 (datoer ligegyldig - princippet)er hans hansen flyttet til hendesvej 8...
Kan man så lave en side (fx update.asp) der vises når hans er logget ind, så først laves et udtræk med hans' data og efter disse udtag vises et input felt der kan skrives i hvis man ønsker en oplysning opdateret?
Altså noget i stil med:
123456 Hans [- felt til at skrive i -] Hansen [- felt til at skrive i -] Hansvej 12 [hendesvej 8] Postnummer [- felt til at skrive i -] osv.. osv.. hvis det ikke srives noget = ingen opdatering
Håber nogen kan løse lidt ud af deres viden og tid c",) - som sagt er der tale om et tillæges spørgsmål så har du et svar på det 'første' har det stadig også stor interesse! - sikkerheden kommer jo i første række!
POINT hæves selvfølgelig! - ved ikke helt hvordan man gør, men ellers oprettes separate tråde med pointgivninger..
Her er en kode som viser grundopstillingen til indsættelse af en ny bruger: <% if Request.querystring("mode") = "save" then birth = SQLDate(Request.Form("birth")) navn = replace(Request.Form("navn"),"'","''") lastn = replace(Request.Form("lastn"),"'","''") adr = replace(Request.Form("adr"),"'","''") zip = replace(Request.Form("zip"),"'","''") city = replace(Request.Form("city"),"'","''") tlf = replace(Request.Form("tlf"),"'","''") email = replace(Request.Form("email"),"'","''") pass = replace(MD5(Request.Form("pass")),"'","''") sql = "insert into " oConn.execute("insert into Personer(Foedselsdag,Fornavn,Efternavn,Adresse,Postnummer,[By],Telefonnummer,Emailadresse,adgangskode) "&_ "values(#"& birth &"#,'"& navn &"','"& lastn &"','"& adr &"','"& zip &"','"& city &"','"& tlf &"','"& email &"','"& pass &"')") response.redirect("denneside.asp") end if
function SQLDate(fDate) if isDate(fDate) then SQLDate = right("0"& month(fDate)) &"-"& right("0"& day(fDate)) &"-"& year(fDate) end if end function
jamen så siger jeg mange tak... vil gerne prøve at undgå alle de der FrontPage komponenter....... Men mangler der ikke noget til at fortælle hvilken database der er til noget ala:
1. Ja der mangler en DB connection. 2. Nej. replace har intet med databasen at gøre. Den sikre bare teksten mod SQL-injections (tekst med ' tegnet i), som kan ødelægge din database.
Skal du opdatere en række, skal det gøres med update syntaxen: conn.execute("update Personer set Foedselsdag=#"& birth &"#, Fornavn='"& navn &"',Efternavn='"& adr &"'..osv.. where ID=123")
Her bestemmer du hvilken række eller rækker der skal opdateres med oplysningerne med where begrundelsen.
okey så DB sonnection sætter jeg bare hvor? i starten af <% eller i <body> ???
Jamen så siger jeg da mere end 1000 tak for din hjælp og ikke mindst din tid. Her får du lige de 50 point og så må du jo sige til hvis det slet ikke er nok til dette svar på et sådanne spørgsmål.
hmmm... jeg får bare den go gamle 500 error..! Men når jeg nu sidder og kigger på de koder FrontPage laver, så gør den jo brug af en såkaldt 'database-forbindelse' skal jeg lave noget lignende i starten når jeg laver 'opkaldet' til databasen?..
Og så får du altså lige min kode som den ser ud nu.. (din tilrettet)
Nu ved jeg ikke lige hvad der er sket, men jeg postede faktisk et spørgsmål mere lige bagefter det forrige... men det kommer så her:
For da jeg ikke kunne få 'opret' til at virke kastede jeg mig over projekt 'update' men også her meldes der fejl:
Microsoft OLE DB Provider for ODBC Drivers error '80040e14' [Microsoft][ODBC Microsoft Access Driver] Syntax error in UPDATE statement. /Apage/teste.asp, line 35
så her må jeg el igen lige vise min kode (sorry det bliver så langt!) - først henter jeg data som de er at finde i databasen og herefter en ny 'opringning' for at lave updateproceduren....
<% Response.Buffer = True %> <html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns="http://www.w3.org/TR/REC-html40"> <head> <meta http-equiv="Content-Language" content="da"> <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> <meta http-equiv="Page-Enter" content="blendTrans(Duration=0.2)"> <link rel="stylesheet" type="text/css" href="../Apage/style.css"> <title>HH3B |</title> </head> <body> <% Set Conn = Server.CreateObject("ADODB.Connection") DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("../LOGtest/testbase.mdb") Conn.Open DSN SQL = "Select * FROM Personer" Set rs = Conn.Execute(SQL) Response.Write "Fødselsdag " & rs("Foedselsdag") & "<br><br>Fornavn " & rs("Fornavn") & "<br><br>Efternavn " & rs("Efternavn") & "<br><br>" & rs("Adresse") & "<br><br>" & rs("Postnummer") & "<br><br>" & rs("By") & "<br><br>" & rs("Telefonnummer") & "<br><br>" & rs("Emailadresse") & "</a> " Conn.Close Set Conn = Nothing %> <% Set Conn = Server.CreateObject("ADODB.Connection") DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("../LOGtest/testbase.mdb") Conn.Open DSN if Request.querystring("mode") = "update" then birth = SQLDate(Request.Form("birth")) navn = replace(Request.Form("navn"),"'","''") lastn = replace(Request.Form("lastn"),"'","''") adr = replace(Request.Form("adr"),"'","''") zip = replace(Request.Form("zip"),"'","''") city = replace(Request.Form("city"),"'","''") tlf = replace(Request.Form("tlf"),"'","''") email = replace(Request.Form("email"),"'","''") sql = "update Personer set " [linie35]conn.execute("update Personer set Foedselsdag=#"& birth &"#, Fornavn='"& navn &"',Efternavn='"& lastn &"',Adresse='"& adr &"',Postnummer='"& zip &"',By='"& city &"',Telefonnummer='"& tlf &"',Emailadresse='"& email &"' where ID=123") response.redirect("teste.asp") end if function SQLDate(fDate) if isDate(fDate) then SQLDate = right("0"& month(fDate)) &"-"& right("0"& day(fDate)) &"-"& year(fDate) end if end function %> <div style="position: absolute; width: 100px; height: 100px; z-index: 1" id="lag1"> <form name="myForm" method="post" action="<%= scriptname %>?mode=update">
nej der kommer selvfølgelig flere rækker med forskellige personer, men det leder mig frem til mit næste spm omkring updaten....
For den side hvor en person kan update bliver kun vist når han har logget ind med sit login, så kan man ikke på en eller anden måde gemme login info og dermed sige at det er rækken hvor brugernavn = xxx der skal updateres???
ja der er en såkaldt brugeradgang der bliver sat = true og så har alle de 'hemmelige sider' en lille funktion der tjekker om denne værdi nu også er "true"...
men hvad har det med opret og/eller update at gøre? er lidt tabt lige nu?...
1. Du skal tjekke om brugerne er logget ind (det tjek har du) 2. Du skal kun vise denne brugeres oplysninger (mangler du et ID til) 3. Du skal kun gemme denne brugers oplysninger (mangler du et ID til) (4). Du skal have en admin side hvor administrator (dig) kan ændre alle brugers oplysninger (mangler du et adminID til)
Nej. Alle (næsten) tabeller i en database skal have en primærnøgle, for at overholde DB opbygningen. Dette vil i de fleste tilfælde være et felt med Autonummerering og være navngivet "ID". Hvilket også passer på din database.
Det ID bliver allerede gemt i session("ID"), når brugeren logger ind, så du har brugerens ID i denne variabel. Du kan altså bruge dette til at trække værdierne i database ud og gemme dem:
Hente data ud: set rs = conn.execute("select * from Personer where id="& session("ID"))
Updatere data: conn.execute("update Personer set Foedselsdag=#"& birth &"#, Fornavn='"& navn &"',Efternavn='"& lastn &"',Adresse='"& adr &"',Postnummer='"& zip &"',By='"& city &"',Telefonnummer='"& tlf &"',Emailadresse='"& email &"' where ID="& session("ID"))
det er lige præcis det jeg har - altså et felt ved navn ID der er autonr... prøver lige at indsætte det sidste du har skrevet og ser om det hjælper... mit webhotel har lige være nede igen... længe leve W3.. når nej nu har en anden jo overtaget igen igen ige.... n..
/kristian
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.