【发布时间】:2017-03-29 23:44:49
【问题描述】:
在尝试制作“模板引擎”时,我得到了奇怪的结果。基本上,我希望能够使用包含来自 SQL 数据库的数据的 PHP 变量。
发生的情况是PHP端一切正常,而不是需要显示此信息的页面(index.php)。
我正在研究一种从 sql 数据库中获取网站名称的方法,所以我的索引上有类似的东西:
<?php
include ('php/data/sitename.php');
?>
<!DOCTYPE html>
<html>
<head>
<title><?php echo $sitename; ?> - Home</title>
<!--Import Google Icon Font-->
<link href="http://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<!--Import materialize.css-->
<link type="text/css" rel="stylesheet" href="css/materialize.min.css" media="screen,projection"/>
<!--Let browser know website is optimized for mobile-->
<meta name="viewport" content="width=device-width, initial-scale=1.0"/>
</head>
<body>
<div class="container">
<!-- HEADER: Navbar -->
<?php $navbar; ?>
<!-- MAIN: Index Page contents -->
<?php $page_index ?>
<!-- FOOTER: Footer -->
<?php $footer; ?>
<?php $sitename; ?>
</div>
<!--Import jQuery before materialize.js-->
<script type="text/javascript" src="https://code.jquery.com/jquery-2.1.1.min.js"></script>
<script type="text/javascript" src="js/materialize.min.js"></script>
</body>
</html>
此变量来自名为 sitename.php 的文件(已包含在内),代码如下:
<?php
include ('../db.php');
$sql = "SELECT id, sitename FROM GeneralData";
$getname = mysqli_query($conn, $sql);
if ($getname->num_rows > 0) {
while($row = $getname->fetch_assoc()) {
$sitename = $row['sitename'];
echo $sitename;
}
}
?>
是的,我使用了 echo $sitename;,我知道它不会回显实际数据,但我这样做是为了测试一些东西,结果如下:
将文件sitename.php 包含到index.php 将什么都不做,就像它不存在一样。但是,如果我写 "echo "123";"在它上面,它将在索引上回显 123。行不通的就是我需要的。
如果我直接访问 sitename.php,它只会输出我请求的正确 SQL 值,因为我告诉它回显(如我之前所述)。但是,它在索引中不起作用,根本不起作用。
我能做什么? 提前致谢!
【问题讨论】:
-
你需要使用
eval()从一个变量中执行PHP代码。 -
这是一个非常糟糕的主意。您应该使用真正的模板库,而不是将变量放入数据中。
-
我应该怎么做?
-
我认为这是一个范围问题。因为 var 是在另一个文件中声明的,所以它在您的主文件中不是“可见的”。在您的 if 语句之前,添加 global $sitename = ''; 并查看是否有效。
-
你知道 $sitename;不是全局变量吧?