我只是潜入PHP并且已经做了一些阅读和玩游戏 - 我的代码如下,我正在尝试加载页面(正如你所看到的) - 我得到解析错误。第7行的index.php中的语法错误,unexpecter T_VARIABLE
我的索引第7行
<?php include(''$id'') ?>
我被告知应该是变量而不是('$ id')
当我在当前编码中使用('$ id')或('$ nav_menu')时,它使我无法打开流:没有这样的文件或目录
我可能错过了一些明显的东西,但是有人能指出我正确的方向吗?
由于
<?php
if (is_numeric($_GET['id'])) //prevent hacking
{
switch ($_GET['id']) //get the id of menu needed for this page
{
case 0:
$nav_menu = "content.php"; //if the variable is 0 or not set
break;
case 1:
$nav_menu = "bio.php"; //if the variable is 1, get category 1 links
break;
case 2:
$nav_menu = "contact.php"; //if the variable is 2, get category 2 links
break;
default:
$nav_menu = "content.php"; //redundant for defaulting if the id is greater than 2
}
}
?>
答案 0 :(得分:4)
<?php include($id); ?>
没有引号。
另外,请确保检查$ id的值,您不希望有人包括“../../path/to/my/passwords.txt”或同样令人不安的东西;)
您对$nav_menu
的切换案例陈述粗略但有效且肯定是必需的。
此外,我非常确定switch
是安全的,因此无需检查is_numeric
上的$_GET['id']
编辑:Jared提到相对vs绝对路径。我不知道他在说什么,但这就是我的想法: 始终永远始终始终始终始终始终始终始终始终始终始终始终始终始终始终始终始终始终始终始终始终始终使用:
include (dirname(__FILE__) . "/thefile.ext");
这将永远让你的道路毫无疑问绝对。
答案 1 :(得分:2)
不需要在变量周围使用引号,但如果这样做,请确保使用"
而不是''
。你可以尝试:
<?php
include($id);
include($nav_menu);
?>
17行代码可以缩短为两行。您可以改为使用它:
<?php
$list = array("content.php", "bio.php", "contact.php");
$navmenu = (isset($_GET['id']) && isset($list[$_GET['id']]) ? $list[$_GET['id']] : 'content.php';
?>
答案 2 :(得分:1)
你在这里犯了四件事。
首先,在每个语句的末尾都需要分号。
<?php include(''$id''); ?> // Note semicolon
你应该在内联字符串语句的任何一端只有一个引号,而另一个是转义的,即:
<?php include('\'$id\''); ?> // Valid string
现在,如果要扩展该变量,则需要使用双引号字符串或使用.
连接符。在这种情况下,您不需要引用它:
<?php include("$id"); ?>
<?php include($id); ?>
最后,您应该给出要包含的文件的相对/绝对路径。
<?php
$path = "myinclude.php";
$path = "../includes/myinclude.php";
$path = "/web/my_site_com/includes/myinclude.php";
include($path);
?>
如果您使用开关激活特定文件,则可以使用双引号字符串执行此操作:
<?php
$path = "../includes/$id";
include($path);
?>