0

我知道通过表单提交,您只能使用 POST 或 GET 方法,不能同时使用两者。

但是我正在尝试制作一个论坛脚本,因此当您回复某个主题时,它会向数据库查询该主题并根据您提交回复时的 $_GET['id'] 为它提供reply_id。唯一的问题是当我按下提交以使用 POST 方法发布数据时,我无法在提交后将 $_GET 带到下一页。所以我无法查询 $_GET['id']。

现在,我想为什么不采取行动“topic.php?id=”,但由于某种原因这不起作用。

错误的是,当我在表单上按提交时,它甚至不会查询任何内容。:/

有人知道代码有什么问题吗?

形式:

<form action="topic.php?id=$postid" method="POST">
    <textarea name="comment" class="field span6" rows="3" placeholder="Content..."></textarea><br /><br />
    <input type="hidden" name="id" value="<?php echo $_GET['id'];?>">
  <div><input type="submit" name="submit" value="Reply" /></div>
</form>

表单操作:

  if(isset($_POST['submit'])) {
  $postid=$_POST['id'];
  $errors = array();
    if(isset($_POST['comment'])){
      if(empty($_POST['comment'])){
        $errors[] = 'Error, try again!';
      }

      if(strlen($_POST['comment']) > 400){
        $errors[] = 'Comment must be in a 10 to 400 characters range!';
      }

      if(empty($errors)){
        //write to topics and replies tables
        $q2 = @mysql_query("INSERT INTO reply VALUES('$postid', \"$comment\", now(), '$id')");
      } else {
        echo 'You have '. (count($errors) + 1).' errors in your form:<br />';
        foreach($errors as $error){
          echo $error .'<br />';
        }
        echo '<a href="new_topic.php">Try again</a>';
      }
    }
4

4 回答 4

1

尝试在表单中使用隐藏字段,以便您可以将 id 存储在隐藏字段中,或者您可以将其存储在会话中

 <input type="hidden" name="id" value="<?php echo  urlencode($postid); ?>" />

$_REQUEST['id'];形式行动

于 2013-10-12T08:48:29.963 回答
1

轻松做到这一点的一种方法是使用隐藏字段。所以使用

<input type="hidden" name="id" value="<?php echo GET['id'];?>">

然后在操作页面上你应该可以使用

 $postid=$_POST['id'];

或者,如果我的棍子末端错误,请在表格上使用它

<input type="hidden" name="id" value="<?php echo $postid;?>">

还将表单操作更改为 action="topic.php"。

更新后的代码应该是什么样子

<form action="topic.php" method="POST">
      <textarea name="comment" class="field span6" rows="3" placeholder="Content..."></textarea><br /><br />
      <input type="hidden" name="id" value="<?php echo $postid;?>">
      <div>
           <input type="submit" name="submit" value="Reply" />
      </div>
</form>
于 2013-10-12T08:49:43.970 回答
0

这里要考虑两件事。正如其他人在上面所说的那样,在隐藏表单字段中传递您需要的先前页面中的任何变量。此外,停止直接使用 $_GET 和 $_POST,您需要验证输入,因此使用通用函数来执行此操作,这也将使您能够请求 var 而不必担心它在$_GET 或 $_POST。这些方面的东西:

/**
* returns the contents of the GET or POST variable
* favours POST over GET
*/
function GP($var,$trusted=false)
{
    $op=$_GET[$var];
    if(isset($_POST[$var]))
    {
        $op=$_POST[$var];
    }
    if(is_string($op))
    {
        $op=trim(urldecode($op));
        if(!$trusted){
            $op=htmlspecialchars($op,ENT_QUOTES);
        }
        // $op=addslashes($op);
    }
    return $op;
}
于 2013-10-12T09:42:24.800 回答
0

您可以使用$_REQUEST$_POST$_GET获取值,或者非常简单地使用表单中的隐藏输入字段来发送 id,例如

<input type='hidden' name='id' value='<?php echo $postid' />

这可能是发送 id 的更好方法。

于 2013-10-12T08:50:50.223 回答