我一直在我的本地服务器上开展项目。现在是上传它的时候了,所以我做到了。我开始在网上测试它,导航无法正常工作。
导航的工作原理如下:
<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>
答案 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']