-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)当您从第一页到带有链接的第二页时,它被称为查询字符串,您将在 $_GET['id'] 中获得它

2)但是现在您在第二页并单击提交按钮,这意味着它是新的 http 请求,它不携带来自先前 http 请求的 $_GET 值。因此您需要将 $_GET['id'] 作为隐藏表单字段存储到第二页。

更改您的 php 代码如下

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

现在在您的表单中取一个隐藏字段。

<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输入查询字符串值以使其显示?

更重要的是,我将假设我们看到的代码是 forpost.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 代码中的值。 $_REQUEST['id']将从GET 值或POST 值中提取值因此它只需要存在于其中之一中。这样,在首次加载页面和将页面提交回自身时都可以使用相同的数组。

注意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 回答