带有$\u GET php的动态导航菜单

带有$\u GET php的动态导航菜单,php,Php,我有一个导航菜单,并使用$\u 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<

我有一个导航菜单,并使用$\u 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>';
    
    }
    
    if($page\u id==1){
    $output='
  • '; } 如果($page_id==2){ $output='
  • '; } 如果($page_id==3){ $output='
  • '; }
    使用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>
    }
    
    如果($page\u id==1)或($page\u id==2)或($page\u id==3)){
    $subpage=$_GET['p'];
    $subpage=substr($subpage,0,1);
    $output=
  • }
    为什么不使用第二个$\u GET参数呢?这将是一个更干净的办法

    例如:

    $page=intval($_GET['p']);
    if(isset($_GET['subpage'])){
        $subpage=htmlspecialchars($_GET['subpage']);
    }
    
    这样,您就可以避免问题,而且代码也更加清晰

    此外,您还应该将代码带入,因为您的代码 易受攻击。

    试试这个

     <?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
    • 链接2
    • 链接3

    我在这篇文章中没有跟踪你,你能解释清楚吗?我知道安全漏洞。我的意思是如何停止增加点击一次。使用子页面中的第二个参数。例如:你能更具体地说明你想要的最终结果吗?我编辑了我的文章,以便更好地解释我想要在这里取得的成就。我希望它能解释足够有用的信息。重复问题解决了。希望这是您所需要的。是的,但我提出了另一个使用substr($string,0,1)的解决方案,在再次使用page_id之前将其限制为1,这解决了我的问题。