所以我创建了一个网站,通过index.php文件中的页面加载器加载其页面。现在我想创建一个主详细信息页面但我无法正常工作。它将重定向到detail.php文件,但它不会对$ _GET ['id']中的ID执行任何操作。
//detail .php
<?php
if (isset($_GET['id'])){
$id=mysqli_real_escape_string($_GET['id']);
}
?>
<form action="" method="GET" enctype="multipart/form-data">
<center><table>
<?php
global $connect;
echo "TEST"
?>
</table></center>
</form>
//pageloader.php
<?php
if(@$_GET["page"]){
$page = "pages/".$_GET["page"].".php";
if(file_exists($page))
{
include $page;
}
else
{
echo "deze pagina bestaat niet";
}
}
?>
当我点击引用该ID的链接时,它会给出这个链接:
... /?页=细节?ID = 6
这个结果进入页面不存在。
如何解决这个小问题以正确显示给定ID的内容。
答案 0 :(得分:1)
我不赞成你在这里进行的这种“动态页面”交易,但如果你打算这样做,那么你应该在白名单上运行它。
$allowed = array(
'1' => 'page1.php',
'2' => 'page2.php',
.....etc
);
$id = trim($_GET['id']);
if(isset($allowed[$id]) && file_exist("pages/".$allowed[$id].".php")) {
include("pages/" . $allowed[$id] . ".php";);
}
以上检查以确保$id
页面中存在$allowed
,并且该文件是否存在于其目录中。
答案 1 :(得分:0)
$id=intval($_GET['id']);
intval
会将id限定为数字,如果为空或非数字,则会生成零。
mysqli_real_escape_string
用于在将文本存储到记录
更改
if(@$_GET["page"]){
$page = '/page
要
$page = $_GET["page"];
if strlen($page) > 0){
$page = "/home/user/public_html/pages/$page.php";
if (file_exists($page)){
使用双引号时没有理由使用点串连接。
最好从本地目录中检索页面而不是HTTP
如果您使用post而不是获取
,地址栏看起来会更干净<form action="" method="post" enctype="multipart/form-data"
使用$_POST['page'];
<center>
已过时,请改用CSS。
<style>
table{margin:0 auto;}
</style>