我正在尝试将用户成功提交新帖子时重定向到上一页(topic.php)。这很简单:
header("Location: viewtopic.php?id=" . $topicid . ");
我可能会以错误的方式解决这个问题,但是在成功之后,我希望将它们自动重定向到上面的地址并显示成功消息。
我的一些postreply.php
$result = $database->query($sql);
if ($result) {
header('Location: /community/viewtopic.php?id=' . $topicid . '+status=success');
}else {
echo "Query failed" . print_r($sql);
}
这是在viewtopic.php:
$statusmsg = $_GET['status'];
if (isset($statusmsg)) {
if ($statusmsg === "success") {
$statusmsg = '<div class="alert alert-success" role="alert">
<strong>Success!</strong> Your post was submitted.
</div>';
}else {
$statusmsg = "";
}
}
可以理解,php认为+status=success
是从数据库中获取数据的查询的一部分,从而导致MySQL错误。
有没有办法做到这一点?
答案 0 :(得分:6)
在PHP中将参数从url传递到&
超全局时,您应该使用+
而不是$_GET
。
因此,您需要将'+status=success'
更改为'&status=success'
此外,如评论中所述,您应始终验证通过$_POST
/ $_GET
发送的用户输入。
在您的情况下,您可以使用filter_var()
if(isset($_GET['success'])){
$statusmsg = filter_var($_GET['success'], FILTER_VALIDATE_STRING);
if($statusmsg) {
echo $statusmsg;
}else{
// unsafe or invalid string passed
}
}
答案 1 :(得分:0)
像这样改变:
header('Location: /community/viewtopic.php?id=' . $topicid . '&status=success');
<强> viewtopic.php 强>
$statusmsg = $_GET['status'];
if (isset($statusmsg) && !empty($statusmsg)) {
if ($statusmsg == "success") {
$statusmsg = '<div class="alert alert-success" role="alert">
<strong>Success!</strong> Your post was submitted.
</div>';
}else {
$statusmsg = "";
}
}
答案 2 :(得分:0)
header('Location: /community/viewtopic.php?id=' . $topicid . '+status=success');
使用'&amp;'在此行中的“+”位置。您将能够获得在URL中传递的状态值。
答案 3 :(得分:0)
将+
替换为&
,如下所示:
header('Location: /community/viewtopic.php?id=' . $topicid . '&status=success');
现在$_GET['status']
捕获状态值