4

创建评级系统并且信息没有通过我的 $_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
            }
            ?>

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

4

2 回答 2

4

您应该做几件事。

1. 代替

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

利用

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

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

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

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

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

于 2012-10-04T21:00:18.047 回答
2

您发布的代码有效。因此,障碍必须在您发布的代码中:

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

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

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

于 2012-10-04T21:05:23.003 回答