Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Webpage redirect to the main page with CGI Python

As my first web app I developed a very simple survey. Random questions are being asked from the user anytime the page refreshes. The answer is sent to a cgi script using post to save the answers to the database.

However, when the user presses the submit button it automatically goes to the page which is responsible for processing the data and since it doesn't have any output it is a blank page. Now if the user wants to answer another question they have to press the "back" in the browser and refresh the page so a new question pops up. I don't want this.

I want it in a way that when the users pressed submit, the answers go automatically to the processing script and the page refreshes itself with a new question or at least after processing it redirects to the main survey page with a new question.

like image 651
Hossein Avatar asked May 25 '11 10:05

Hossein


3 Answers

You want to implement this: https://en.wikipedia.org/wiki/Post/Redirect/Get

It's much simpler than it sounds. The CGI script that receives the POST must simply produce the following output:

Status: 303 See other
Location: http://lalala.com/themainpage
like image 60
sdaf Avatar answered Sep 23 '22 06:09

sdaf


You can also send a HTTP header from your processing script:

Location: /

After you have processed your answer, you would send the above header. I would recommend you append a random number query string. e.g. python example (assuming you're using the python CGI module):

#!/usr/bin/env python
import cgitb
import random
import YourFormProcessor

cgitb.enable() # Will catch tracebacks and errors for you. Comment it out if you no-longer need it.

if __name__ == '__main__':
  YourFormProcessor.Process_Form() # This is your logic to process the form.

  redirectURL = "/?r=%s" % random.randint(0,100000000)

  print 'Content-Type: text/html'
  print 'Location: %s' % redirectURL
  print # HTTP says you have to have a blank line between headers and content
  print '<html>'
  print '  <head>'
  print '    <meta http-equiv="refresh" content="0;url=%s" />' % redirectURL
  print '    <title>You are going to be redirected</title>'
  print '  </head>' 
  print '  <body>'
  print '    Redirecting... <a href="%s">Click here if you are not redirected</a>' % redirectURL
  print '  </body>'
  print '</html>'
like image 20
pobk Avatar answered Sep 24 '22 06:09

pobk


<html> 
  <head> 
    <meta http-equiv="refresh" content="0;url=http://www.example.com" /> 
    <title>You are going to be redirected</title> 
  </head> 
  <body> 
    Redirecting...
  </body> 
</html>

See meta-refresh drawbacks and alternatives here.

like image 22
khachik Avatar answered Sep 21 '22 06:09

khachik