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
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&tabindex=0&act=ep&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上会出现未定义的错误,如果它们不是先设置的,对吗?