我的一个页面(视频.php)使用表单操作打开,如下所示:
<?php
//Lots of code, including a WHILE loop
echo "<form action="video.php?id=".$row['id']."" method="post" target="_top">
<input type="image" src="".$image."" style="width:180px;height:120px"
alt="Submit"></form>";
?>
在 video.php?id 页面上,我得到如下 id 并声明其他全局范围变量。但是,为什么当我提交表单时,在我的回显警报中看不到 $_GET 变量,如以下简化代码所示?
//video.php?id page
<?php session_start();
include 'connect.php';
$Vid = mysqli_real_escape_string($_GET['id']);
$login_id = mysqli_real_escape_string($_SESSION['login_id']);
if (isset($_POST['sample'])) {
echo "<script>
alert('$Vid');
</script>";
}
else//etc.
?>
<html><head></head><body>
<form action="<?php echo $_SERVER['PHP_SELF']?>" method="post" id="Form">
<button name="button" type="submit">Click</button>
<input type="hidden" name="hidden" value="sample">
</form>
</body></html>
当我向$Vid发出警报时,没有任何警报(空白警报框)。显然,当我提醒 $login_id 时,我看到了 SESSION 变量。 我是否缺少 $_GET 的东西?有没有办法识别全局变量$Vid?如果我可以使用$Vid它将根据我的代码当前编写方式为我节省 5 或 6 个查询。
这是你可以纠正的方法
-
将$row['id'] 放入名称为"id"的隐藏文本框中
-
您的表单方法是 POST,因此请使用 $_POST 来获取 POST 文件中的数据。
我认为您转义错误,因此没有附加 id(注意 $row['id']
后面的反斜杠吗?),请尝试以下操作:
echo '<form action="video.php?id='.$row['id'] . '" method="get" target="_top">
<input type="image" src="' . $image . '" style="width:180px;height:120px"
alt="Submit"></form>";
恕我直言,您的编码风格与所有这些反斜杠非常不可读。可以在需要时混合单引号/双引号...
[编辑],你显然需要将方法更改为"get"。
将操作从 $_SERVER['PHP_SELF'] 更改为 action=",现在可以看到 GET 变量。