1.为多个url变量使用开关

时间:2012-12-13 20:09:42

标签: php

好吧说我有这些页面,

  • /admin/admin.php
  • /admin/blogger.php

在我的主index.php中,我有一个运行'if exists $ page'功能的开关数组,工作正常。我的所有页面都是从site.com/index.php?page=about,site.com/index.php?page=misc等调用的。

在我的admin.php页面内是一个php选项卡式导航,它为我的管理部分使用4个选项卡(博客/图像管理器/文件管理器/报价管理器)。它使用了4页的tabfunction切换。

blogger.php是我的问题所在。

现在我的问题: 而不是为博客系统设置多个页面,“delete.php,add.php,edit.php等”,并使用像'删除点击(delete.php?id = 1)这里',我想尝试运行这一切都来自博客页面。例如,“site.com/admin.php?page=blogger&act=dp/ep/ap”将获得正在传递的$ act,然后使用开关完成操作。

我的PAGE开关工作正常,但是当我尝试调用更多开关时,它不起作用。我尝试使用它作为我的代码

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>"  
      ...  
      ...  
      ...  

这是我遇到的问题。页面正确,tabindex是正确的,然后它停止工作。我只是得到一个空白页,而不是像我应该的编辑页面。我的editPost函数是正确的,因为我已经从editpost.php?id = 1方式测试它,我试图避免。是的,我的功能也包含在这里。

是不是正确传递的网址?或者我的行为开关设置不正确。也许在切换之前设置一个isset($ _ GET ['act'])?我很茫然。

谢谢。

2 个答案:

答案 0 :(得分:0)

你想像这样一次传递多个动作吗?

//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;
      }
  }
}

答案 1 :(得分:0)

  

site.com/admin.php?page=blogger&act=dp/ep/ap

你做不到。具体来说是act=dp/ep/ap。我建议混合使用mod_rewrite和多个$_GET,这样你就可以像WordPress那样做了:

  

site.com/admin/blog/edit

Mod_rewritten:

  

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

从那里你只需使用$_GET并且只有一个switch具有依赖关系。

 $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;
       }
    }

你明白了。