【问题标题】:$_GET is not working$_GET 不工作
【发布时间】:2012-10-04 20:46:35
【问题描述】:

创建评级系统并且信息没有通过我的 $_GET 变量传输。代码如下

    if (isset($_GET['item'], $_GET['rating'])){
echo 'Works!';
}

变量正在下面的代码中输入

  <?php echo number_format( 
        $article['rating'],1); ?>
        <div class = "rate">
            Rate:
            <?php
            for ($x =1; $x<= $maximum_rating; $x++){
            ?>
                <a href="prestige.php?item=<?php echo $article['id']; ?>&rating=<?php echo $x;?>">
                <?php echo $x; ?></a>
            <?php
            }
            ?>

我对编程相当陌生,因此任何想法或提示将不胜感激。

【问题讨论】:

  • &amp;amp; 应该是 &amp;amp; 但我不确定这是否会阻止事情在这种情况下工作......
  • 点击网址时,浏览器地址栏中会出现什么?
  • 你的php代码真的在prestige.php文件里吗?
  • 1.您是否查看过浏览器中的 HTML 代码以确认链接实际上是正确的?即填充了 ID 和评级值? 2. prestige.php 页面中的其他内容是否有效?如果将“works”消息移到 if() 块上方,它现在会出现吗?
  • 如果您在isset() 行之前var_dump( $_GET );var_dump( $_REQUEST ); 并访问该URL,您会看到什么?

标签: php get


【解决方案1】:

有几件事你应该做。

1. 而不是

prestige.php?item=<?php echo $article['id']; ?>&rating=<?php echo $x;?>

使用

prestige.php?<?= http_build_query(array('item' => $article['id'], 'rating' => $x), '&amp;') ?>

这将转义参数。变量 $article['id']$x 可能包含破坏 HTML 或 URL 的字符。

2. 查看 Firebug/Chrome 开发工具栏中的 Net 选项卡。有没有重定向?发送了哪些标头?

还要查看地址栏,看看 prestige.php 是否真的加载了 GET 参数。

3. 使用像XDebug 这样的调试工具来单步调试你的代码。您可能有一些代码可以重置 $_GET 变量。我个人使用 IDE PHPed,但它有点贵。

【讨论】:

  • +1 用于介绍 PHP5 的 http_build_query。可能应该 -1 仍然使用短开放标签,但我不会:}
  • @SetSailMedia 我真的认为你应该总是在模板中使用短开放标签,只要你不依赖共享主机..
  • 曾经的粉丝,永远的粉丝。我永远不会改变你们所有人! :}
  • 我很沮丧,我的 echo 'works' 仍然无法正常工作,并且地址栏中只显示了 prestige.php。不确定在哪里寻找重定向,但我没有看到任何说重定向的东西。 @Znarkus
  • @Octavius getfirebug.com/network 你应该会看到多个页面请求。另外,将链接悬停在状态栏中,查看是否显示了正确的 URL。
【解决方案2】:

您发布的代码有效。所以问题必须在您没有发布的代码中:

  1. 可能prestige.php 页面有一个PHP 错误,导致它无法显示任何内容;从仅包含 &lt;?php echo 'OK so far'; ?&gt; 的空文件开始。
  2. 可能页面包含杀死 $_GET 的代码(安全检查、框架...)。 (将页面减少到最小的工作案例,没有包含/要求)
  3. 也许页面确实可以工作,但是输出被一个不合时宜的ob_end_clean() 缠住了,这意味着在真正的输出开始之前“清理页面”; (将页面减少到最小的工作案例)
  4. 也许页面可以正常工作,字符串“Works”在那里,但由于 HTML 标记、CSS 或其他呈现问题,您看不到它(检查页面源代码)
  5. URL 可能已损坏,因为商品代码包含无效的 URL 字符(检查浏览器地址栏中显示的内容)
  6. 可能存在干扰的 URL 重写方案(检查 .htaccess 和服务器日志)
  7. 我只记得在 URL 中使用国际字符时发生了类似的事情。尝试使用 ASCII 干净的商品代码,看看会发生什么。
  8. 只是为了确定:确认没有可能干扰的 auto_prepend'ed 文件。

那么,也有可能不止一个以上的动作一起行动。通常在调试时无意中破坏了某些代码,即使在修复了第一个错误之后,代码也不会再次开始工作 - 这并不意味着修复无效。

对不起——我已经没有选择的余地了。我真的很期待知道原因是什么。 (通常我收集的解释越多,真正的答案就越倾向于“以上都不是”。当它发生在我身上时,有时我想知道是否开始相信小精灵 :-( ) .

【讨论】:

  • @Znarkus,我更喜欢你的;我没有想到重定向。根据我过去的经验,这意味着就是答案。那个,或者小精灵:-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-05-10
  • 1970-01-01
  • 1970-01-01
  • 2018-11-06
  • 1970-01-01
  • 2013-03-01
  • 2014-12-12
相关资源
最近更新 更多