Avatar billede Slettet bruger
08. maj 2006 - 20:49 Der er 19 kommentarer

Min kode virker ikke??

Dav

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

' SQL sætning opbygges
strSQL = "Insert into bruger (Fornavn, Efternavn, Alder) values('" & Request.Form("Fornavn") & "', '"& Request.Form("Efternavn") &"', '"& Request.Form("Alder") &"')"
' SQL sætning eksekveres
Conn.Execute(strSQL)

' Luk databaseforbindelse
Conn.Close
Set Conn = Nothing
%>
<form action="opret.asp" method="post">
<input type="text" name="Fornavn"><br>
<input type="text" name="Efternavn"><br>
<input type="text" name="Alder"><br>
<input type="submit" value="Gem">
</form>
<h1>Databasen er opdateret!</h1>
</body>
</html>
Avatar billede trekkies Juniormester
08. maj 2006 - 21:00 #1
Får du en fejl meddelse?
Avatar billede Slettet bruger
08. maj 2006 - 21:03 #2
Nej.. Siden gider bare ikke vises.. www.leol.dk/opret.asp
Avatar billede trekkies Juniormester
08. maj 2006 - 21:05 #3
Hvis jeg åbner linket som du skriver, så kan jeg se at den ikke kan finde databasen, undersøg om stien er korrekt og at databasen ligger på serveren.
Avatar billede Slettet bruger
08. maj 2006 - 21:30 #4
Har lige prøvet men den ligger der og har prøvet at rette stien men den var rigtig. Den virker stadigvæk ikke
Avatar billede sneakraid Nybegynder
08. maj 2006 - 21:36 #5
Det ser nærmere ud som om der er fejl i din sql sætning (linie 13-14). Kan du vise os den? :)
Avatar billede softspot Forsker
08. maj 2006 - 22:00 #6
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...
Avatar billede thesurfer Nybegynder
09. maj 2006 - 00:15 #7
"Data type mismatch in criteria expression" = fejl i typerne..

- Det er typisk fordi du prøver på at sætte et tal ind i streng-felt, eller omvendt.

Som softspot skriver, er "alder" nok af typen "tal" i databasen.. så skal der ikke '-tegn undenom værdien:

, " & Request.Form("Alder") & ")"
Avatar billede Slettet bruger
09. maj 2006 - 13:24 #8
strSQL = "Insert into bruger (Fornavn, Efternavn, Alder) values('" & Request.Form("Fornavn") & "', '"& Request.Form("Efternavn") &"', " & Request.Form("Alder") & ")"
Conn.Execute(strSQL)

Min  13-14 kode
Avatar billede softspot Forsker
09. maj 2006 - 13:31 #9
...og det fungerer stadig ikke, eller hvordan?
Avatar billede Slettet bruger
09. maj 2006 - 13:40 #10
www.leol.dk/opret.asp der kan du se at det ikke virker ikke
Avatar billede sneakraid Nybegynder
09. maj 2006 - 13:44 #11
Sikker på at der bliver hældt noget i sql sætningen. Prøv det her, så vi kan se hvad der bliver indsat.

strSQL = "Insert into bruger (Fornavn, Efternavn, Alder) values('" & Request.Form("Fornavn") & "', '"& Request.Form("Efternavn") &"', " & Request.Form("Alder") & ")"
'Conn.Execute(strSQL)
Response.Write(strSQL)
Avatar billede softspot Forsker
09. maj 2006 - 13:48 #12
Har du lavet validering på alder, som foreslået tidligere?
Avatar billede Slettet bruger
09. maj 2006 - 13:51 #13
Hvad mener du? Altså rette databasen?
Avatar billede softspot Forsker
09. maj 2006 - 13:52 #14
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
Avatar billede 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
Avatar billede softspot Forsker
09. maj 2006 - 13:57 #16
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...
Avatar billede softspot Forsker
09. maj 2006 - 14:09 #17
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>

<form>
  <input type="text" name="alder" onkeydown="return checkNumber(event)">
</form>
Avatar billede softspot Forsker
09. maj 2006 - 14:23 #18
og denne her version skulle så være mere crossbrowser anvendelig:

<script type="text/javascript">
function checkNumber(e) {
  var evt = e ? e : event;
  var code = (evt.charCode && evt.charCode != 0) ? evt.charCode : (evt.keyCode ? evt.keyCode : evt.which);
  if((code > 47 && code < 58) || (code > 34 && code < 47) || code == 8)
    return true;
  else {
    if(evt.preventDefault)
      evt.preventDefault();
    else if(evt.returnValue)
      evt.returnValue = false;
    else
      return false;
  }
}
</script>

<form>
  Alder: <input type="text" name="alder" onkeypress="return checkNumber(event)">
</form>
Avatar billede softspot Forsker
09. maj 2006 - 14:28 #19
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...
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