Solved

PHP - How to detect postback and page refresh

Posted on 2009-05-18
16
1,486 Views
Last Modified: 2012-05-07
I have a php page that posts back to itself. Each time somebody clicks the submit button they get charged a credit. I don't want the customer to pay if they refresh the screen - only if they hit the submit button. How can I distinguish between postback and refresh?

0
Comment
Question by:lwfuk
  • 9
  • 7
16 Comments
 
LVL 4

Expert Comment

by:trencH87
Comment Utility
You should at first auto-refresh the site after submit to be sure the end-user don't get charged more credits than he want.

Assuming you have a submit button named "submit", this is the way to check a post.
<?

if (isset($_POST['submit'])) {

    // Charge credit

}

?>

Open in new window

0
 
LVL 4

Expert Comment

by:trencH87
Comment Utility
Btw, to auto-refresh the site after submit, use this:
<?

if (isset($_POST['submit'])) {

    // Charge credit code here
 

    // Refresh

    header("location: " . $_SERVER['REQUEST_URI']);

}

?>

Open in new window

0
 

Author Comment

by:lwfuk
Comment Utility
Hi trencH87

Could you test this and tell me what is wrong. It always resisters 'Refresh'

Kind Regards,

Adrian Smith
London


<?php
 

if (isset($_POST['submit'])) {

    echo 'Post';

	header("location: " . $_SERVER['REQUEST_URI']);

} else {

	echo 'Refresh';

}
 

?>
 

<html>

<body>

<form id="f" name="f" method="post" action="<?php $PHP_SELF; ?>">

  <input type="submit" name="button" id="button" value="Submit" />

</form>

</body>

</html>

Open in new window

0
 
LVL 4

Expert Comment

by:trencH87
Comment Utility
Yup
<?php

 

if (isset($_POST['submit'])) 

{

    

    // Type in the code for charging credits here.
 

    // header() in this case refreshes the site.

    header("location: " . $_SERVER['REQUEST_URI']);
 

} else 

{

    echo 'Form isnt submitted. Please submit the form.';

}

 

?>
 
 

<html>

<body>

<form id="test" name="test" method="post" action="">

  <input type="submit" name="submit" id="button" value="Submit" />

</form>

</body>

</html>

Open in new window

0
 

Author Comment

by:lwfuk
Comment Utility
trencH87

It doesn't work. Did you test it?

The example you posted is identical to mine except that you have missed off:

action="<?php $PHP_SELF; ?>"
0
 
LVL 4

Expert Comment

by:trencH87
Comment Utility
<?php $PHP_SELF; ?> is really unnessasary in this case. And yes, I tested it. Remember that it shouldnt print out anything when submitting the form. The code I gave you just refreshes the site when the form is submitted. Its up to you to implement the function for charging credits.
0
 
LVL 4

Expert Comment

by:trencH87
Comment Utility
Btw, it wasnt identical. I renamed the input type name to "submit" - or else $_POST['submit'] wouldnt work.
0
 

Author Comment

by:lwfuk
Comment Utility
The example above continually registers 'Form isnt submitted. Please submit the form.'
0
Highfive Gives IT Their Time Back

Highfive is so simple that setting up every meeting room takes just minutes and every employee will be able to start or join a call from any room with ease. Never be called into a meeting just to get it started again. This is how video conferencing should work!

 

Author Comment

by:lwfuk
Comment Utility
Take a look again.

ie:  <input type="submit" name="button" id="button" value="Submit" />

Note: type="submit"
0
 
LVL 4

Expert Comment

by:trencH87
Comment Utility
Just copy&paste this code, and you'll see that it works.

Note: name="submit". the "type" isnt read by $_POST[] - the "name" is.
<?php

 

if (isset($_POST['submit'])) 

{

	// Insert the code for charging credits here.

	

	// header() in this case refreshes the site. 

	//Uncomment this when you want to use it.

    #header("location: " . $_SERVER['REQUEST_URI']);
 

	echo "Form is submitted!";

 

} 

 

?>

 

 

<html>

<body>

<form id="test" name="test" method="post" action="">

  <input type="submit" name="submit" id="button" value="Submit" />

</form>

</body>

</html>

Open in new window

0
 

Author Comment

by:lwfuk
Comment Utility
Unfortunatly it still doesn't work.  It prints "Form is submitted!" when you post. It also prints it when you refresh. Test the code below. The counter continually counts whether you refresh or post.


<?php
 

session_start();
 

if (isset($_POST['submit'])) 

{

        // Insert the code for charging credits here.

        

        // header() in this case refreshes the site. 

        //Uncomment this when you want to use it.

    #header("location: " . $_SERVER['REQUEST_URI']);

 

        echo "Form is submitted!";

		

		$_SESSION['count']++;

		

		echo $_SESSION['count'];

		

		

 

} 

 

?>

 

 

<html>

<body>

<form id="test" name="test" method="post" action="">

  <input type="submit" name="submit" id="button" value="Submit" />

</form>

</body>

</html>

Open in new window

0
 
LVL 4

Expert Comment

by:trencH87
Comment Utility
Thats what the header is for. Please read up on www.php.net/header
0
 

Author Comment

by:lwfuk
Comment Utility
Sorry trencH87 but we are just going round in circles.

Do you have a working example? If so, could you post it or if not sombody else reply.

Regards,

Adrian Smith

0
 
LVL 4

Expert Comment

by:trencH87
Comment Utility
Try this one then.
<?php

session_start();
 

if (isset($_POST['submit'])) 

{

	// Insert the code for charging credits here.

	$_SESSION['count']++;

	

	// header() in this case refreshes the site. 

	//Uncomment this when you want to use it.

	#header("location: " . $_SERVER['REQUEST_URI']);         

 

}
 

echo "Charged points: " . $_SESSION['count'];

 

?>

 

 

<html>

<body>

<p>

<form id="test" name="test" method="post" action="">

  <input type="submit" name="submit" id="button" value="Submit" />

</form>

</p>

</body>

</html>

Open in new window

0
 
LVL 4

Accepted Solution

by:
trencH87 earned 125 total points
Comment Utility
Im sorry, this one:
<?php

session_start();
 

if (isset($_POST['submit'])) 

{

	// Insert the code for charging credits here.

	$_SESSION['count']++;

	

	// header() in this case refreshes the site. 

	//Uncomment this when you want to use it.

	header("location: " . $_SERVER['REQUEST_URI']);         

 

}
 

echo "Charged points: " . $_SESSION['count'];

 

?>

 

 

<html>

<body>

<p>

<form id="test" name="test" method="post" action="">

  <input type="submit" name="submit" id="button" value="Submit" />

</form>

</p>

</body>

</html>

Open in new window

0
 

Author Closing Comment

by:lwfuk
Comment Utility
Marvellous! Thats what I call a good solution.
Well Done.
0

Featured Post

Enabling OSINT in Activity Based Intelligence

Activity based intelligence (ABI) requires access to all available sources of data. Recorded Future allows analysts to observe structured data on the open, deep, and dark web.

Join & Write a Comment

This article discusses four methods for overlaying images in a container on a web page
This article discusses how to create an extensible mechanism for linked drop downs.
The viewer will learn how to create and use a small PHP class to apply a watermark to an image. This video shows the viewer the setup for the PHP watermark as well as important coding language. Continue to Part 2 to learn the core code used in creat…
The viewer will learn how to create a basic form using some HTML5 and PHP for later processing. Set up your basic HTML file. Open your form tag and set the method and action attributes.: (CODE) Set up your first few inputs one for the name and …

771 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

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now