Hvorfor virker denne kode ikke? <html> <title>Indsætte data i databasen</title> <head> </head> <body> <% ' Databaseforbindelse - husk at angive sti til din database Set Conn = Server.CreateObject("ADODB.Connection") DSN = "DRIVER={Microsoft Access Driver (*.mdb)}; " DSN = DSN & "DBQ=" & Server.MapPath("/db/brugersystem.mdb") Conn.Open DSN
Det er nok alder som er et tal i databasen og tom i formularen når den bliver postet til lagring i databasen. Jeg vil til hver en tid anbefale dig at foretage validering af data inden du gemmer dem. Det sparer dig for typeproblemer som dette...
Du bør som udgangspunkt checke på serveren om felter du lægger i databasen indeholder valide data og mindst om de kan indsættes uden database typefejl. Desuden er det en god idé at validere på klienten (vha. javascript) inden formularer/data sendes til serveren.
Du kan checke for numeriske data på serveren med isNumeric, f.eks.:
if not isNumeric(Request.Form("Alder")) then ' TODO: Fejlmeld og undlad at gemme data else strSQL = "Insert into bruger (Fornavn, Efternavn, Alder) " & _ "values('" & replace(Request.Form("Fornavn"),"'","'') & "', " & _ "'"& replace(Request.Form("Efternavn"),"'","''") &"', " & _ Request.Form("Alder") & ")" Conn.Execute(strSQL) end if
Synes godt om
Slettet bruger
09. maj 2006 - 13:55#15
Virker:P
Men så vil jeg lige spørge om noget. Hvordan gør man at det skal være tal man skrive. Fx. Hvis man skal skrive sin alder
Umiddelbart er der ikke nogen grund til at rette alder, da det logisk set er et tal. Det jeg mener (som illustreret ovenfor) er at du skal sørge for at data har den rigtige typen inden du indsætter dem i databasen, f.eks. at numeriske data rent faktisk er numeriske og datoer rent faktisk er valide datoer (kan checkes med isDate-funktionen).
Desuden bør du sikre dig at der ikke er apostroffer i tekstfelter, da dette i værste fald kan give mere adgang til din database end du ønsker. Typisk klarer man problemet med apostroffer ved at udskifte dem med to af slagsen (som i eksemplet ovenfor), da databasen så opfatter dem som en apostrof i teksten og ikke som en tekstafgrænser i SQL-sætningen...
Well, det er egentlig et spørgsmål til javascript-kategorien, men det er noget med at checke input i et felt hver gang brugeren trykker og så sortere ugyldige tegn fra. Jeg kan ikke lige hoste en testet og færdig version op, men det kunne se sådan ud:
<script type="text/javascript"> function checkNumber(e) { var evt = e ? e : event; if(evt.keyCode > 47 && evt.keyCode < 58 || (evt.keyCode > 34 && evt.keyCode < 47) || evt.keyCode == 8) return true; else return false; } </script>
Jeg erkender at der er skudt med spredhagl i karakterintervallet 35-46, men du kan måske selv finde ud af hvilke karakterkoder der er gyldige - det drejer sig om at tillade Home, End, pil venstre, pil højre, Insert og Delete. Desuden skal den kun tillade karakterer fra 48-57 og ikke 48-58 som jeg har gjort...
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.