我花了两个小时试图找到解决问题的方法,但是我不知道为什么我的代码不起作用。
我有一个sql输出,如下所示:
function output(){
while($row = $this->statement->fetch()) {
$id = $row["id"];
echo '
<tr>
<td>'.$row["comname"].'</td>
<td>'.$row["district"].'</td>
<td>'.$row["industry"].'</td>
<td>"<a href="?details=' . $id . '">Details</a>"</td>
</tr>
<br>
';
}
如果有人点击“详细信息”链接,我想提供有关该公司的更多信息。因此,我将id保存在url中,以标识单击了哪个公司。为了检查是否单击了详细信息链接,我写了以下内容:
编辑:只是在提示后添加了“$id=$\u get['details']”,现在看起来是这样的:
if (isset($_GET['details'])){
$id = $_GET['details'];
echo $id;
}
}
当我点击“详细信息”链接时,它会正确地更改url,但它不会打印id(我不仅要打印id,我这样做只是为了检查功能。)为什么我的代码不起作用?有没有第二个“$get”我要用?我真的不知道发生了什么事。
编辑:php代码到此结束,之后我什么也不做。
我试过了 print_r($_GET)
看起来,id甚至不在$get数组中。还有 if (isset($_GET['details']))
语句未执行。
谢谢您!
2条答案
按热度按时间s8vozzvw1#
你应该把照片打印出来
$_GET['details']
:或者把它放在一个变量中:
xnifntxz2#
$_GET[]
只是url中所有get参数的数组。你在电视上看到他们的例子https://www.google.com?q=stack+overflow 其中参数q
设置为stack+overflow
. 所以如果你能回音$_GET["q"]
在那个网址上stack+overflow
. 您可以将它存储在$id这样的变量中并将其回显,但首先需要将其设置为$id = $_GET["details"];
编辑:我刚刚意识到你现在的代码容易受到一种叫做xss或html注入的攻击。因为我们可以指定$_GET["details"]
所以呢$id
攻击者可以将html代码或<script>
标记在那里执行危险的javascript代码对每个访问url的人。幸运的是,有一个简单的解决方法:只需将函数
htmlspecialchars()
无论用户输入什么echo
. 这个echo
你在这里会变成echo htmlspecialchars($id);