抱歉没有问题。我的PHP脚本组织如下:
switch(true)
{
case (isset($_POST['login'])):
// ...some code to check a login
break;
case (isset($_POST['register'])):
// ... some script to register a new user
etc.
使用表单中提交按钮的名称来控制对每个代码段的访问。我借用了一个菜单系统,该系统使用带命令参数的URL而不是提交按钮。示例网址如下所示:
http://MYIPADDRESS/gradebook/login.php?guid=51913a6e37e1b&command=newclass
所以,为了使用URL获得对程序流的相同控制,我尝试在文件的开头添加它:
if (isset($_GET['command']))
{
switch ($_GET['command'])
{
case 'newclass':
$_POST['basicsettings']='basicsettings';
$guid=$_GET['guid'];
break;
case 'logout':
$_POST['logout']='logout';
break;
case 'continue':
$guid=$_GET['guid'];
$_POST['continue']='continue';
break;
}
}
这不起作用,因为$ _GET全局数组仅在下一个操作发出新URL时重置,并且在大多数情况下,用户将使用表单上的提交按钮而不选择另一个菜单项。您不能在PHP脚本中使用$ _GET上的unset,因为它只会影响本地副本。我尝试设置一个$ _SESSION命令变量,并使用header(“Location:login.php”)刷新页面以重置$ _GET全局数组,但这也无效。这是修改后的代码:
session_start();
if (isset($_GET['command'])) // if program flow control came from a URL
{
switch ($_GET['command']) // check which script section to use
{
case 'newclass':
$_POST['basicsettings']='basicsettings';
$guid=$_GET['guid'];
$_SESSION['command']='basicsettings';
$_SESSION['guid']=$guid;
header("Location:login.php");
break;
case 'logout':
$_POST['logout']='logout';
$_SESSION['command']='logout';
header("Location:login.php");
break;
case 'continueteacher':
$guid=$_GET['guid'];
$_POST['continueteacher']='continueteacher';
$_SESSION['command']='continueteacher';
$_SESSION['guid']=$guid;
header("Location:login.php");
break;
}
}
if (isset($_SESSION['command']))
{
$var=$_SESSION['command'];
$_POST[$var]=$_SESSION['command'];
$guid=$_SESSION['guid'];
$_REQUEST['guid']=$_SESSION['guid'];
unset($_SESSION['command']);
}
switch(true)
{ .. ...etc.
我意识到解决这个问题的一种方法是将菜单系统更改为使用提交按钮而不是URL,但这也有一些缺点。有没有办法让这项工作?假设你可以看到我正在尝试做什么并且它有意义?