表单提交时显示警告框

时间:2013-06-18 19:11:55

标签: php html forms alert

所以我有这两个页面:pageOne.phppageTwo.php。表单位于pageOne.php

<form method="post" action="pageTwo.php"> .... </form>

并在pageTwo.php中执行所有数据收集 - 验证 - 插入和发送邮件(我在两个单独的页面中执行所有操作的原因是为了避免在页面刷新时重新提交数据...这是我处理这个问题最简单的方法)。到目前为止,一切都很完美。

现在,我希望在表单提交后使用警告框显示成功/失败消息,并尝试一些没有运气的事情。例如。当我在pageTwo.php上尝试THIS解决方案时,没有显示弹出框,我认为这是因为我在页面顶部有header

<?php header("Location: http://TestPages.com/pageOne.php");  ?>

<?php
if( $_POST ) {
     //collect the data
     //insert the data into DB
     //send out the mails IFF the data insertion works

     echo "<script type='text/javascript'>alert('It worked!')</script>";
}else
     echo "<script type='text/javascript'>alert('Did NOT work')</script>";
?>

pageOne.php中尝试此 second solution时,每次刷新页面时都会弹出警告框,即使已将数据插入数据库并发送邮件,也会收到失败消息出。 pageOne.php

<html>
<body>
   <?php
   if( $GLOBALS["posted"])  //if($posted) 
      echo "<script type='text/javascript'>alert('It worked!')</script>";
   else
      echo "<script type='text/javascript'>alert('Did NOT work')</script>";
   ?>
   <form method="post" action="pageTwo.php"> .... </form>
</body>

pageTwo.php

<?php header("Location: http://TestPages.com/pageOne.php");  ?>

<?php
$posted = false;
if( $_POST ) {
     $posted = true;
     //collect the data
     //insert the data into DB
     //send out the mails IFF the data insertion works
}    ?>

为什么这个简单的事情不起作用:(?有什么简单的方法可以解决它吗?谢谢!!

更新

所以我根据 drrcknlsn 的夸张做了一些改变,这就是我到目前为止所做的...... pageOne.php

 <?php
   session_start();

   if (isset($_SESSION['posted']) && $_SESSION['posted']) {
      unset($_SESSION['posted']);
      // the form was posted - do something here
  echo "<script type='text/javascript'>alert('It worked!')</script>";
   } else
      echo "<script type='text/javascript'>alert('Did NOT work')</script>";
 ?>
<html> <body>
   <form method="post" action="pageTwo.php"> .... </form>
</body> </html>

pageTwo.php

<?php
session_start();

if ($_SERVER['REQUEST_METHOD'] === 'POST') {
     $_SESSION['posted'] = true;

     //collect the data
     //insert the data into DB
     //send out the mails IFF the data insertion works

     header('Location: http://TestPages.com/pageOne.php');
     exit;
} ?>

现在这些更改页面的重定向和成功消息正在工作,但每次打开/刷新页面时我都会收到故障消息(我知道这是因为会话密钥尚未设置)... 如何我可以避免吗?再次感谢!!

2 个答案:

答案 0 :(得分:0)

首先,有几点:

  1. 变量(甚至是全局变量)不会在请求之间共享,就像您在底部示例中尝试的那样。为了在两个页面中都可以访问$posted,您必须以某种方式保留它。通常这涉及设置会话变量(例如$_SESSION['posted'] = true;),但它也可以保存在cookie,数据库,文件系统,缓存等中。

  2. 使用类似if ($_SERVER['REQUEST_METHOD'] === 'POST')而不是if ($_POST)的内容。虽然后者在大多数情况下可能是安全的,但最好养成使用前者的习惯因为存在一个边缘情况,其中$_POST可以为空且有效POST请求,并且可能是一个难以追踪的错误。

  3. 使用上述建议解决问题的一种潜在模式:

    pageOne.php:

    <?php
    session_start();
    
    if (isset($_SESSION['posted']) && $_SESSION['posted']) {
        unset($_SESSION['posted']);
    
        // the form was posted - do something here
    }
    ?>
    ...
    <form>...</form>
    

    pageTwo.php:

    <?php
    session_start();
    
    if ($_SERVER['REQUEST_METHOD'] === 'POST') {
        $_SESSION['posted'] = true;
    
        // do form processing stuff here
    
        header('Location: pageOne.php');
        exit;
    }
    
    // show an error page here (users shouldn't ever see it, unless they're snooping around)
    

答案 1 :(得分:-1)

看起来这是一个范围问题。 使用方法:

global $posted = true;

http://php.net/manual/en/language.variables.scope.php