In the first iteration of this entry, I referred to the two approaches of either providing an empty ACTION or none at all, but as the comments below show, the former violates the HTML spec. So let's stick with the notion of an empty ACTION. Same result, though.
How often have we all seen code along the lines of:
or more involved:
<cfif CGI.QUERY_STRING NEQ "">
<cfset action=action & "?" & xmlformat(CGI.QUERY_STRING)>
<form action="<cfoutput>#action#</cfoutput>" method="post">
All this could be replaced very simply with:
The form will post back to itself.
I'll offer another post that shows a unique way to take advantage of this. In any case, I hope that this observation may help some folks.
(Update: I never got around to that other entry in 2007, but see a my reply to a comment below where someone asked for more info on the idea I had in mind.
Is this reliable?Now, there are some who will argue that this is a violation of the
Again, a clarification over what I wrote originallyhere. As was refined in the comments below, it's a violation to have *no* ACTION, but it's perfectly legit according to the URI spec (section 4.2 at http://www.ietf.org/rfc/rfc2396.txt) to have an empty ACTION, which is interpreted as a "same-document reference. (Thanks, Christopher Bradford, for that info.) Given that, even the following cautions seem needless, but I'll leave them for any still concerned.
If you have any hesitation, because you have to support multiple browsers and you can't test all possibilities, I'll understand if you choose to pass on this. But certainly if you only need to support browsers you can test, then if it works as expected, enjoy.
If anyone reading this can offer where this is the case, I'd appreciate hearing it. If you want some simple code to test, try this:
<cfif cgi.request_method is "post">
Posted to itself
If it shows the text within the IF, then it worked as expected.
What about query string info?
You may wonder about the earlier more involved examples that showed passing the query string, in case any had been passed to the form. No problem. This technique passes any query string along just fine. Try it yourself (add ?test=test to the form and view in the debugging info that it's still in the URL scope after submission.)