PHP包含/未定义变量
我知道这个问题上有更多的话题,我已经阅读了他们,但我没有找到答案。PHP包含/未定义变量
我有一个index.php,包含一堆.php包括:header.php,navigation.php,box.php,footer.php,并且在“pages”div里面,我有一个需要的不同(基于navbar.php或box.php的链接)。
navbar.php例如:
<a href="index.php?v=pag1.php">Page1</a>
<a href="index.php?v=pag2.php">Page2</a>
的index.php:
<div id="wrapper">
<div id="header">
<div id="topbox">
<?php include ("box.php"); ?>
</div></div>
<div id="content">
<div id="bara">
<div id="navbar">
<?php include ("navbar.php"); ?>
</div>
</div>
<div id="pages">
<?php include ("$v"); ?>
</div>
</div>
<div id="footer">
<?php include("footer.php"); ?>
</div>
</div>
我有一个$ V = 'pag1.php',$ V = 'pag2.php' 等上每一页我想包括,但我得到“未定义的变量”错误“未定义的变量:v在C:\ wamp \ www \ test \ index.php在39行”
如果我定义变量$ v index.php,它的工作原理,但这意味着我将不得不创建重复o f index.php,并有点击败目的。我只希望pag1.php,pag2.php,pag3.php等包含在index.php中,而不是创建大量副本。我可以使用HTML的:)
我知道我可能会问一个愚蠢的问题,但我是一个PHP新手,我不知道在哪里寻找答案。先谢谢你。
严格地说,所有你需要的是改变
<?php include ("$v"); ?>
到
<?php include $_GET['v']; ?>
一对夫妇的事情,这里要注意:
- URL参数成为
$_GET
阵列中的项目,不是自变量。 -
include
不需要括号。包含它们并没有错,但没有必要。 See the documentation。 - 你不应该这样实际使用这个实现,因为它是非常不安全的。一个非常简单的URL操作,和一些意图不佳的人可能会弄清楚你的文件结构。至少,您应该检查特定的扩展名,或者在include语句中附加特定的目录名称。
- 你也不应该使用这个实现,因为它没有正常处理不存在的文件。如果请求的内容文件不存在,您应该发送一条错误消息和一个404头。发送标题必须在发送任何内容之前完成,因此检查文件是否存在应该在流程的早期完成。
所以,这全都记在心里,为的index.php一个更好的实现是:
<?php
$v = "content/home.php"; // default page
if (isset($_GET['v'])) { // if the GET variable is set. If no v parameter is provided, asking for $_GET['v'] will cause an error in strict mode.
$v = "content/" . $_GET['v'] . ".php"; // keep some control on what can be opened.
}
if (!file_exists($v)) {
header("HTTP/1.0 404 Not Found"); // this has to be called before ANY content is sent (include newlines).
$v = "content/404.php";
}
?>
<div id="wrapper">
<div id="header">
<div id="topbox">
<?php include "box.php"; ?>
</div></div>
<div id="content">
<div id="bara">
<div id="navbar">
<?php include "navbar.php"; ?>
</div>
</div>
<div id="pages">
<?php include "$v"; ?>
</div>
</div>
<div id="footer">
<?php include"footer.php"; ?>
</div>
</div>
也谢谢詹姆斯K,我完全不知道安全风险。我有很多东西要读,我猜想。 – VVG
你需要调用它之前定义$v
,你可以尝试:
<?php if(isset($_GET['v'])) {
$v = $_GET['v'];
} else {
$v = "home.php";
}
?>
<div id="wrapper">
<div id="header">
<div id="topbox">
<?php include ("box.php"); ?>
</div></div>
<div id="content">
<div id="bara">
<div id="navbar">
<?php include ("navbar.php"); ?>
</div>
</div>
<div id="pages">
<?php include ("$v"); ?>
</div>
</div>
<div id="footer">
<?php include("footer.php"); ?>
</div>
当然你需要有万一v
没有在URL中设置因此其他home.php
默认页面
谢谢,宝来。 (老实说,我认为足够从navbar.php调用v.就像我说的,我是一个新手 – VVG
要传递URL中的变量,您需要使用$_GET
阵列。它将在你的脚本运行之前被自动填充,所以你只需要读取它。例如,$_GET['v']
将包含您通过URL传入的值(?v=...
)。
请注意,最好首先检查是否设置了该值,否则如果不是,它会向您发出令人讨厌的错误。下面的代码是处理未设置参数的简单方法:
if (isset($_GET['v'])) {
include($_GET['v']);
}
else {
include('default.php');
}
希望能够解决它。
尝试包括:($ V); –