-3

に問題があり$_GETます。送信ボタンをクリックしても、phpの最初のページからの「id」が読み取れません。これはidの値が由来するリンクですが、これ<?php echo $content."<p><a href='post.php?id=$pid'>Comment.</a>"?></p>を実行しようとすると、echo $_GET['id'];それが動作していることから、値があることがわかります。

<?php
if (isset($_GET['id'])) {
$c = $_GET['id'];
}
mysql_connect("localhost","root","");
mysql_select_db("blog");
?>
<html>
<head>
<body background="u.jpg">
<center>

<a href="register.php"><img src="1.jpg" width="100" height="50"/></a>
<a href="login.php"><img src="2.jpg" width="100" height="50"/></a>
<a href="index.php"><img src="3.jpg" width="100" height="50"/></a>
</center>
<center>
<title>Pinoy Blog</title>
</head>
<?php
if(isset($_POST['submit']))
{
$content = $_POST['content'];

mysql_query("INSERT INTO comment (comment,p_id) VALUE('$content','$c')");
echo '<a href="index.php">span style="font-size:26px;"><strong><span style="font-family: verdana, geneva, sans-serif; ">Success! Tignan ang post.&nbsp;</span></strong></span>.</a> 
|| <a href="post.php">Magpost ulit? Click mo to.</a>';
}else{
?>
<form action='post.php' method='post'>
<span style="font-size:26px;"><strong><span style="font-family: verdana, geneva, sans-serif; ">Comment:&nbsp;</span></strong></span>
<textarea name='content' ></textarea><br />
<input type='submit' name='submit' value='POST!'/>
</form>
<?php
}
?>

<center>
</body>
</html>
4

4 に答える 4

1

1)リンク付きの最初のページから2番目のページに移動する場合、クエリ文字列と呼ばれ、$ _GET['id']で取得されます。

2)しかし、今あなたは2ページ目にいて、送信ボタンをクリックします。これは、前のhttpリクエストからの$_GET値を持たない新しいhttpリクエストであることを意味します。したがって、$ _GET['id']を非表示のフォームフィールドとして2番目のページに格納する必要があります。

以下のようにPHPコードを変更します

if (isset($_REQUEST['id'])) {
$c = $_REQUEST['id'];
}

次に、フォームの1つの非表示フィールドを取得します。

<form action='post.php' method='post'>
   <span style="font-size:26px;"><strong><span style="font-family: verdana, geneva, sans-serif; ">Comment:&nbsp;</span></strong></span>
   <input type="hidden" value="<?php echo $_REQUEST['id'] ?>" name="id">
  <textarea name='content' ></textarea><br />
   <input type='submit' name='submit' value='POST!'/>
</form>

注:$ _ REQUESTのデフォルトには、$ _ GET、$ _ POST、および$_COOKIEの内容が含まれています

于 2012-09-30T12:56:13.670 に答える
0

POSTフォームを送信してから、GET変数を検索していますか?

正直なところ、私は質問を理解するのに苦労しています。最初にページにアクセスしたときは$ _GET ['id']が印刷されますが、そのページでフォームを送信するとIDは印刷されないということです。そこに?

于 2012-09-30T12:45:40.897 に答える
0

まずecho、クエリ文字列の値が表示されるように、どこでいつ使用しますか?

もっと要点を言えば、私たちが見ているコードはそのためのpost.phpものであり、ページは本質的にそれ自体に送信されていると仮定します。また、最初にページをロードするときは、クエリ文字列引数を使用してロードすると仮定します。このようなもの:

/path/to/post.php?id=123

ただし、フォームを送信するときに、そのURLを変更します。

<form action='post.php' method='post'>

今、あなたはこのようなものをロードしています:

/path/to/post.php

URLにはクエリ文字列の値がないため、PHPコードがこのリクエストに応答すると、に何も含まれなくなり$_GET['id']ます。サーバーにリクエストを送信するときに、クエリ文字列の値を含める必要があります。このようなものが機能する可能性があります:

<form action="post.php?id=<?php echo htmlspecialchars($_GET['id']); ?>" method="post">

POST逆に、値を混合する代わりにGET、フォームに非表示フィールドを設定することもできます。このようなもの:

<input type="hidden" name="id" value="<?php echo htmlspecialchars($_REQUEST['id']); ?>" />

そうすれば、form'actionを変更する必要はありませんが、PHPコードの値にアクセスする方法を変更する必要があります。 GET値またはPOST値のいずれか$_REQUEST['id']から値をプルするため、どちらか一方にのみ存在する必要があります。そうすれば、最初にページをロードするときと、ページをそれ自体に送信するときの両方で同じ配列を使用できます。

ここの使用に注意してhtmlspecialchars()ください。私はPHPの専門家ではありませんが、明示的に試みているのは、クロスサイトスクリプティング攻撃を防止することです。これにより、コードが(ユーザーに代わって)ユーザーが送信した入力に盲目的にエコーし、悪意のある可能性があります。 url encode()トリックを行うこともできます。それはあなたのニーズのためにさらに研究する価値があります。

于 2012-09-30T12:54:49.977 に答える
0
<form action='post.php?id=<?php echo $id;?>' method='post'>
<span style="font-size:26px;"><strong><span style="font-family: verdana, geneva, sans-serif; ">Comment:&nbsp;</span></strong></span>
<textarea name='content' ></textarea><br />
<input type='submit' name='submit' value='POST!'/>
</form>

それはpost.php?id = 1または他のフォームにフォームを投稿し、あなたはの値を取得します$_GET['id']

に置き換えaction='post.php'ますaction='post.php?id=<?php echo $id;?>'

于 2012-09-30T12:58:06.137 に答える