PHP $ _GET停止工作

时间:2014-11-08 00:57:31

标签: php get

所以我一直在使用$ _GET来访问文章,方法是将文章ID传递给URL并在下一页读取该ID,以便绘制与文章相关的所有值。

传递代码如下

while ($row = mysqli_fetch_array($r, MYSQLI_ASSOC)) {
            echo '<td><a href="Article.php?id=' . $row['ArticleID']. '"><img class="cover" src="' . $row['CoverImage']. '"></a></td>';

虽然有文章,获取图像,制作图像链接,然后点击图像时附加&#34; id =#&#34;到网址的末尾。

正如预期的那样,当点击链接时我得到了这个。

www.r3gamers.com/Article.php?id=1

到目前为止一切似乎都很好,但是使用此代码然后检索id并将其放在变量

if ( (isset($_GET['id'])) && (is_numeric($_GET['id'])) ) {
        $articleid = $_GET['id'];
    } elseif ( (isset($_POST['id'])) && (is_numeric($_POST['id'])) ) {
        $articleid = $_POST['id'];
    } else {
        echo '<p class="error">This page has been accessed in error.</p>'; exit();
    }

总是以返回的错误结束,即使已成功附加到网址,也无法看到该值,我无法说明原因。

值得一提的是,这个确切的代码在实时网站上工作正常,直到今天,我没有对代码进行任何更改(除了将标题移动到包含文件,标题对此没有影响一段代码)并且似乎没有理由它已经停止。 为了安全起见,我甚至还原到了一周以上的代码(错误开始之前的方式),并且没有修复错误。

编辑:为了回复回复,我用var_dump($ _ GET)测试了脚本,返回&#34;空&#34;。

的error_reporting(E_ALL); ini_set(&#39; display_errors&#39;,1); 然而,这个建议没有提供任何反馈(我能找到),可能意味着没有发现脚本错误?

EDIT3:由于没有发现任何错误,我创建了两个相当简单的文件来测试getter和setter是否正常工作。

testset.php

<a href="testget.php?id=1"><img class="cover" src="Pictures/TheLastOfUs/Cover.jpg"></a>

testget.php

<?php

var_dump($_GET);
?>

这会产生此输出

array (size=1)
  'id' => string '1' (length=1)

为了确保它确实有效,我尝试了不同的值

array (size=1)
  'id' => string 'thisisatestid' (length=13)

当然,这意味着我的项目并不是“#34;&#34;”#34;但最糟糕的是上面提到的一两个文件? (可能只是article.php)?

EDIT4:甚至进一步测试(从article.php更改初始链接?id =&#34; .row ....&#34;到testget.php?id =&#34; .row ... 。&#34;表明索引肯定仍然按预期工作,通过var_dump输出生成的ID

那么,它只是article.php页面的问题。

EDIT5:VAR_DUMP($ _ GET); on&#34; Article.php&#34;现在从URL中检索id但是GET测试没有,所以它仍然无法正常工作(虽然我觉得最终取得了进展)

EDIT6:我设法让id在localhost上完美运行,但在将新的工作副本上传到godaddy之后,它仍然无法正常工作。 $ _GET值正在由var_dump检查传递,但是getter并不成功(具有讽刺意味),因为它无法找到get值......这绝对没有意义。

2 个答案:

答案 0 :(得分:2)

括号太多;试试这个:

if(isset($_GET['id']) && is_numeric($_GET['id'])){
   $articleid = $_GET['id'];
}else{
   echo '<p class="error">This page has been accessed in error.</p>'; 
   exit();
}

另外,如果您确定通过GET访问id变量,则没有理由尝试POST,因此请删除额外的代码。

您提到了包含文件的内容?将此代码放在脚本的开头,它可能会给您一些您需要查看的错误,以便您知道问题所在:

error_reporting(E_ALL);
ini_set('display_errors', 1);

如果存在任何与服务器端PHP相关的错误,则会为您输出错误并告知您发生了什么。

修改: 此时,我必须想象您的托管服务更新了他们的服务器,或者在不使用更安全的东西的情况下对无法访问$ _GET请求变量的地方进行了一些修改。这一切都可能是增强的安全功能。试试这个:

$articleid = filter_input(INPUT_GET, 'id');

if(!$articleid || !is_numeric($articleid)){
   echo '<p class="error">This page has not been properly accessed.</p>';
   exit;
}

答案 1 :(得分:-1)

试试这个

if ( isset($_GET['id']) && is_numeric($_GET['id']) ) {
    $articleid = $_GET['id'];
} else {
    echo '<p class="error">This page has been accessed in error.</p>';
    exit();
}