webForumDet fria alternativet

SQL med konstiga tecken ?

8 svar · 322 visningar · startad av Pellefant

PellefantMedlem sedan maj 20023 372 inlägg
#1

Hej!

Jag har denna

Det fungerar bra, men är det ett "&" eller ett " ' "(tex A & B's Port City Tatoo) i variabeln name(och då även Name i databasen), så fungerar det inte alls, inget felmeddelande, men det blir ingen träff, trots att det finns en rad i databasen som passar.

<%
SQL = "SELECT * FROM Brunswick WHERE Name = '" & name & "' AND City = '" & city & "' AND Phone = '" & phone  & "'"

ASP, Access

@ndersMedlem sedan juni 200032 969 inlägg
#2

Fråga 1: har du html-encodat den texten du stoppat in i databasen? Gör inte det.
Fråga 2: har du escapeat apostrofer innan du ställer SQL-frågan?
Fråga 3: hur ser den färdiga SQL-frågan ut?`

Mvh,

PellefantMedlem sedan maj 20023 372 inlägg
#3

Hej!

Tack för frågorna. :)

Svar 1:
Nej, inte om jag stoppar i nya data.
Databasen är befintlig, men det ser "vanligt" ut om jag tittar i databasfälten, dvs bara vanliga bokstäver och tecken, som det ser ut på skärmen.

Svar 2:
Måste erkänna att jag inte förstår frågan, så det har jag troligtvis inte gjort, det ser ut tex såhär:

name = Request.QueryString("name")

Fråga3:

För en fungerande utan & eller ' ser det ut såhär

SQL-query: SELECT * FROM Brunswick WHERE Name = 'A1 Repossessions' AND City = 'Brun' AND Phone = '264-1234'

För en med ' ser det ut såhär (ska vara: Aaron's Sales & Lease Ownership)

SQL-query: SELECT * FROM Brunswick WHERE Name = 'Aaron's Sales ' AND City = '' AND Phone = '554-1234'

Och för en med & (ska vara: A G Edwards & Sons Inc )

SQL-query: SELECT * FROM Brunswick WHERE Name = 'A G Edwards ' AND City = '' AND Phone = '261-1234'
@ndersMedlem sedan juni 200032 969 inlägg
#4

1: oki!
2: Du måste byta ut alla förekomster av apostrof mot två. Det är för att inte SQL-frågan skall förstöras, då en enkel apostrof tolkas som slut på strängen. Du lägger ju in alla text-värden mellan apostrofer.

name = Replace(Request.QueryString("name"), "'", "''")

Detta förändrar inte datat, utan ser endast till att strängen tolkas korrekt i SQL-frågan.
3: Det där med & förstår jag inte. Det är inget speciellt med &.

Jag slänger fram en till fråga:
4: Du har väl inte med On Error Resume Next i koden?

Mvh,

PellefantMedlem sedan maj 20023 372 inlägg
#5

Hej igen! :)

lade in din kod, så nu funkar det med: ' :)

Jodå, nåt speciellt är det med "&", jag lovar :)

4
Nej, nån sån finns inte. Lägger in hela koden nedan, kanske har jag med något annat dumt.

<% Response.Buffer = True %>
<!-- #include file="adovbs.inc" -->

<BODY bgcolor="#FFFFCC" alink="#00000" vlink="#00000">

<%Category=request.form("category")%>

<%
Set Databas = Server.CreateObject("ADODB.Connection")
Databas.Open "driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath("phone_numbers.mdb")
Set RecSet = Server.CreateObject("ADODB.Recordset")

name = Replace(Request.QueryString("name"), "'", "''")
city = Request.QueryString("city") 
phone = Request.QueryString("phone") 

SQL = "SELECT * FROM Brunswick WHERE Name = '" & name & "' AND City = '" & city & "' AND Phone = '" & phone  & "'" 
%>

SQL-query: <%=SQL%>

<% RecSet.Open SQL, Databas, 3, 3 %>

<TABLE>
<TR>
	<TD>Type</TD>
	<TD>
<FORM METHOD="POST" ACTION="addcrsedit.asp">

<select name="typ">
<%if RecSet("Type")="B" then %>
	<option selected>B</option>
<%else%>
    <option>B</option>
<%end if%>

<%if RecSet("Type")="R" then %>
	<option selected>R</option>
<%else%>
    <option>R</option>
<%end if%>
</select>
	
</TD>
	</tr>
<tr>
	
	<td>
Address
	</td>

	<TD>
	<TEXTAREA NAME="address" ROWS="3" COLS="20"><%=RecSet("Address")%></TEXTAREA></TD>
</TR>
<TR>
	<TD>City</TD>
	<TD><INPUT TYPE="text" NAME="city" value="<%=RecSet("City")%>"></TD>
</TR>
<TR>
	<TD>State</TD>
	<TD>
	
		<select name="state">
 <option selected>MO</option>
<option>NY</option>
<option>LV</option>
</select>
	
	</TD>
</TR>
<TR>
	<TD>Zip</TD>
	<TD><INPUT TYPE="text" NAME="zip" value="<%=RecSet("Zip")%>" ></TD>
</TR>
<TR>
	<TD>Phone</TD>
	<TD><INPUT TYPE="text" NAME="phone" value="<%=RecSet("Phone")%>" ></TD>
</TR>
<TR>
	<TD>Area_Code</TD>
	<TD><INPUT TYPE="text" NAME="areacode" value="<%=RecSet("Area_Code")%>" ></TD>
</TR>
<TR>
	<TD>URL</TD>
	<TD><INPUT TYPE="text" NAME="url" value="<%=RecSet("URL")%>" ></TD>
</TR>
<TR>
<TD>Name</TD>
	<TD><INPUT TYPE="text" NAME="name" value="<%=RecSet("Name")%>" ></TD>

<%RecSet.Close 
	Databas.Close %>

</TR>
<TR>
	<TD>

<p>
<INPUT TYPE="submit" value="Edit">
</TD>

</TR>
</TABLE>

</FORM>

</HTML>
</BODY>
LarsGMedlem sedan dec. 200012 464 inlägg
#6

Att du får problem med & har inte med SQL att göra utan beror på att du skickar värdet med GET (request.querystring) där & har en viss betydelse. Om du använde POST (request.form) så blir det lugnt. Det går väl att ordna med någon HTML/URL encoding men POST är bättre.

PellefantMedlem sedan maj 20023 372 inlägg
#7

Hej!

Upptäckte det just, det står crsedit.asp?name=A1%20Towing%20&%20Recovery i querystringen....

dvs & förvanskas

Ska byta till request.form....återkommer

PellefantMedlem sedan maj 20023 372 inlägg
#8

Oki, nu fungerar det, gjorde det utan querystring.

Sorry @nders att jag inte såg från början i url:en att & tecknet förvanskades....

Skickar:
<FORM METHOD="POST" ACTION="crsedit.asp">
<input type=hidden name="name" value="<%=RecSet("Name")%>">
<input type=hidden name="city" value="<%=RecSet("city")%>">
<input type="hidden" name="phone" value="<%=RecSet("phone")%>">
<input type="image" src="edit.gif" WIDTH="18" HEIGHT="14" BORDER=0 ALT="Edit">
</FORM>

Tar emot:
name = Replace(Request.form("name"), "'", "''")
city = Request.form("city")
phone = Request.form("phone")

Tack för all hjälp!!!

@ndersMedlem sedan juni 200032 969 inlägg
#9

Se till att escape:a apostrof i alla värden som ska in i SQL-frågor, och inte bara name-fältet. Det bästa är om du gör en liten funktion, så blir det lättare att kalla på.

Function FixString(strText)
     strText = Replace(strText, "'", "''")
     FixString = strText
End Function

name = FixString(Request.form("name")) 
city = FixString(Request.form("city"))
phone = FixString(Request.form("phone"))

Mvh,

137 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)