Hejsan Vad är det för databas? Hur uppdaterar du den? Testa att byta ut " mot "" eller \". Det är en mySQL databas. Jag uppdaterar den med koden: Testa skriv ut din SQL sträng och posta hit den, svårt att se vad som är fel annars... Ok, råkade fippla till det lite med uppdateringen så nu matas inte datumet in rätt... Ok, datumet behöver du inte ta från ASP utan det finns redan klart i databashanteraren och kan hämtas med hjälp av Now(). Tack för tipset om now(), funkade. Jadu, svårt att säga något mer eftersom man inte kan ta en titt på databasen... Nu har jag testat alla möjliga varianter, men den klipper fortfarande texten. En sak som kan orsaka fel är hur du försöker uppdatera databasen. Har bytt ut update koden med den du gav, men utan resultat, den klipper fortfarande vid "-tecken. Hur skrivs det ut om du använder följande kod? Matar in följande i "RuleText" : test "test" 'test' Hur hanterar du strängarna? Har provat både Replace(sträng, """", """"") & Vad ger följande kod för resultat då? Resultat: Men är det inte rätt då? Tycker det hela är mycket märkligt... Felet sitter nog där du sätter värdet på variablerna, eller ändrar på värdet... Ok, så här ser all kod ut: Detta skulle kunna vara ett problem med html. Hur ser formuläret ut som du matar in uppgifterna i? Din parameter RuleID är inte skyddad från SQL inject. Du bör kontrollera att det är ett tal med IsNumeric eller konvertera det till ett tal med CLng(). För att hindra någon från att köra SQL kod på din server. Anledningen till att jag använder dolda fält är för att detta är en "preview" sida. Problemet är nog att om texten innehåller Som Ola säger, det är nog där ditt fel uppstår... Tack för tipsen, ska prova direkt efter jobbet. JAg tror du har rätt Thomas, du han före mig. Problemet är nu löst.Tecknet " klipper mina strängar
Försöker att uppdatera ett fält i min databas. Men så fort teckent " finns med så klipps texten där.
Har testat med olika replace-varianter som """", """"", men utan resultat.
Någon som har tips på hur jag ska göra?Sv: Tecknet " klipper mina strängar
/johanSv:Tecknet " klipper mina strängar
strSQL = "Update set... bla bla Where tabell_Id = " & Id
Har testat båda varianterna du tipsade om men ingen av dessa fungerar...Sv: Tecknet " klipper mina strängar
Sv:Tecknet " klipper mina strängar
Någon aning om hur jag fixar det?
Koden ser ut så här:
strSQL = "UPDATE tblRules"
strSQL = strSQL & " SET RuleName = '" & RemoveBadChars(strRuleName) & "', "
strSQL = strSQL & " RuleText = '" & RemoveBadChars(strRuleText) & "', "
strSQL = strSQL & " RuleLastEdit = " & Now()
strSQL = strSQL & " WHERE RuleID = " & intRuleID
Set objRs = objConn.Execute(strSQL)
Sv: Tecknet " klipper mina strängar
Annars ser jag inga problem med koden utan den borde fungera, förutsatt att du i funktionen RemoveBadChars byter ut ' mot \', \ mot \\ och ´ mot \´
Tänk också på att ordningen är viktig, först byter du ut alla \ sedan resten.
<code>
strSQL = "UPDATE tblRules"
strSQL = strSQL & " SET RuleName = '" & RemoveBadChars(strRuleName) & "',"
strSQL = strSQL & " RuleText = '" & RemoveBadChars(strRuleText) & "',"
strSQL = strSQL & " RuleLastEdit = Now()"
strSQL = strSQL & " WHERE RuleID = " & intRuleID
Set objRs = objConn.Execute(strSQL)
</code>Sv:Tecknet " klipper mina strängar
Dock fungerar fortfarande inte funktionen.
Funderade på att göra något i stil med Replace(strText,chr(34),"[q]")
men även detta misslyckades...
EDIT:
Misstänker att det beror på datatypen i databasen.
På en annan sida som jag har kan jag mata in både ' och " utan några problem.
Det fältet har varChar det andra som strular är av typen text. Sv: Tecknet " klipper mina strängar
Men det borde fungera fint även om ett fält är varchar och ett är text...
Funktionen som ska göra en text valid ska se ut ungefär som följer.
<code>
Function GetValidString(strText)
strText = Replace(strText, "\","\\")
strText = Replace(strText, "'","\'")
strText = Replace(strText, "´","\´")
GetValidString = strText
End Function
</code>Sv:Tecknet " klipper mina strängar
Verkar inte bero på datatypen utan hur jag väljer att uppdatera texten.
Använder jag:
objRS("Field") = Text
objRS.Update
etc så fungerar det.
Använder jag:
Update set.... bla bla så går det ej.Sv: Tecknet " klipper mina strängar
Är ett tag sedan jag använde gammal ASP och har aldrig gjort det med en mySQL databas, men det verkar som att du försöker köra med samma kod som du använder för att hämta datat med en SELECT sats, vilket är fel.
En UPDATE och INSERT returnerar ingen reader av något slag och du ska använda ett Command object för att utföra kommandon.
<code>
Set cmd = Server.CreateObject("ADODB.Command")
cmd.ActiveConnection = "Connectionstring här"
cmd.CommandText = "UPDATE eller INSERT här"
cmd.Execute
cmd.ActiveConnection.Close
</code>
Som sagt, är nu ett tag sedan jag använde mig av vanlig ASP men tror nog att du ska göra ungefär som ovan om du vill updatera med hjälp av en SQL sats.Sv:Tecknet " klipper mina strängar
Blir galen på den här skiten.Sv: Tecknet " klipper mina strängar
<code>
Function GetValidString(strText)
strText = Replace(strText, "\","\\")
strText = Replace(strText, "'","\'")
strText = Replace(strText, """","\""")
strText = Replace(strText, "´","\´")
GetValidString = strText
End Function
strSQL = "UPDATE tblRules"
strSQL = strSQL & " SET RuleName = '" & GetValidString(strRuleName) & "',"
strSQL = strSQL & " RuleText = '" & GetValidString(strRuleText) & "',"
strSQL = strSQL & " RuleLastEdit = Now()"
strSQL = strSQL & " WHERE RuleID = " & intRuleID
Response.Write strSQL
Response.End
</code>Sv:Tecknet " klipper mina strängar
Response.Write:
UPDATE tblRules SET RuleName = 'Test Rule', RuleText = 'test ', RuleLastEdit = Now() WHERE RuleID = 13Sv: Tecknet " klipper mina strängar
Om du vill få en " i en sträng måste du skriva ut dubbla sådana ("")
Ex.
<code>
Dim strText
strText = "Test ""Test"" 'test'"
</code>Sv:Tecknet " klipper mina strängar
Replace(sträng, chr(32), chr(32) & chr(32)
Men inget biter...Sv: Tecknet " klipper mina strängar
<code>
Function GetValidString(strText)
strText = Replace(strText, "\","\\")
strText = Replace(strText, "'","\'")
strText = Replace(strText, "´","\´")
GetValidString = strText
End Function
strRuleName = "Test Rule"
strRuleText = "test ""test"" 'test'"
intRuleID = 13
strSQL = "UPDATE tblRules"
strSQL = strSQL & " SET RuleName = '" & GetValidString(strRuleName) & "',"
strSQL = strSQL & " RuleText = '" & GetValidString(strRuleText) & "',"
strSQL = strSQL & " RuleLastEdit = Now()"
strSQL = strSQL & " WHERE RuleID = " & intRuleID
Response.Write strSQL
Response.End
</code>Sv:Tecknet " klipper mina strängar
UPDATE tblRules SET RuleName = 'test rule', RuleText = 'test "test" \'test\'', RuleLastEdit = Now() WHERE RuleID = 14Sv: Tecknet " klipper mina strängar
Där är det ju ingenting som brutits...
Annars förstår jag inte problemet.Sv:Tecknet " klipper mina strängar
Om någon kommer på en lösning på det hela är jag MYCKET tacksam.
// MASv: Tecknet " klipper mina strängar
Posta koden där du sätter värdet...Sv:Tecknet " klipper mina strängar
----------------------------
"sidan.asp":
----------------------------
<%
RuleID = Request.Form("hidUpdRuleID")
RuleName = Request.Form("hidUpdRuleRuleName")
RuleText = Request.Form("hidUpdRuleText")
Dim UpdateRuleResult
UpdateRuleResult = UpdateRule(RuleID, RuleName, RuleText)
%>
----------------------------
Funktionen som uppdaterar (ska bytas till en sub)
----------------------------
<%
Function UpdateRule(intRuleID, strRuleName, strRuleText)
strSQL = "UPDATE tblRules"
strSQL = strSQL & " SET RuleName = '" & RemoveBadChars(strRuleName) & "',"
strSQL = strSQL & " RuleText = '" & RemoveBadChars(strRuleText) & "',"
strSQL = strSQL & " RuleLastEdit = Now()"
strSQL = strSQL & " WHERE RuleID = " & intRuleID
Set cmd = Server.CreateObject("ADODB.Command")
cmd.ActiveConnection = objConn
cmd.CommandText = strSQL
cmd.Execute
Set cmd = Nothing
End Function
%>
----------------------------
Funktionen som tar bort dumma tecken:
----------------------------
<%
Function RemoveBadChars(strTextToConvert)
strTextToConvert = Replace(strTextToConvert, "\","\\")
strTextToConvert = Replace(strTextToConvert, "'","\'")
strTextToConvert = Replace(strTextToConvert, "´","\´")
RemoveBadChars = strTextToConvert
End Function
%>
Sv: Tecknet " klipper mina strängar
Sv: Tecknet " klipper mina strängar
Sv:Tecknet " klipper mina strängar
Personen ser alltså bara texten och en spara samt en back knapp.
Går man tillbaka så kan man ändra något man tyckte var fult och när man väl väljer att spara så
är det dessa 3 dolda fält som skickas
<form action="o_rules_save.asp" method="post" name="frmUpdateAddRule">
<input name="hidUpdRuleID" type="hidden" value="<%= RuleID %>">
<input name="hidUpdRuleRuleName" type="hidden" value="<%= RuleName %>">
<input name="hidUpdRuleText" type="hidden" value="<%= RuleTextClean %>">
Samt en knapp som "submitar"
</form>Sv: Tecknet " klipper mina strängar
"
så blir resultatet i din html:
<input name="hidUpdRuleText" type="hidden" value="här kommer det ett" och detta hamnar utanför">
Du löser detta genom att ersätta " med "e;
Replace(strinput, """", """)
eller med JS på klientsidan: .value = escape(str);
(de andra förslagen om att fixa SQL-strängar och se upp med SQL-inject gäller ändå!)Sv: Tecknet " klipper mina strängar
Men du kan skriva Server.HTMLEncode(RuleName) istället så ersätts alla "dåliga" tecken för HTML.
<form action="o_rules_save.asp" method="post" name="frmUpdateAddRule">
<input name="hidUpdRuleID" type="hidden" value="<%= Server.HTMLEncode(RuleID) %>">
<input name="hidUpdRuleRuleName" type="hidden" value="<%= Server.HTMLEncode(RuleName) %>">
<input name="hidUpdRuleText" type="hidden" value="<%= Server.HTMLEncode(RuleTextClean) %>">
Samt en knapp som "submitar"
</form>
Sv:Tecknet " klipper mina strängar
Älskar er alla Pellesoftare.Sv:Tecknet " klipper mina strängar
Vill tälläg att man altid bör formatera värden från databasen innan man skriver dem till svaret.
Om värdet ingår i en url bör urlEncode användas:
<FORM action="test.asp?id=<%=Server.URLEncode(rs("id"))%>">
Sv: Tecknet " klipper mina strängar
Förlåt att jag inte svarat tidigare.
Det funkade med HTMLEncode, jag hade bara satt det på fel ställe.
Skulle vara på en föregående sida för att det skulle fungera.
Tack för all hjälp, jag är skyldiga er alla en stor tjänst.
// Mikael