Copy link to clipboard
Copied
I am using CF and MySQL and have a simple form to upload. The form requests an URL, however, if the URL contains and ampersand, I get an error. How can I pass the information form a text input field into MySQL and have it parse the ampersand?
Thanks in advance
You need to escape any special XML characters < > ' " &. You can do this using the built in function XmlFormat() around your variables, or else wrap each value with <![CDATA[...]]>
<cfloop query="GetNews">
<item>
<title>#XmlFormat(GetNews.art_title)#</title>
<link>#XmlFormat(GetNews.link_one)#</link>
<description>#XmlFormat(GetNews.art_description)#</description>
<date>#LSDateFormat(GetNews.art_timestamp,'MM/DD')#</date>
<pubDate>#LSDateFormat(GetNews.art_tim
Copy link to clipboard
Copied
I am a confused. There are 4 possible things that could be going on here.
1) You say upload, but what you seem to be doing is using a form to submit a line of text.
2) Uploading is normally for a file, not for text. The form field one uses for uploading is of type file, not text.
3) An upload form requests the path to a file on the client, not a URL.
4) What error message do you get? Coldfusion or MySQL?
How can I pass the information form a text input field into MySQL
I used the following code to save the text http://127.0.0.1:8501/workspace/tests/page4763.cfm?a=1234&b=5678, without any problems.
<!--- test_tbl has a single column, myString[type varchar(200)]--->
<cfif isdefined("form.x")>
<cfquery name="q" datasource="myDSN">
insert into test_tbl(myString) values('#form.x#')
</cfquery>
</cfif>
<cfoutput><form action="#cgi.SCRIPT_NAME#" method="post"></cfoutput>
<input name="x" type="text">
<input name="s" type="submit" value="send">
</form>
Copy link to clipboard
Copied
Sorry for the confusuin. I meant submit, not upload. In a simple form, this is my line of code for the field:
<input type="text" name="url" value="" size="60" />
Upon submit, it would input the URL string into the URL field in the MySQL db. However, if the URL has an ampersand, for example (Fake URL for demonstration): http://forums.adobe.com/post!reply.jspa?message=2280267&2343, I wpould get the following CF error upon submition:
An error occured while Parsing an XML document. | |
The reference to entity "job" must end with the ';' delimiter. |
However, as long as I change all the & to & before submitting, all works fine. Then if I go and update it later, I the URL changes the & to & and I cannot submit the changes without changing the & back to &
Therefore, I figure there is an interpretation issue between MySQL and CF somewhere since it looks like MySQL recognizes & well enough to change it to & and spit it back out. MySQL field type is "text" and the collation is "latin1_swedish_ci"
Copy link to clipboard
Copied
I know I am an idiot... Forgot to mention that it must not be the CF/MySQL, BUT after I insert, I have it go to another cfm page to create an XML document, and so the parsing error must com from that.
Here's my Code to parse the XML document:
<cfquery name="GetNews" datasource="illegal">
SELECT *
FROM articles
ORDER BY art_timestamp DESC
</cfquery>
<cfoutput>
<cfxml variable="XMLDoc">
<?xml version="1.0" encoding="ISO-8859-1"?>
<rss xmlns:dc="http://purl.org/dc/elements/1.1" version="2.0">
<channel>
<title>News\</title>
<link>
http://www.mylink.com
</link>
<description>Get a daily News.</description>
<language>en-US</language>
<copyright>Copyright 2009, Office.</copyright>
<managingEditor />
<webMaster>Jojo@gmail.com</webMaster>
<pubDate>1 Aug 2009 0:00:00 GMT</pubDate>
<docs>http://blogs.law.harvard.edu/tech/rss</docs>
<ttl>240</ttl>
<cfloop query="GetNews">
<item>
<title>#GetNews.art_title#</title>
<link>
#GetNews.link_one#
</link>
<description>#GetNews.art_description#</description>
<date>#LSDateFormat(GetNews.art_timestamp,'MM/DD')#</date>
<pubDate>#LSDateFormat(GetNews.art_timestamp,'DDD, DD MMM, YYYY')#</pubDate>
</item>
</cfloop>
</channel>
</rss>
</cfxml>
</cfoutput>
<cfdump var="#XMLDoc#">
<cfset XMLText=ToString(XMLDoc)>
<cffile action="write" file="d:\home\sites\illegalimmigrationjournal.com\wwwroot\aznr\news\index.xml" output="#XMLText#">
<cflocation url="upload.cfm">
So how, in my CF code do I make the XML parse the ampersand?
Copy link to clipboard
Copied
The value encoding="ISO-8859-1" jumped out at me. What happens when you do the usual encoding="UTF-8"?
Copy link to clipboard
Copied
I think it most likely has something to do with the encoding, but the other way around. I have another XML file on the same server that works correctly (created another using it's pattern) and it uses ISO-8859-1 and I do not have an error when inserting in the db and parsing the XML.
So paying attention to the encoding, When I parse the XML with the code above, and when the XML document is saved the parser actually writes UTF-8 instead of ISO-8859-1. I do not know how CF is defaulting to UTF-8 or why. What in my coding above tells it to, when clearly it says that it shoiuld print ISO-8859-1?
This has me baffled.Something is dynamically changing the way I save stuff. I am assuming CF since both XML pages reside on the same server and both are parsed.
Copy link to clipboard
Copied
So paying attention to the encoding, When I parse the XML with the code above, and when the XML document is saved the parser actually writes UTF-8 instead of ISO-8859-1. I do not know how CF is defaulting to UTF-8 or why. What in my coding above tells it to, when clearly it says that it shoiuld print ISO-8859-1?
You don't have to tell Coldfusion anything. As you should expect, Coldfusion defaults to its default encoding, which is UTF-8.
Copy link to clipboard
Copied
You need to escape any special XML characters < > ' " &. You can do this using the built in function XmlFormat() around your variables, or else wrap each value with <![CDATA[...]]>
<cfloop query="GetNews">
<item>
<title>#XmlFormat(GetNews.art_title)#</title>
<link>#XmlFormat(GetNews.link_one)#</link>
<description>#XmlFormat(GetNews.art_description)#</description>
<date>#LSDateFormat(GetNews.art_timestamp,'MM/DD')#</date>
<pubDate>#LSDateFormat(GetNews.art_timestamp,'DDD, DD MMM, YYYY')#</pubDate>
</item>
</cfloop>
OR
<cfloop query="GetNews">
<item>
<title><![CDATA[#GetNews.art_title#]]></title>
<link><![CDATA[#GetNews.link_one#]]></link>
<description><![CDATA[#GetNews.art_description#]]></description>
<date>#LSDateFormat(GetNews.art_timestamp,'MM/DD')#</date>
<pubDate>#LSDateFormat(GetNews.art_timestamp,'DDD, DD MMM, YYYY')#</pubDate>
</item>
</cfloop>
-JD
Copy link to clipboard
Copied
You're AWESOME! I used the XmlFormat method. The other didn't seem to work, but problem solved!
Thanks to BKBK for helping as well!
Find more inspiration, events, and resources on the new Adobe Community
Explore Now