所以我一直在使用$ _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值......这绝对没有意义。
答案 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();
}