R Roosweb Medlem sedan aug. 2006 79 inlägg Frågan 11 mars 2007 15:58 #1 Hej igen, sitter o knåpar på ett script men får upp detta felmeddelande:
Microsoft JET Database Engine error '80040e07'
Data type mismatch in criteria expression.
kontakta.asp, line 109
Här är koden:
http://www.aspsidan.se/code/default.asp?c=6853
Jag förstår inte vad jag gjort för fel :/ någon som vet?
P Peter S Medlem sedan dec. 2002 5 483 inlägg Felmeddelandet säger att det är i kontakta.asp som felet ligger. Länken går till default.asp.
R Roosweb Medlem sedan aug. 2006 79 inlägg Här är koden:
<form method="post" action="?page=skicka">
<span class="rubrik4">Namn:</span><br />
<input type="text" name="namn" size="30"><br />
<span class="rubrik4">Efternman:</span><br />
<input type="text" name="efternamn" size="30"><br />
<span class="rubrik4">Eventuell Hemsida:</span><br />
<input type="text" name="hemsida" size="30"><br />
<span class="rubrik4">Eventuellt medlemsnamn:</span><br />
<input type="text" name="medlemsnamn" size="30"><br />
<span class="rubrik4">Kategori:</span><br />
<select name="kategori">
<option>Bannerbyte</option>
<option>Funnen Bugg</option>
<option>Ang. Siten</option>
<option>Tips</option>
<option>Önskning om innehåll</option>
<option>Övrigt</option>
</select>
<p></p>
<span class="rubrik4">Meddelandet:</span><br />
<textarea name="inlagg" cols="50" rows="10"></textarea>
<p></p>
<input type="submit" value="Skicka mail" name="skickamail">
<p> </p>
</form>
<%
If Request.Querystring("page")="skicka" Then
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("kontakta/kontakta1.mdb")
tid = now
strSQL="INSERT INTO tblKontakta(Namn, Datum, Efternamn, Hemsida, Medlemsnamn, Kategori, Meddelandet) VALUES('"& Request.Form("namn") &"', '"& tid &"', '"& Request.Form("efternamn") &"', '"& Request.Form("hemsida") &"', '"& Request.Form("medlemsnamn") &"', '"& Request.Form("kategori") &"', '"& Request.Form("inlagg") &"')"
Connect.Execute(strSQL)
' Stänger DB koppling
Connect.Close
Set Connect = Nothing
Response.Redirect("?page=skickat")
End If
%>
<%
If Request.Querystring("page")="skickat" Then
Response.Write ("Ditt meddelande har blivigt skickat och vi svarar snart!")
End If
%>
Jag ser inget fel :/
P Peter S Medlem sedan dec. 2002 5 483 inlägg Det där är väl samma kod som i länken ovan? Ej kontakta.asp alltså.
E emission Medlem sedan dec. 1999 6 721 inlägg Japp, du måste visa hur kontakta.asp ser ut, men innan du gör det föreslår jag att du lär lite om "SQL injection" (sök här på forumet).
Man ska ALDRIG stoppa in värden från request (.form, eller .querystring) direkt i en SQL-sträng.
Jag är rätt tjatig om detta, men det är viktigt som f-n.
R Roosweb Medlem sedan aug. 2006 79 inlägg Okej jag läste lite om SQL injections och fick till det, och när jag fick till det så fungara scriptet också hehe, så tack!
M Maadmax Medlem sedan juli 2006 59 inlägg Varför inte bara göra såhär? :
<%
If Request.Querystring("page")="skicka" Then
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("kontakta/kontakta1.mdb")
tid = now
strSQL="INSERT INTO tblKontakta(Namn, Datum, Efternamn, Hemsida, Medlemsnamn, Kategori, Meddelandet) VALUES('"& Request.Form("namn") &"', '"& tid &"', '"& Request.Form("efternamn") &"', '"& Request.Form("hemsida") &"', '"& Request.Form("medlemsnamn") &"', '"& Request.Form("kategori") &"', '"& Request.Form("inlagg") &"')"
Connect.Execute(strSQL)
' Stänger DB koppling
Connect.Close
Set Connect = Nothing
Response.Write ("Ditt meddelande skickades korrekt och vi svarar snart!")
End If
%>
spango Medlem sedan juni 2000 8 205 inlägg
Maadmax skrev:
Varför inte bara göra såhär?
Därför att det öppnar en säkerhetslucka lika stor som Mordors portar, som emission påpekade.
emission skrev:
Man ska ALDRIG stoppa in värden från request (.form, eller .querystring) direkt i en SQL-sträng.
@nders Medlem sedan juni 2000 32 967 inlägg
Varför inte bara göra såhär? :
För att man ALLTID måste tänka på SQL injection.
Du skall för övrigt också tänka på att posta kod inom [kod]-taggar.
headbug Medlem sedan sep. 2006 867 inlägg Peter S, är inte http://www.aspsidan.se/code/default.asp?c=6853 en kodvisar-tjänst?! Har inget att göra med att hans trasiga sida hette kontakta.asp :)
Peter S skrev:
Felmeddelandet säger att det är i kontakta.asp som felet ligger. Länken går till default.asp.
M Maadmax Medlem sedan juli 2006 59 inlägg jo jag vet, men som man ser i hans kod så har han många ASP-taggar och det slöar ner servern rejält... SQL-injections går ju att lösa med en enkel function och sen köra tex: sqlskydd(strääääääng) , men det var inte det jag syftade på!
Maadmax skrev:
jo jag vet, men som man ser i hans kod så har han många ASP-taggar och det slöar ner servern rejält.
en extra gör knappast någon skillnad ;) men SQL strängen ser inte säker ut, men tur är det att du kan fixa det snabbt och relativt smärtfritt med de tips du har fått ;)
R Roosweb Medlem sedan aug. 2006 79 inlägg Nepp och jag tackar för detta :)