我有一个导航菜单,并使用$ _GET []显示导航菜单的动态子链接。如何保持数量不超过一个a,b或c?当它被点击一次时。
<li><a href="?p=1">Link 1<a/>
echo $output;
</li>
<li><a href="?p=2">Link 2<a/>
echo $output;
</li>
<li><a href="?p=3">Link 3<a/>
echo $output;
</li>
$page_id = $_Get['p'];
if (($page_id ==1) OR($page_id==2) OR ($page_id==3)){
$output='<li><a href="?p='.$page_id.'a">sublink 1</a></li>
<li><a href="?p='.$page_id.'b">sublink 2</a></li>
<li><a href="?p='.$page_id.'c">sublink 3</a></li>';
}
我想要实现的是什么?p = 1,2或3将保持在顶部?= 1a,当点击第二个子链接时,它将从?p = 1a转移到?p = 1b。 atm它的工作方式如下?p = 1第一个链接将是?p = 1a,当按下第二个子链接时,它将转到?p = 1ab。如何防止这种情况?
目前我使用
if ($page_id ==1){
$output='<li><a href="?p=1a">sublink 1</a></li>
<li><a href="?p=1b">sublink 2</a></li>
<li><a href="?p=1c">sublink 3</a></li>';
}
if ($page_id==2){
$output='<li><a href="?p=2a">sublink 1</a></li>
<li><a href="?p=2b">sublink 2</a></li>
<li><a href="?p=2c">sublink 3</a></li>';
}
if ($page_id==3){
$output='<li><a href="?p=3a">sublink 1</a></li>
<li><a href="?p=3b">sublink 2</a></li>
<li><a href="?p=3c">sublink 3</a></li>';
}
使用 substr
解决问题if ($page_id==1) OR ($page_id==2) OR ($page_id==3)){
$subpage = $_GET['p'];
$subpage = substr($subpage,0,1);
$output = <li><a href="'.$subpage.'a">Link 1</a></li>
}
答案 0 :(得分:1)
试试这个
<?php
$output = array();
$page_id = isset($_GET['p'])? intval($_GET['p']) : '1';
if (($page_id ==1) OR($page_id==2) OR ($page_id==3)){
$output[$page_id]= '<li><a href="?p='.$page_id.'a">sublink 1</a></li>
<li><a href="?p='.$page_id.'b">sublink 2</a></li>
<li><a href="?p='.$page_id.'c">sublink 3</a></li>';
}?>
<ul>
<li><a href="?p=1">Link 1<a/>
<?php echo isset($output[1]) ? $output[1] : '';?>
</li>
<li><a href="?p=2">Link 2<a/>
<?php echo isset($output[2]) ? $output[2] : ''; ?>
</li>
<li><a href="?p=3">Link 3<a/>
<?php echo isset($output[3]) ? $output[3] : '';?>
</li>
</ul>
答案 1 :(得分:0)
为什么不直接使用第二个$ _GET参数?这将是一个更清洁的aproarch。
例如:
$page=intval($_GET['p']);
if(isset($_GET['subpage'])){
$subpage=htmlspecialchars($_GET['subpage']);
}
通过这种方式,您可以避免出现问题并获得更清晰的代码。
此外,您应该将代码加入Cross-Site Scripting (XSS),因为您的代码 很脆弱。