在URL中使用$ _GET变量?来自MySQL的?id =

时间:2017-08-03 10:02:41

标签: php mysql

我正在尝试将用户成功提交新帖子时重定向到上一页(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错误。

有没有办法做到这一点?

4 个答案:

答案 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']捕获状态值