[FX.php List] Problem with creating duplicate records

Steve Hannah shannah at sfu.ca
Fri Jul 21 17:01:26 MDT 2006


This problem can be solved by carefully following the intentions of  
HTTP requests:
1.  GET requests do not change data in the database.
2.  POST requests can update data in the database.

Hence, your forms should always be displayed by a GET request, and  
saved via a POST request.  When you process the form received from a  
POST request, you do your database updates and then forward to a new  
page with a GET request to show the next form.

e.g.

HTTP request: GET mypage.php :

<form action="mypage_processor.php" method="POST">
... a bunch of fields in the form...

</form>

User submits this form which sends an HTTP POST request to  
mypage_processor.php:

In mypage_processor.php:

if ( form validates ok){
     process the form
     if ( form processed ok){
         forward user to next form or success page:
         e.g.:  header('mypage2.php?message='.urlencode('Successfully  
saved content')); exit;
     } else {
         forward user to failure page.
         e.g.:  header('my_failure_page1.php?message='.urlencode 
('Failed because ...')); exit;
     }
} else {
     form didn't validate -- either display the form again right here  
with info about which fields were
    input incorrectly -- or forward back to the original form for the  
user to fill in... probably easier to
    just display it here again:

    include('mypage.php');

}

This way, if the user reloads a form, it just reloads the form - and  
doesn't trigger the processing information.

Hope this helps.

----------------------------------------
Steve Hannah
Web Services Developer

Faculty of Applied Sciences
Simon Fraser University
shannah at sfu.ca
604-268-7228
Homepage: http://www.sjhannah.com
--
Need to build a database driven web application quickly?
Try Dataface: http://fas.sfu.ca/dataface



On 21-Jul-06, at 2:45 PM, Jerry Do wrote:

> Hello all,
>
> I am new to fx.php and php.  I have problem users create duplicate  
> records
> by reload the response page.
> For example:
> I have a form name "formA" and the ACTION ="formA_response.php".
> When the user click submit, the form will send all the information to
> formA_response.php.
> The formA_response.php page is the page to create new record.  I  
> noticed
> that if a user reload formA_reload.php,  new record will be  
> created.  Is
> there a good method to prevent the user reload the page or going to  
> that
> page?
> I am thinking that I might send to a page that will create the  
> record then
> close that page after the record created.  However, I am not sure  
> it will
> work or how to do write it yet.
>
> Any input is welcome.
>
> Thank you in advance,
>
> _______________________________________________
> FX.php_List mailing list
> FX.php_List at mail.iviking.org
> http://www.iviking.org/mailman/listinfo/fx.php_list
>



More information about the FX.php_List mailing list