How to avoid resending data on refresh in php

前端 未结 6 2096
心在旅途
心在旅途 2020-12-05 16:12

I have a page \"index.php\" where i have a link called \"add_users.php\". In \"add_users.php\", I accept user information and come back to the same page \"index.php\" where

6条回答
  •  时光说笑
    2020-12-05 16:30

    Priyanka,

    You are on the right track. What you are trying to implement is actually a well known pattern used in web-developing called the POST/Redirect/GET pattern. (Pattern is a bit of a buzz word now-a-days, so maybe paradigm is a better word for this).

    A common implementation of this pattern/paradigm is to simply have only one point of entry.

    By doing this, add_user.php could now look like this (it's still not the most elegant, but hopefully it will give you an idea of how to go about implementing it):

    
    
    

    Thank you

    You details have been submitted succesfully.

    So, how it basically works is this:

    • If the request made to the script IS NOT a POST request (i.e. the form has not been submitted) and there is no ?message=success appended to the url then simply show a clean form.
    • If the request made to the script IS a POST request, then process the form.
      • If form processing succeeded, redirect to the same script again, and append ?message=success
        • If the request to the script is a request with ?message=success appended to it only show a thank you message, don't show the form.
      • If form processing failed, then let it 'fall through' and show the form again, but this time with some descriptive error messages and with the form elements filled with what the user already had filled in.

    Hopefully this, along with the example I gave you, makes enough sense.

    Now, the reason you were getting the infamous Warning: headers already sent message is explained in this answer I gave to another question about why certain php calls are better to put at the top of a script (actually, it doesn't necessarily have to be on top, but it has to be called before ANY output (even (accidental) whitespace) is being output).

提交回复
热议问题