Php 1.对多个url变量使用开关

Php 1.对多个url变量使用开关,php,Php,好吧,假设我有这些页面 /admin/admin.php /admin/blogger.php 在main index.php中,我有一个开关数组,它运行一个“if exists$page”函数,可以正常工作。我的所有页面都是从site.com/index.php?page=about、site.com/index.php?page=misc等调用的 在my admin.php页面中,有一个php选项卡式导航,它使用4个选项卡作为我的管理部分(blogger/image manager/fi

好吧,假设我有这些页面

  • /admin/admin.php
  • /admin/blogger.php
在main index.php中,我有一个开关数组,它运行一个“if exists$page”函数,可以正常工作。我的所有页面都是从site.com/index.php?page=about、site.com/index.php?page=misc等调用的

在my admin.php页面中,有一个php选项卡式导航,它使用4个选项卡作为我的管理部分(blogger/image manager/file manager/quotes manager)。它为4个页面使用一个tab函数开关

在blogger.php中,我的开关有问题

现在回答我的问题: 我不想让博客系统有多个页面,“delete.php、add.php、edit.php等”并使用like“在这里删除click(delete.php?id=1)”,而是想尝试从blogger页面运行所有这些页面。例如,“site.com/admin.php?page=blogger&act=dp/ep/ap”将获得传递的$act,然后使用开关完成操作

我的页面开关工作正常,但当我尝试调用更多开关时,它不工作。我试着用这个作为我的代码

if(isset($_SESSION['id'])) {  
  $act = $_GET['act'];  
  switch ($act) {  
    case 'ap':  
      addPost();  
      break;  
    case 'ep':  
      editPost();  
      break;  
    case 'dp':  
      delPost();  
      break;  
    default:  
      ~table setup  
      ~$query, $result  
      ~if / while loops
      ~echo $row->article_id/title/author/date  
      echo "<a href=\"index.php?page=admin&amp;tabindex=0&amp;act=ep&amp;id={$row->article_id}\">Edit</a>"  
      ...  
      ...  
      ...  
if(isset($\u SESSION['id']){
$act=$_GET['act'];
开关($act){
个案‘ap’:
addPost();
打破
案例“ep”:
editPost();
打破
案例“dp”:
delPost();
打破
违约:
~桌子设置
~$query,$result
~if/while循环
~echo$row->文章编号/标题/作者/日期
回声“”
...  
...  
...  
这就是我遇到的问题。页面是正确的,tabindex是正确的,然后它就停止工作了。我只是得到一个空白页面,而不是我应该得到的编辑页面。我的editPost函数是正确的,因为我已经从editPost.php?id=1的方式测试了它,这是我试图避免的。是的,我的函数也包括在这里

url是否传递不正确?或者我的act开关设置不正确。可能在开关之前设置isset($\u GET['act'])?我不知所措


谢谢。

是否要像这样同时传递多个操作

//test.php?action=add/update/notify
if(isset($_GET['action'])) {

  $act = $_GET['action'];

  //split actions
  $actions = explode('/', $_GET['action']);

  foreach( $actions as $action ){
      switch ($action) {  
        case 'add':  
          echo "add<br />\n";
          break;  
        case 'update':  
          echo "update<br />\n";
          break;  
        case 'notify':  
          echo "notify<br />\n";  
          break;  
        default:
        // default action if no match  (runs for every item of $actions array)
        break;
      }
  }
}
//test.php?action=add/update/notify
如果(isset($_GET['action'])){
$act=$_GET['action'];
//分裂行动
$actions=explode('/',$_GET['action']);
foreach($actions作为$action){
开关($action){
案例“添加”:
回显“添加
\n”; 打破 案例“更新”: 回显“更新
\n”; 打破 “通知”案例: 回显“通知
\n”; 打破 违约:
//不匹配时的默认操作(针对$actions数组的每个项运行) 打破 } } }
site.com/admin.php?page=blogger&act=dp/ep/ap

你不能那样做。特别是
act=dp/ep/ap
。我建议混合使用
mod\u rewrite
和多个
$\u GET
,这样你就可以像WordPress那样:

site.com/admin/blog/edit

Mod_重写为:

site.com/admin.php?page=blog&act=edit

从那里,您只需使用
$\u GET
,并且只有一个带有依赖项的
开关

 $page = $_GET['page']; 
 $action = $_GET['act'];

  switch ($page) {  
    case 'blog':  
          do($action);  
      break;  
    case 'news':  
          do($action);
      break;  
    case 'users':  
          do($action);
      break;  
    default: echo 'Try again.';
      break;
    }

    function do($act) {
     switch($act) {
       case 'delete': confirmDelete();
       break;
       case 'update': updateConfirm();
       break;
       }
    }

你明白了。

你的错误是可见的吗?如果它们是隐藏的,试着把
错误报告(E\u ALL)
放在开始位置。是的,为了开发目的,我有错误报告(E\u ALL);在我的header.inc.php文件中。我想这都是我在这里看到的伪代码,你从_GET收到act=del/edit/add,还有实际的案例“del/edit/add”:break;section?抱歉,我刚刚在这篇文章中更正了它。add/edit/del应该是ap/ep/dp,以匹配我的切换案例。谢谢你向我指出这一点。是的,&act=ap/ep/dp切换是正确的这里。好的,谢谢。我会在回到我的dev文件所在的家后尝试这个方法,并告诉你它是否有效//如果不匹配,则执行默认操作(对$actions数组的每一项运行)-----这是否意味着如果他们使用say$act=xDfklj43qrADF,它将显示默认值,而不管他们在我的案例中没有添加什么?或者我应该在foreach中添加其他内容吗?您不必在默认值中添加任何内容,但在switch语句中,无论何时运行,如果没有找到匹配项,都将调用默认值。好的,这是我的想法。但不,我不是指调用一次将它们全部显示出来。甚至不知道这会如何工作。act=ap/ep/dp意味着act=ap,或act=ep,或act=dp。很抱歉,我应该在这方面做更多的说明。我仍然没有运气显示页面,因此你的第一个回复。我可能必须清理我的网站,看看有什么额外的杂项材料可能导致它不工作。尽管我更希望有一个ll my会为传递的2-4个变量关闭一页。我会尝试bobtheasian的想法,看看是否有帮助。我确实喜欢这个想法,让它更干净,只在一页上。我可能误解了你,但我不是指act=dp/ep/ap,而是指act=dp或act=ep或act=ap,只是为了澄清一下。但我确实喜欢这个想法。我会玩弄它。。谢谢你的想法,我假设在没有E_通知的情况下,$page和$action上会出现未定义的错误,如果它们不是先设置的,对吗?