0

フォーム送信では、メソッド 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

4 に答える 4

1

非表示フィールドにIDを保存できるように、フォームで非表示フィールドを使用してみてください。そうしないと、セッションに保存できます

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

$_REQUEST['id'];フォームアクションで

于 2013-10-12T08:48:29.963 に答える
1

これを簡単に行う方法の 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

ここで考えるべき2つのこと。他の人が上で言ったように、隠しフォームフィールドで必要な前のページから変数を渡します。また、 $_GET と $_POST を直接使用するのをやめてください。入力を検証する必要があるため、一般的な関数を使用して検証する必要があります。これにより、var が入っていることを心配することなく、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 に答える