Christiaan
Christiaan

Reputation: 59

prevent double submitting into database

Good day all,

I have a question I looked it up everywhere and I still seem stuck

If I submit a form via post -> variable -> database and then redirect to another

page using header(location:page.php); in the time it takes to redirect and I

click on the submit button it still inserts duplicate data into the database

how do I prevent that from happening? as I read on tokens but I can't see how it

will work without processing my form data on another page and I don't want to

do that any help please ??

please see below html :

     <form name="frmall"class="col s12" action="" method="post">
                            <!--basic info------------------------------------------------------------------------------------------------------------->
                            <div class="divider"></div>
                                <div class="section">
                                    <h5>Basic Member Information</h5>
                                        <div class="row">
                                            <div class="input-field col s6">
                                                <input id="first_name" name="txt_name" type="text" class="validate" value="<?php if(isset($_POST['btnContinue'])){echo $_POST['txt_name']; }  ?>">
                                                <label for="first_name">First Name</label>
                                            </div>
                                            <div class="input-field col s6">
                                                    <input id="last_name" type="text" name="txt_surname" class="validate"value="<?php if(isset($_POST['btnContinue'])){echo $_POST['txt_surname']; } ?>">
                                                    <label for="last_name">Last Name</label>
                                            </div>
                                            <div class="input-field col s6">
                                                <input id="icon_telephone" type="tel" name="txt_number" class="validate"value="<?php if(isset($_POST['btnContinue'])){echo $_POST['txt_number']; } ?>">
                                                <label>Telephone</label>
                                            </div>
                                            <div class="input-field col s6">
                                                <input id="email" type="email" name="txt_email" class="validate"value="<?php if(isset($_POST['btnContinue'])){echo $_POST['txt_email']; } ?>">
                                                <label for="email" data-error="wrong" data-success="right">Email</label>
                                            </div>
                                            <div class="input-field col s6">
                                                <input id="idnumber" type="text" name ="txt_idnumber" class="validate"value="<?php if(isset($_POST['btnContinue'])){echo $_POST['txt_idnumber']; }  ?>">
                                                <label>ID Number</label>
                                            </div>
                                        </div>
 <button class="btn waves-effect waves-light" type="submit" name="btnCancel">Cancel</button>
                                                <button class="btn waves-effect waves-light" type="submit" name="btnContinue">Continue</button>

                                </div>
    </Form>

PHP (please not its just for en example):

if (isset($_POST['btnContinue'])) {
      $Conn->insert_main_member($name, $surname, $number, $idnumber, $email);
      header(location:page.php);
   }

So how do I prevent double submit without disabling the button ? please assist

Upvotes: 1

Views: 1321

Answers (3)

user1334546
user1334546

Reputation:

The question is not very clear...

If you have problems with submitting the form multiple times and inserting the same values, you can do a check - either in your script (connect to database and check) or create a UNIQUE index in your database table - then the record will not be inserted, if it already exists.

If you have problems with too many people on the site and some data is inserted while it shouldn't and it should wait until something else is completed, then you can use LOCK TABLES command to send to your database.

If you have problems with uniquely identifying transactions, you can also use a token (e.g. a random hash generated before your form is submitted), for example as a hidden form field to send along with the data.

Upvotes: 1

xco
xco

Reputation: 51

1st quick solution : You could disable your submit button with javascript after 1st form submit to prevent any other submit before redirection...

2nd solution : Add a token (generated server side) to your HTML form in a hidden input. On form submit your token will be sent with other POST data. Check your token server side before insert data into your database

Edit: Perhaps a sample of your code (server side + html form) could help us to give you a more appropriate answer.

Upvotes: 0

mattmezza
mattmezza

Reputation: 31

Clear the post variable and place the header(...) in the right place (right after the db query execution).

Upvotes: 1

Related Questions