Solved

Bring back good info already in a form that had an error

Posted on 2004-08-18
7
164 Views
Last Modified: 2013-12-24
Hi all,
I have a form and don't want people to lose the information they already typed in once they submit their form and submit it.  I have some older documents in my application that use something like the following:

<cfoutput query="getCatalogs">
      <cfset s = iif(getCatalogs.catalog_id eq catalogId, DE("selected"), DE(""))>
      <option value="#getCatalogs.catalog_id#" #s#>#getCatalogs.catalog# (#getCatalogs.catalog_id#)

I'm fairly certain that there is a different or more modern method that this.  When someone submits their name in the form I want to return the good information back to the form along with a note about what was missing.  The form is an entry form for a contest and so there are many input's in the form.

So, if someone types in their their name in a text input, how do I make sure that they get their name back when they forget to select an age category.

If the above code is fine I can live with that although I don't completely understand what is going on in the second and third lines.
Thanks, Jerry
0
Comment
Question by:geraldw
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 2
7 Comments
 
LVL 25

Accepted Solution

by:
James Rodgers earned 125 total points
ID: 11834032
submit the form to itsself and process if all ok, if there are erorrs redisplay teh form with appropriate error messages
here's an example

<cfset TITLE="Human Resources - Login">    
<cfset errName = "Invalid User ID">
<cfset errPass = "Invalid Password">
<cfset bNameErr = 0>
<cfset bPassErr = 0>
<cfif isdefined("form.userName") and isDefined("form.userPass")>
          <cfquery name="validName" datasource="#SQLSERVER#" password="#SQLSERVERPASS#" username="#SQLSERVERUSER#">
               SELECT USERID
               FROM HR_TOOLBOX_USER_PROFILE
               WHERE USERLOG = '#form.userName#'
          </cfquery>
          <cfif (#validName.recordcount#)>
               <cfquery name="validPass" datasource="#SQLSERVER#" password="#SQLSERVERPASS#" username="#SQLSERVERUSER#">
                    SELECT USERID , USERPASS
                    FROM HR_TOOLBOX_USER_PROFILE
                    WHERE USERPASS = '#form.userPass#' and USERLOG = '#form.userName#'
               </cfquery>
               <cfif (#validPass.recordcount#) AND not Compare(form.userPass, validPass.userpass)>
                         <cfquery name="getUser" datasource="#SQLSERVER#" password="#SQLSERVERPASS#" username="#SQLSERVERUSER#">
                              SELECT HR_TOOLBOX_USER_PROFILE.USERID, HR_TOOLBOX_USER_PROFILE.USERLOG, HR_TOOLBOX_USER_PROFILE.USERPASS, HR_TOOLBOX_USER_PROFILE.USERFNAME, HR_TOOLBOX_USER_PROFILE.USERLNAME, HR_TOOLBOX_USER_PROFILE.USEREMAIL, Employee.GRADE AS USERGRD, HR_TOOLBOX_USER_PROFILE.USERTYPE, HR_TOOLBOX_USER_PROFILE.USERLEVEL, HR_TOOLBOX_USER_PROFILE.WARNPASS, HR_TOOLBOX_USER_PROFILE.PASSWORDUPDT, HR_TOOLBOX_USER_PROFILE.PROFILEUPDT
                              FROM HR_TOOLBOX_USER_PROFILE LEFT JOIN Employee ON HR_TOOLBOX_USER_PROFILE.EMPID = Employee.EMPID
                              WHERE USERPASS = '#form.userPass#' and USERLOG = '#form.userName#'
                         </cfquery>
                         <cfset SESSION.Auth = StructNew()>
                         <cfset SESSION.Auth.IsLoggedIn=1>
                         <cfset SESSION.Auth.UserID=#getUser.USERID#>
                         <cfset SESSION.Auth.UserLog=#getUser.USERlOG#>
                         <cfset SESSION.Auth.PassWd=#getUser.USERPASS#>
                    <cfset SESSION.Auth.FirstName=#getUser.USERFNAME#>
                         <cfset SESSION.Auth.LastName=#getUser.USERLNAME#>
                         <cfset SESSION.Auth.Email=#getUser.USEREMAIL#>
                         <cfset SESSION.Auth.Grade=#getUser.USERGRD#>
                         <cfset SESSION.Auth.AccessType=#getUser.USERTYPE#>
                         <cfset SESSION.Auth.AccessLevel=#getUser.USERLEVEL#>
                         <cfset SESSION.Auth.ShowPassWarn=#getUser.WARNPASS#>
                         <cfset SESSION.Auth.PassDate=#getUser.PASSWORDUPDT#>
                         <cfset SESSION.Auth.ProfileDate=#getUser.PROFILEUPDT#>
                         <cfset SESSION.Auth.showtopten = 0>
                         <cfif SESSION.Auth.ShowPassWarn NEQ 0>
                              <cfset SESSION.Auth.Warnings=true>
                         <cfelse>
                              <cfset SESSION.Auth.Warnings=false>
                         </cfif>
                         <cfoutput>
                              <script>
                              <cfif #getUser.USERLEVEL# GE 100>
                              window.open('#SRVPATH#HRtoolbox/start.cfm');
                              <cfelse>
                              window.open('#SRVPATH#HRtoolbox/start.cfm','','scrollbars=yes,location=no,status=no,directories=no,toolbar=no,menubar=no,resizable=no,channelmode=yes, fullscreen=yes');
                              </cfif>
                              window.location.replace('index.cfm');
                              </script>
                         </cfoutput>
               <cfelse>
                    <cfset bPassErr = 1 >
               </cfif>
          <cfelse>
               <cfset bNameErr = 1>
          </cfif>          
</cfif>
<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN">
<CFHEADER name="Expires" value="#Now()#">
<CFHEADER name="Pragma" value="no-cache">
<CFHEADER name="cache-control" value="no-cache, no-store, must-revalidate">

<script type="text/javascript" language="JavaScript">
uName = /^\w*$/
uPass = /^[a-zA-Z]\w*....[^_]$/
uPassDig = /.*\d.*/
function validateData(){
err="";
var txtBox=document.tbLogin;
          if (txtBox.userName.value){
               if (!uName.test(txtBox.userName.value)){
                    if(!err){
                         txtBox.userName.focus();
                         txtBox.userName.select();
                    }
                    err = err + "User ID may contain letters, numbers \nand/or the underscore(_) and at least 6 characters.\n";
                    err = err + "User ID may not begin with underscore or a number and may not end with underscore.\n";
               }
          }
          else{
               if(!err){
                    txtBox.userName.focus();
                    txtBox.userName.select();
               }
               err = err + "User ID is a required field.\n";
          }
         
         
         
          if(txtBox.userPass.value){
               if (!uPassDig.test(txtBox.userPass.value)){
                    err = err + "Password must conatin at least 1 digit.\n";
               }
               else{
                    if (!uPass.test(txtBox.userPass.value)){
                         if(!err){
                              txtBox.userPass.focus();
                              txtBox.userPass.select();
                         }
                         err = err + "Password may contain letters, numbers \nand/or the underscore(_) and be at least 6 characters.\n";
                         err = err + "Password may not begin with underscore or a number and may not end with underscore.\n";
                    }
                   
               }
          }
          else{
               if(!err){
                         txtBox.userPass.focus();
                         txtBox.userPass.select();
                    }
               err = err + "Password is a required field.\n";
          }
         

          if(txtBox.userPass.value && txtBox.userName.value && txtBox.userPass.value == txtBox.userName.value){
               err = err + "User ID and Password cannot be the same.\n";
          }
         
          if (err){
               alert(err);
          }    

return (err ? false : true);    
}
</script>


<table width="150" border="0" cellspacing="0" cellpadding="0" align="right">
  <tr>
    <td width="150" height="15" colspan="2" align="center" bgcolor="#9DA2C8"><font face="Arial, Helvetica, sans-serif" size="2">H.R. Toolbox</font> </td>
  </tr>
  <tr height="30">
    <form action="index.cfm" method="post" name="tbLogin" onsubmit="return validateData();">
      <tr>
        <td width="150" height="10" colspan="2" align="left" bgColor="#fcf1f2">&nbsp;<font color="#8b0000" face="Arial, Helvetica, sans-serif" size="2">
          <a href="##" onClick="window.open('eis/hr_toolbox/toolboxRegistration.cfm','News','scrollbars=no,width=400,height=400,resizable=no')" class="bottomnav">New User? Click to Register</A></font></td>
      </tr>
       <cfif (#bNameErr#) eq 1>
       <tr>              
          <td width="150" height="10" colspan="2" style="font: small-caps bold 10pt; color:red;" align="center" bgColor="#fcf1f2">Invalid User ID</td>
       </tr>          
       <cfelseif (#bPassErr#) eq 1>
       <tr>              
          <td width="150" height="10" colspan="2" style="font: small-caps bold 10pt; color:red;" align="center" bgColor="#fcf1f2">Invalid Password. Password is case SENSITIVE</td>
       </tr>
     <cfelse>
     
     </cfif>          
         
      <tr>
        <td height="10" width="72" bgColor="#fcf1f2" align="left">&nbsp;<font color="#8b0000" face="Arial, Helvetica, sans-serif" size="2">User ID:</font></td>
        <td width="73" bgColor="#fcf1f2" align="left"><font size="3"><input name="userName"  type="text" size="8" maxlength="20" <cfif isDefined("form.userName") and not bNameErr and not isDefined("SESSION.Auth.IsLoggedIn")><cfoutput> value="#form.userName#"</cfoutput></cfif>></font></td>
      </tr>
      <tr>
        <td width="72" height="10" align="left" bgColor="#fcf1f2">&nbsp;<font color="#8b0000" face="Arial, Helvetica, sans-serif" size="2">Password:</font></td>
        <td width="73" height="10" align="left" bgColor="#fcf1f2"><font size="3"><input name="userPass" type="password" size="8" maxlength="20"></font></td>
      </tr>
      <tr>
        <td width="150" height="10" colspan="2" align="right" bgColor="#fcf1f2">    
        <font color="#8b0000" face="Arial, Helvetica, sans-serif" size="2"><input align="right" name="submit" type="submit" value="Log In">&nbsp;&nbsp;</font></td>
      </tr>
    </form>
  <tr>
    <td width="150" height="10" colspan="2" bgColor="#fcf1f2"><font color="#8b0000" face="Arial, Helvetica, sans-serif" size="2">
     &nbsp;<a href="##" onClick="window.open('eis/hr_toolbox/password_request.cfm','News','scrollbars=no,width=400,height=400,resizable=no')" class="bottomnav">Lost or Forgot Password?</A></font></td>
  </tr>
  <tr>
    <td width="150" height="15" colspan="2"  valign="middle" bgcolor="#9DA2C8">&nbsp;</td>
  </tr>

  <tr><td width="150" height="15" colspan="2"  align="center">

       </td>
  </tr>
</table>
 
0
 
LVL 21

Expert Comment

by:pinaldave
ID: 11834437
Hi geraldw,
Very correct Answer from Jester_48.
following is the method which I use. if sucess it goes to other page or it will come to same page with incorrect form value. as you have asked. Do not forget to surrange the code with apropriate place wiht <cfoutput>

<cfif isdefined('formname.submit')>
<cfquery name="queryname">
your sql statement
</cfquery>
<cfif queryname.recordcount >
<cflocation url="sucess page">
<cfelse>
There is error.
</cfif>

</cfif>

<form action="" method="post" name="formname">
<input type="text" value="#form.textname#" name="textname">
<input type="submit" value="submit" name="submit">
</form>


Regards,
---Pinal
0
 
LVL 25

Expert Comment

by:James Rodgers
ID: 11880570
An explanation and a code sample....

grade B?
0
Webinar: Aligning, Automating, Winning

Join Dan Russo, Senior Manager of Operations Intelligence, for an in-depth discussion on how Dealertrack, leading provider of integrated digital solutions for the automotive industry, transformed their DevOps processes to increase collaboration and move with greater velocity.

 

Author Comment

by:geraldw
ID: 11880637
Hi Jester48
I don't intend to be insulting or anything. I'm just having some difficulty pulling out the little bit of code I need from what you posted.  So yes, thanks much for a thorough code example but the only reason I didn't give an A is because there is so much more there to wade through than I probably needed.  It's neat to have a chance to peer into the code of someone who obviously really knows what they are doing - for someone like myself who's only so-so it's a little daunting trying to figure out exactly what I need.
Thanks again, Jerry
0
 
LVL 25

Expert Comment

by:James Rodgers
ID: 11880892
follow up q's are always welcome, if there was something you needed clarification on i would have been more than happy to go through the code, line by line, if need be.

<!--- errro messages and boolean checks --->
<cfset errName = "Invalid User ID">
<cfset errPass = "Invalid Password">
<cfset bNameErr = 0>
<cfset bPassErr = 0>

<!--- double submission validation 1-validate user id/name 2- if valid user validate user id/name AND password --->
<!--- i use double validation so that i can let the user know whether the login error was due to invalid user id/name or invalid password --->
<!--- this lets the user know where they have made the error and correct as necessary --->
<cfif isdefined("form.userName") and isDefined("form.userPass")>
          <cfquery name="validName" datasource="#SQLSERVER#" password="#SQLSERVERPASS#" username="#SQLSERVERUSER#">
               SELECT USERID
               FROM HR_TOOLBOX_USER_PROFILE
               WHERE USERLOG = '#form.userName#'
          </cfquery>
          <cfif (#validName.recordcount#)>
               <cfquery name="validPass" datasource="#SQLSERVER#" password="#SQLSERVERPASS#" username="#SQLSERVERUSER#">
                    SELECT USERID , USERPASS
                    FROM HR_TOOLBOX_USER_PROFILE
                    WHERE USERPASS = '#form.userPass#' and USERLOG = '#form.userName#'
               </cfquery>



<!--- if user login was successful read user information from user profile table in data base --->
<cfif (#validPass.recordcount#) AND not Compare(form.userPass, validPass.userpass)>
                         <cfquery name="getUser" datasource="#SQLSERVER#" password="#SQLSERVERPASS#" username="#SQLSERVERUSER#">
                              SELECT HR_TOOLBOX_USER_PROFILE.USERID, HR_TOOLBOX_USER_PROFILE.USERLOG, HR_TOOLBOX_USER_PROFILE.USERPASS, HR_TOOLBOX_USER_PROFILE.USERFNAME, HR_TOOLBOX_USER_PROFILE.USERLNAME, HR_TOOLBOX_USER_PROFILE.USEREMAIL, Employee.GRADE AS USERGRD, HR_TOOLBOX_USER_PROFILE.USERTYPE, HR_TOOLBOX_USER_PROFILE.USERLEVEL, HR_TOOLBOX_USER_PROFILE.WARNPASS, HR_TOOLBOX_USER_PROFILE.PASSWORDUPDT, HR_TOOLBOX_USER_PROFILE.PROFILEUPDT
                              FROM HR_TOOLBOX_USER_PROFILE LEFT JOIN Employee ON HR_TOOLBOX_USER_PROFILE.EMPID = Employee.EMPID
                              WHERE USERPASS = '#form.userPass#' and USERLOG = '#form.userName#'
                         </cfquery>

<!--- create a session variable as a structure to contain user information to be used throughout the application --->
<!--- most developers will not have this type/quantity of information --->
                         <cfset SESSION.Auth = StructNew()>
                         <cfset SESSION.Auth.IsLoggedIn=1>
                         <cfset SESSION.Auth.UserID=#getUser.USERID#>
                         <cfset SESSION.Auth.UserLog=#getUser.USERlOG#>
                         <cfset SESSION.Auth.PassWd=#getUser.USERPASS#>
                    <cfset SESSION.Auth.FirstName=#getUser.USERFNAME#>
                         <cfset SESSION.Auth.LastName=#getUser.USERLNAME#>
                         <cfset SESSION.Auth.Email=#getUser.USEREMAIL#>
                         <cfset SESSION.Auth.Grade=#getUser.USERGRD#>
                         <cfset SESSION.Auth.AccessType=#getUser.USERTYPE#>
                         <cfset SESSION.Auth.AccessLevel=#getUser.USERLEVEL#>
                         <cfset SESSION.Auth.ShowPassWarn=#getUser.WARNPASS#>
                         <cfset SESSION.Auth.PassDate=#getUser.PASSWORDUPDT#>
                         <cfset SESSION.Auth.ProfileDate=#getUser.PROFILEUPDT#>
                         <cfset SESSION.Auth.showtopten = 0>
                         <cfif SESSION.Auth.ShowPassWarn NEQ 0>
                              <cfset SESSION.Auth.Warnings=true>
                         <cfelse>
                              <cfset SESSION.Auth.Warnings=false>
                         </cfif>
                         <cfoutput>
                              <script>

<!--- at this point a check is made to vlaidate the user access level, >=100 is admin all others are regular users, open the appropriate style window  --->
                              <cfif #getUser.USERLEVEL# GE 100>
                              window.open('#SRVPATH#HRtoolbox/start.cfm');
                              <cfelse>
                              window.open('#SRVPATH#HRtoolbox/start.cfm','','scrollbars=yes,location=no,status=no,directories=no,toolbar=no,menubar=no,resizable=no,channelmode=yes, fullscreen=yes');
                              </cfif>

<!--- as teh form submits to itsself the user, or someone else,  could refresh the screen and relogin this javascript code block replaces teh form submission page with standard start page (as per my site) removing teh form submission from the browser cache/history --->
                              window.location.replace('index.cfm');
                              </script>
                         </cfoutput>

<!--- if user id/name and password check is invalid set password error boolean to true --->
               <cfelse>
                    <cfset bPassErr = 1 >
               </cfif>

<!--- if user id/name check is invalid set id/name error boolean to true --->
          <cfelse>
               <cfset bNameErr = 1>
          </cfif>          
</cfif>


<!--- set cf headers to prevent page caching --->
<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN">
<CFHEADER name="Expires" value="#Now()#">
<CFHEADER name="Pragma" value="no-cache">
<CFHEADER name="cache-control" value="no-cache, no-store, must-revalidate">


0
 

Author Comment

by:geraldw
ID: 11880929
Hi Jester48
Thanks for the clarification.  I didn't realize the grade was so important.  I thought it was the points that mattered. Nonetheless, I didn't want to keep bombarding you with questions as I thought that would be more annoying to you.
Jerry
0
 
LVL 25

Expert Comment

by:James Rodgers
ID: 11881015
>> I didn't want to keep bombarding you with questions as I thought that would be more annoying to you.
if i was worried about follow up questions i wouldn't post. Just because a code sample is posted doesn't mean it's a final answer, never accept something just because it looks good, or has a lot of code follow up ask until you are satisfied, i think most of the experts that answer postings would agree with those sentiments... think of an asker as a customer and teh experts are teh people here to serve your needs  
0

Featured Post

Comprehensive Backup Solutions for Microsoft

Acronis protects the complete Microsoft technology stack: Windows Server, Windows PC, laptop and Surface data; Microsoft business applications; Microsoft Hyper-V; Azure VMs; Microsoft Windows Server 2016; Microsoft Exchange 2016 and SQL Server 2016.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Have you ever sent email via ColdFusion and thought of tracking this mail to capture the exact date and time when the message was opened ?  If yes, then this article is for you ! First we need a table user_email with columns user_id , email , sub…
Introduction This article explores the design of a cache system that can improve the performance of a web site or web application.  The assumption is that the web site has many more “read” operations than “write” operations (this is commonly the ca…
In this video, viewers are given an introduction to using the Windows 10 Snipping Tool, how to quickly locate it when it's needed and also how make it always available with a single click of a mouse button, by pinning it to the Desktop Task Bar. Int…
NetCrunch network monitor is a highly extensive platform for network monitoring and alert generation. In this video you'll see a live demo of NetCrunch with most notable features explained in a walk-through manner. You'll also get to know the philos…

688 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question