我希望在提交表单后回复帖子中的内容,然后重定向标题以取消双重提交问题。目前,Output_buffering已启用以允许重定向工作。这里有一些示例代码来说明问题。只需确保在php.ini中启用Output_buffering。
<?php
if(isset($_POST['submit'])){
echo "hi";
}
if (count($_POST) {
header("Location: ".$_SERVER['REQUEST_URI']);
exit();
}
?>
<form action="<?php echo htmlentities($_SERVER['REQUEST_URI']); ?>" method="POST" name="edit" >
<button type="submit" value="submit" name="submit">edit</button>
</form>
答案 0 :(得分:0)
你应该撤销订单。
提交时:
在消息页面上显示:
它可以是单独的页面,相同的页面,也可以是提交或任何其他页面。
或者... 的 使用JavaScript和AJAX进行工作:
<?php
if(isset($_POST['submit'])) {
...
if (/all is ok/)
die(json_encode(array('status' => 'ok', 'message' => 'Hi!')));
else {
die(json_encode(array('status' => 'err', 'message' => 'I\'m failed!')));
}
}
?>
<form action="<?php echo htmlentities($_SERVER['REQUEST_URI']); ?>" method="POST" name="edit" >
<button type="submit" value="submit" name="submit">edit</button>
</form>
<script language="javascript">
$('form').submit(function() {
var parameters = ...; // collect parameters from form
$.getJSON('/url-to-script', parameters)
.success(function(response) {
if (response.message == "ok")
alert(response.message);
else
alert('Can\'t process input:\n' + response.message);
})
.error(function(response) {
alert('What a terrible failure!');
});
});
</script>
当.success()触发时 - 您可以通过警报/自定义模式消息框向用户显示提供的消息,然后重定向(document.location = '<?php echo ... ?>'
)或在页面上替换表单,其中包含一些自定义消息和链接/按钮以继续......很多变种。
答案 1 :(得分:0)
标题必须发送之前任何内容(echo
提供的内容)。
您可以将邮件存储到session并在下次请求时打印(这将是您的后续重定向)。
实施例
sessions_init.php
<?php
session_start();
post.php中
<?php
include_once 'sessions_init.php';
// assuming POST succeeded, data is valid, etc
$_SESSION['messages'][] = 'You have been redirected';
header("Location: ".$_SERVER['REQUEST_URI']);
exit();
html模板:
include_once 'sessions_init.php';
// print HTML:
// <html><head>...</head><body>...
foreach($_SESSION['messages'] as $message) {
print($message);
}
// some other content </body></html>