|
Posted by Scott on 03/21/06 22:17
On Tue, 2006-03-21 at 11:40 -0800, jwlum@alum.mit.edu wrote:
> I have the following problem under Internet Explorer only:
>
> 1. User fills out form data (myform.php) and clicks a button that fires
> myFunction()
> 2. myFunction() spawns a "hello, world" popup page via window.open
> 3. myFunction() submits the main page's form via document.form.submit()
> 5. User closes popup window and clicks browser's Back button to return
> to form entry page
> 6. All the form data that the user had filled out is now blank (back to
> defaults)!
>
> If you take step 2) out of the equation, then the form data that the
> user submitted is still there in step 6). This is the behavior I want,
> and I am mystified as to why the addition of window.open causes a
> difference under IE. What could be going on here? If it were a
> cache-related issue, I wouldn't expect step 2) to have any bearing on
> the situation.
>
> Below is a single PHP file you can save to see the problem for
> yourself. As an aside, the same thing happens if you write the
> equivalent logic in perl, but in a straight HTML/javascript version,
> there is no problem.
>
> Thanks for any pointers,
> John
>
> ----------
>
> <html>
> <title>PHP Version</title>
> <body>
> <?php
> if ($_REQUEST['Phase'] == 'Summary')
> {
> ?>
> <p><b>Form Submitted</b></p>
> <p>This is the post-submit version of the form...</p>
> <?php
> }
> else
> {
> ?>
> <script language="javascript">
> function submitForm()
> {
> if (document.form1.popup[0].checked)
> {
> var popup = window.open('', 'popup', 'width=200,height=200')
> popup.document.write('<html><body><p><b>PHP version:</b><br>Close
> me, then use browser Back button and notice that your form fields are
> empty!</p></body></html>');
> }
> document.form1.submit();
> }
> </script>
> <p>This is the pre-submit version of the form...</p>
> <form name="form1" action="" method="get">
> Text 1: <input type="text" size="12" name="text1"><br>
> <input type="radio" name="popup" value="show"> Open Popup
> Window<br>
> <input type="radio" name="popup" value="noshow" CHECKED> No
> Popup<br>
> <input type="button" name="Submit" value="Submit"
> onclick="submitForm();">
> <input type="hidden" name="Phase" value="Summary">
> </form>
> <?php
> }
> ?>
> </body>
> </html>
>
I would categorize this as a browser issue, rather than a PHP problem.
Nonetheless, a possible workaround may be to save the submitted form
data in session variables, and refill the form using the session data.
You should still prevent caching of the original page for this to work,
however. Microsoft recommends using the Expires header (header('Expires:
-1'); or <META HTTP-EQUIV="Expires" CONTENT="-1">).
http://support.microsoft.com/kb/q234067/
Navigation:
[Reply to this message]
|