当不在本地测试时,URL中的变量将不起作用

时间:2010-11-17 14:37:09

标签: php variables undefined

我一直在我的本地服务器上开展项目。现在是上传它的时候了,所以我做到了。我开始在网上测试它,导航无法正常工作。

导航的工作原理如下:

<a href="index.php?p=add">Add</a>

然后该页面检查$p是否存在,如果存在,则显示相关内容。出于某种原因,虽然单击链接时我的内容没有显示出来。我打开了错误报告,我添加了这个(第39行)

echo $p;

到文件。现在我收到了这个错误:Notice: Undefined variable: p in /home/silver/public_html/admin/index.php on line 39但是只有在线测试时才能在本地测试时正常工作。

如果需要,我可以发布我的代码,但是有很多代码,我不确定这个问题是什么。

更新 感谢所有的回复,但我很困惑你如何使用你的建议,因为我习惯按照我的方式做事。

目前,我这样做是为了检查$p变量是什么

<?php if(!isset($p)) { // DEFAULT PAGE VIEWED AT INDEX.PHP ?>

并使用此链接到页面:

<a href="index.php?p=add">Add New Item</a>

4 个答案:

答案 0 :(得分:3)

您依赖于register_globals,这是PHP的过时和弃用功能。此功能自动转换GET,POST,COOKIE,SERVER等变量并将其插入全局范围。这意味着file.php?p=blah会产生$p == 'blah'。对于in the PHP manual概述的许多不同的范围和安全性原因,这是一个坏主意。

使用superglobals(例如$_GET$_POST$_SERVER)。


回复您的更新问题,您的代码

<?php if(!isset($p)) { // DEFAULT PAGE VIEWED AT INDEX.PHP ?>

应该成为

<?php if(!isset($_GET['p'])) { // DEFAULT PAGE VIEWED AT INDEX.PHP ?>

答案 1 :(得分:1)

$p不会自动从URL中的参数设置。您需要先使用代码$p$p = $_GET['p'];附加到来自网址的值。

但是要小心,你需要清理这个GET参数和/或创建一个白名单以确保它是一个有效的参数。

答案 2 :(得分:1)

你依赖于一个名为register_globals的旧的非常糟糕的“功能”,它直接从GET加载变量。如果您希望通过HTTP GET设置$p = $_GET['p'],则需要执行$p

答案 3 :(得分:1)

可能是因为'register_globals'在您的开发系统上为ON而在您的实时系统上为OFF。在你的dev上将它设置为OFF并使用$ _GET ['p']