Skip to main content
Inspiring
February 26, 2024
Answered

Prevent inserts into database within 5 seconds

  • February 26, 2024
  • 2 replies
  • 547 views

I have a form that submits to a database.

 

Sometimes users inadvertanly click the submit button 2 or 3 times, resulting in 2 or 3 dupkicate submissions.


I would like to stop users from being able to insert any record within 5 seconds of the last insert


<cfquery datasource="#APPLICATION.ds#" name="get_max_ID">
SELECT MAX(insert_time) AS maxtime FROM FORMS
</cfquery>

When a form is submitted I need to check if it is within 5 seconds of the maxtime .

 

If it is . I <cfabort> with an error message.

 

If it is after 5 seconds I allow the insert.

 

How do I do this check?

    This topic has been closed for replies.
    Correct answer Charlie Arehart

    Are you envisioning a db solution? I'd recommend against it. It just doesn't feel like the right way to go. (Maybe you didn't mean that. Just clarifying.)

     

    Are you envisioning instead a coldfusion solution? That would be possible, using some way to track the time of each submissions for each user, which could be tracked via sessions, cookies, a database, or even in the application scope (tracking each user there, somehow). It would then just be a matter of using the CF datediff function to compare the saved time of the last submission to now().

     

    But finally this is a kind of problem often solved instead on the client end, using Javascript. Here again there are multiple such solutions (including the simplistic cfinput type="submit" validate="submitonce".) And of course, developers well beyond cf seek such client-side solutions, which widens the range of options you might find. 

     

    I realize you may say you'll take any solution that "works", and in that case you may just want to "see some code" for it. But before I or others might offer that, I wanted to put these options out there as a first response, to see if you may point to a preference of one direction vs another. 

    2 replies

    Participant
    March 1, 2024

    I'm having the same issues in our application and am brainstorming a plan for this.  We have to dedupe these items a few times per day.

    I agree with Charlie about not implementing this at the database layer.  What I'm considering is locking the button and showing a "Please wait..." modal dialog over the page with a small animated gif with javascript that fires when the "submit" "onClick" action is performed. Something similar to, but not necessarily this..  (found it on a quick giphy search)

     

    Then we either wait a set amount of time to disappear, wait for the page to load on the next step after the query finishes to disable it, or find a way to get a callback from the database that the record was written to disable the modal overlay and move the page along to the next step.

    Charlie Arehart
    Community Expert
    Charlie ArehartCommunity ExpertCorrect answer
    Community Expert
    February 26, 2024

    Are you envisioning a db solution? I'd recommend against it. It just doesn't feel like the right way to go. (Maybe you didn't mean that. Just clarifying.)

     

    Are you envisioning instead a coldfusion solution? That would be possible, using some way to track the time of each submissions for each user, which could be tracked via sessions, cookies, a database, or even in the application scope (tracking each user there, somehow). It would then just be a matter of using the CF datediff function to compare the saved time of the last submission to now().

     

    But finally this is a kind of problem often solved instead on the client end, using Javascript. Here again there are multiple such solutions (including the simplistic cfinput type="submit" validate="submitonce".) And of course, developers well beyond cf seek such client-side solutions, which widens the range of options you might find. 

     

    I realize you may say you'll take any solution that "works", and in that case you may just want to "see some code" for it. But before I or others might offer that, I wanted to put these options out there as a first response, to see if you may point to a preference of one direction vs another. 

    /Charlie (troubleshooter, carehart. org)
    weezerboyAuthor
    Inspiring
    February 26, 2024

    Thank you Charlie. I was hoping to use CF code for a solution.

    Charlie Arehart
    Community Expert
    Community Expert
    February 27, 2024

    So you'll be using one of the several cf solutions I posed?  Will you take those ideas and run with one?

     

    Or are you wanting someone else to write the code? I'm not aware of any that exists, that I can just point to. 

    /Charlie (troubleshooter, carehart. org)