如何在php中正确使用GET?

如何在php中正确使用GET?,php,html,sql,Php,Html,Sql,我花了两个小时试图找到解决问题的方法,但我不知道为什么我的代码不起作用 我有一个sql输出,如下所示: function output(){ while($row = $this->statement->fetch()) { $id = $row["id"]; echo ' <tr> <td>'.$row["comname"]

我花了两个小时试图找到解决问题的方法,但我不知道为什么我的代码不起作用

我有一个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>
            ';
    }
                
当我点击“详细信息”链接时,它会正确地更改URL,但不会打印id。(我不仅想打印id,我这样做只是为了检查功能。)为什么我的代码不起作用?还有第二个“$GET”我必须使用吗?我真的不知道发生了什么事

编辑:php代码到此结束,之后我什么也不做

Edit2:我尝试了
print\r($\u-GET)
,但看起来,id甚至不在$GET数组中。另外,
if(isset($\u GET['details'))
语句也不会执行


谢谢大家!

您应该打印
$\u GET['details']

if (isset($_GET['details'])){
    echo $_GET['details'];
}
或者将其放入变量中:

if (isset($_GET['details'])){
    $id = $_GET['details'];
    echo $id;
}
只是URL中所有GET参数的数组。例如,您可以在参数
q
设置为
stack+overflow
时看到它们。因此,如果您在该URL上回显
$\u GET[“q”]
,您将获得
堆栈+溢出
。您可以将其存储在$id之类的变量中并将其回显,但首先需要将其设置为
$id=$\u GET[“details”]

编辑:我刚刚意识到您现在的代码容易受到名为或HTML注入的攻击。由于我们可以指定被回送的
$\u GET[“details”]
$id
,攻击者可以将HTML代码或
标记放在其中,在访问URL的每个人身上执行危险的JavaScript代码


幸运的是,有一个简单的修复方法:只需将函数
htmlspecialchars()
放在用户输入的任何内容周围
echo
。这里的
echo
将成为
echo htmlspecialchars($id)

谢谢您的回答!我试过了,但没用。没有错误或什么,只是什么也没有发生。请尝试打印($\u GET)即使在实时环境中也要从PHP中获取错误,请将这4行添加到要调试
ini\u集(“显示错误”,1)的任何基于
MYSQLI\u
的脚本的顶部;ini_集(“日志错误”,1);错误报告(E_全部);mysqli_报告(mysqli_报告错误| mysqli_报告严格)。这将强制任何
MYSQLI\uuu
错误生成一个异常,您可以在浏览器上看到该异常以及正常的PHP错误。您已在没有任何注释的情况下更改了代码。首先是
echo$id
$id=$\u获取['details']这说明它不起作用。现在您已经添加了
$id=$\u GET['details']没有任何解释或注释。如果我们不知道您的实际代码是什么以及它的结果是什么,那么我们该如何帮助您呢?你试过了吗?它工作了吗?在显示代码之后,还向我们展示脚本中的其他代码。这可能会对你为什么看不到任何输出产生一些影响。我试过了(现在也只是在问题的代码中添加了这个),但仍然不起作用。没有错误消息,只是什么也没发生。你提供的代码对我来说很好,你确定1。URL看起来像
site.com/page.php?details=42
和2。没有打印身份证?尝试查看源代码(Ctrl+U)并搜索(Ctrl+F)您指定的数字。我刚刚意识到您的代码容易受到XSS攻击。看看我回答中的编辑,我检查了一下,希望打印的内容只是隐藏在某个地方,但什么都没有。URL工作正常,看起来和你写的一模一样。。。但是$GET数组似乎没有收到id。。。Idk如果有必要的话,但是在php代码上面我写了一个html表单,$GET数组只包含这个表单中的值,而不是php-code中的id。让我们找出问题所在。您是否可以尝试打印固定为
echo“42”
而不是$id的内容。如果这样做有效,我们知道这与未设置$id变量有关
if (isset($_GET['details'])){
    $id = $_GET['details'];
    echo $id;
}