遇到麻烦的POST和GET

时间:2013-10-12 08:43:37

标签: php

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

但是我想创建一个论坛脚本,所以当你回复一个主题时,它会查询到数据库,并根据提交回复时$ _GET ['id']的内容给它reply_id。唯一的问题是当我按POST提交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 个答案:

答案 0 :(得分:1)

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

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

表单操作中的

$_REQUEST['id'];

答案 1 :(得分:1)

轻松完成此操作的一种方法是使用隐藏字段。 所以使用

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

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

 $postid=$_POST['id'];

或者,如果我有错误的结尾,请在表单上使用

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

同时将表单操作更改为     行动= “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>

答案 2 :(得分:0)

您可以使用 $ _ REQUEST $ _ POST $ _ GET 获取值,或者只是在表单中使用隐藏的输入字段发送id,类似

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

这可以是发送ID的更好方式。

答案 3 :(得分: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;
}