2012-02-13 142 views
0

这个问题非常基本,我几乎不好意思问这个问题,但它让我难倒了。我已经写了一段简短的代码片段来解释它:只提交表格一次;当页面刷新时不要提交

<form id="MyForm" method="post" enctype="multipart/form-data" > 
    <input type="file" id="get_file" name="get_file" > 
    <input type="submit" name="submitForm" value="Submit" > 
</form> 

<?php 
    if (isset($_POST['submitForm'])) { 
    echo "<script type='text/javascript'>alert('Selected')</script>"; 
} else {  
    echo "<script type='text/javascript'>alert('Not selected')</script>"; 
} 
?> 

当我第一次加载此页时,警报显示“未选中”。好。我提交表单并提示“已选”。也不错。但是当我刷新页面时,它仍然是“选中”。我不明白为什么“IF”声明允许这种情况发生。我希望我的表单只提交一次数据,而不是在我的用户执行此操作之前再次执行,而不是每次刷新页面。

这似乎是noobs问他们什么时候懒得使用Google的问题,但我看了(这个网站上甚至有一些线索解决了这个问题,但没有人提出过解)。我已经阅读过HTML表单,但我仍然不明白。

这是大家都知道的,但我呢?有人能告诉我吗?谢谢。

编辑:如果有人曾经绊倒这个线程,并需要一个快速和肮脏的修复,这里是我偶然发现的一个。只需再次按下选择键,轻松完成使用jQuery。表单被重新提交,但表单变量全部被清除。也许不是很优雅,但它完美地起作用。

回答

1

当您重新加载页面时,它将重新提交POST请求,这意味着submitForm=Submit是请求主体的一部分。

您应该使用Post/Redirect/Get模式来避免这种情况。

+0

谢谢Alex。在我的搜索中,我确实看到了这一点,但它似乎并不适用于我,因为它要求重定向,而我所做的一切都在一个页面上。我会仔细看看。 – Stanton 2012-02-13 23:08:03

+0

@ user1170140您可以重定向到同一页面。 – alex 2012-02-13 23:13:03

+0

我重定向到另一个页面,像这样'返回Redirect :: route('mypage',array('newmember',$ newmember))',它重定向但不能访问数据,我也试过这个'return Redirect: :route('mypage') - > with('newmember',$ newmember)' – BlackPearl 2014-05-08 05:08:16