webForumDet fria alternativet

preblem med uppdatering i databasen vid användning av Replace

ASP

2 svar · 226 visningar · startad av Sico

Medlem sedan maj 20002 597 inlägg
Frågan#1

Sålänge jag inte använder någon smiley så funkar det att lägga till posten perfekt. Men använder jag det blir det fel.
lite kod samt felmeddelande...

		din_text = Request.Form("txtText")
		byta_fran = ":),:o,;),:d,:h,:(,x(,"& vbcrlf &""
		byta_mot = "<img src='guestbook/images/1.gif'>,<img src='guestbook/images/2.gif'>,<img src='guestbook/images/3.gif'>,"&_
			   "<img src='guestbook/images/4.gif'>,<img src='guestbook/images/5.gif'>,<img src='guestbook/images/6.gif'>,"&_ 
			   "<img src='guestbook/images/7.gif'>,<br>"

		byta_fran_arr = Split(byta_fran,",")
		byta_mot_arr = Split(byta_mot,",")

		For i = 0 To Ubound(byta_fran_arr)
		din_text = Replace(din_text,byta_fran_arr(i),byta_mot_arr(i))
		Next

	Text = din_text
	
	strSQL = "INSERT INTO t_Guestbook " _
	& "( f_Name, f_Mail, f_Url, f_Date, f_Time, f_Text ) " _
	& "VALUES( '" & Namn & "', '" & Mail & "', '" & Url & "', '" & Datum & "', '" & Tid & "', '" & Text & "' )"

	[b]Connect.Execute( strSQL )[/b]

så blir det fel..

Error Type:
Microsoft JET Database Engine (0x80040E14)
Syntax error (missing operator) in query expression ''<img src='guestbook/images/1.gif'>''.
/webcam2/guestbook/edit.asp, line 46

Men det funkar om man gör såhär...

	Set RSConn = Server.CreateObject("ADODB.Recordset")

	SQL = "SELECT * FROM t_Guestbook"

	RSConn.Open SQL, Connect, 1, 2

		din_text = Request.Form("txtText")
		byta_fran = ":),:o,;),:d,:h,:(,x(,"& vbcrlf &""
		byta_mot = "<img src='images/1.gif'>,<img src='images/2.gif'>,<img src='images/3.gif'>,"&_
			   "<img src='images/4.gif'>,<img src='images/5.gif'>,<img src='images/6.gif'>,"&_ 
			   "<img src='images/7.gif'>,<br>"
		byta_fran_arr = Split(byta_fran,",")
		byta_mot_arr = Split(byta_mot,",")

		For i = 0 To Ubound(byta_fran_arr)
		din_text = Replace(din_text,byta_fran_arr(i),byta_mot_arr(i))
		Next

	RSConn("f_Text") = din_text

	RSConn.Update

	RSConn.Close

Jag frågar varför? göra en Replace till <br> funkar ju inte men inte dom små bilderna...

Medlem sedan juni 200032 967 inlägg
#2

Du använder apostrofer i dina img-taggar. Vad används apostrofer till i SQL? Jo, att omsluta strängar. Dvs, första gången en apostrof råkas på inuti din sträng stängs strängen i din SQL-fråga och resten skapar syntax-fel.

Tips: Gör inte ersättningarna förrän när du visar upp informationen. Om du håller på med en massa ersättningar så dels tar informationen större plats i databasen, och dels förstör du eventuella databassökningar genom att lägga in en massa html i databasen.

Om du ändå ska göra ersättningarna innan du slänger in saker till databasen, så får du se till att antingen escapea de apostrofer du använder i img-taggarna, eller använda citationstecken i den koden.

Du skall dock hur som helst escapea apostrofer i den text du ska lagra till databasen, annars får du syntaxfel så fort någon har skrivit en apostrof i texten du skall lagra i databasen.

din_text = [b]Replace (Request.Form("txtText"), "'", "''")[/b]
		byta_fran = ":),:o,;),:d,:h,:(,x(,"& vbcrlf &""
		byta_mot = "<img src=""guestbook/images/1.gif"">,<img src=""guestbook/images/2.gif"">,<img src=""guestbook/images/3.gif"">,"&_
			   "<img src=""guestbook/images/4.gif"">,<img src=""guestbook/images/5.gif"">,<img src=""guestbook/images/6.gif"">,"&_ 
			   "<img src=""guestbook/images/7.gif"">,<br>"

		byta_fran_arr = Split(byta_fran,",")
		byta_mot_arr = Split(byta_mot,",")

		For i = 0 To Ubound(byta_fran_arr)
		din_text = Replace(din_text,byta_fran_arr(i),byta_mot_arr(i))
		Next

	Text = din_text
	
	strSQL = "INSERT INTO t_Guestbook " _
	& "( f_Name, f_Mail, f_Url, f_Date, f_Time, f_Text ) " _
	& "VALUES( '" & Namn & "', '" & Mail & "', '" & Url & "', '" & Datum & "', '" & Tid & "', '" & Text & "' )"

	Connect.Execute strSQL, , 128

För att spara lite prestanda i exekveringen lade jag också till växeln adExecuteNoRecords, för att se till att inget recordset skapas överhuvudtaget.

Som sagt, flytta gärna på smileyersättningen tills när du visar upp informationen.

Mvh,

Mvh,

Medlem sedan maj 20002 597 inlägg
#3

oj missade det. Jag ska nog fixa till så det ersätts vid presentationen istället. Tack snabel-anders :)

266 ms totalt · 4 externa anrop · v20260731065814-full.6fe65c25
118 ms — deklarationer (db)
0 ms — hämta statistik (cache)
137 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)