1

我有一个网站,任何访问者都可以订阅接收时事通讯。我每次刷新页面时都遇到了重新提交的问题。我通过应用 PRG 概念解决了这个问题。现在用户永远不会两次提交相同的表单,我只有一个问题:我设计表单的方式是,当成功/失败时,会在输入字段下显示一条消息。不幸的是,现在我应用了 PRG 概念,我再也没有显示任何消息。该怎么办 ?

index.php - 我有包含提交表单和消息显示的 div

        <div id="newsletter" >
            <form id="abonat" name="abonat" action="formular.php" method="post" onsubmit="return golire()" autocomplete="on"  > 
            <span>Subscribe</span>
            <input type="text" id="nume" name="nume"  placeholder="Name" required />
            <input type="email" id="email" name="email" placeholder="Email" autocomplete="off"  required/> 
            <input type="submit" value="Subscribe" class="button" style="width:26%;float:left;" /> 

            </form>
    </div>  

    <div id="mesaj_newsletter">
        <span><?php if (isset($mesaj)) echo $mesaj; ?> </span>
    </div> 

formular.php - 进行验证并确定消息的位置

include('conect.php');    
function validEmail($email){
    //code that verifies if it is a valid email adress
}

if( (isset($_POST['email']))&&(isset($_POST['nume'])) ){
    $nume=mysql_real_escape_string($_POST['nume']);
    $email=mysql_real_escape_string($_POST['email']);
    $z=1;
    if(validEmail($email)==TRUE){
        $result=mysql_query("SELECT * FROM abonat");
        while($data=mysql_fetch_row($result)){
                if(($data[1]==$email)||($data[2]==$nume))
                    $z=0;
        }

        if($z==1){
           mysql_query("INSERT INTO abonat(email,nume) VALUES ('$email','$nume')");
           $mesaj="Your email has been registered";
        }
        else $mesaj="You are already registered";   
    }
    else $mesaj="You have not entered a valid email adress";
}
mysql_close($con);
header('Location:index.php');
?>
4

2 回答 2

2

像这样将您的 $mesag 放入查询字符串中

header("Location:index.php?msg=$mesag");

然后在 index.php 上使用 $_GET['msg'] 并在那里获取值并显示它。

于 2013-04-29T10:28:36.857 回答
2

尝试设置一个名为例如$_COOKIE['status_message']60 秒超时的 cookie。

set_cookie('status_message','This is our message',(time()+60));

然后在页面刷新的时候,查看cookie是否有数据;

if(isset($_COOKIE['status_message'])){
    echo $_COOKIE['status_message'];
    set_cookie('status_message','',(time()-3600));
}

这将回显任何填充的消息并销毁 cookie。

于 2013-04-29T10:29:02.260 回答